summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@intec.ugent.be>2016-03-09 13:05:06 +0100
committerSander Vrijders <sander.vrijders@intec.ugent.be>2016-03-09 13:05:06 +0100
commitd68e4e5e540720d9b02e2062e3982f1c438eb1e0 (patch)
tree663da5a36693ab0785c7c48e45bd5cc139c80a85
parentaf8db503f46049fabaa793905f35bf0a2867744b (diff)
downloadouroboros-d68e4e5e540720d9b02e2062e3982f1c438eb1e0.tar.gz
ouroboros-d68e4e5e540720d9b02e2062e3982f1c438eb1e0.zip
irmd, lib: Replace stubs in irmd
This replaces the stubs in the irmd and calls the actual IPCP operations from the library. It also calls the DIF Allocator API in one of the operations.
-rw-r--r--include/ouroboros/da.h4
-rw-r--r--include/ouroboros/ipcp.h24
-rw-r--r--src/irmd/main.c79
-rw-r--r--src/lib/CMakeLists.txt2
-rw-r--r--src/lib/da.c33
-rw-r--r--src/lib/ipcp.c63
-rw-r--r--src/lib/irm.c2
7 files changed, 167 insertions, 40 deletions
diff --git a/include/ouroboros/da.h b/include/ouroboros/da.h
index 62bc66e5..17c25203 100644
--- a/include/ouroboros/da.h
+++ b/include/ouroboros/da.h
@@ -25,7 +25,7 @@
#include "common.h"
-rina_name_t da_resolve_daf(char * daf_name);
-char ** da_resolve_dap(rina_name_t * name);
+rina_name_t * da_resolve_daf(char * daf_name);
+char ** da_resolve_dap(rina_name_t * name);
#endif
diff --git a/include/ouroboros/ipcp.h b/include/ouroboros/ipcp.h
index 7b53d827..c8682ec3 100644
--- a/include/ouroboros/ipcp.h
+++ b/include/ouroboros/ipcp.h
@@ -25,18 +25,22 @@
#include "common.h"
-int ipcp_create(rina_name_t name,
- char * ipcp_type);
-int ipcp_destroy(int instance);
+struct ipcp;
-int ipcp_reg(int instance,
- char ** difs);
-int ipcp_unreg(int instance,
- char ** difs);
+struct ipcp * ipcp_create(rina_name_t name,
+ char * ipcp_type);
+int ipcp_destroy(struct ipcp * instance);
-int ipcp_bootstrap(int instance,
- struct dif_conf conf);
-int ipcp_enroll(int instance,
+int ipcp_reg(struct ipcp * instance,
+ char ** difs,
+ size_t difs_size);
+int ipcp_unreg(struct ipcp * instance,
+ char ** difs,
+ size_t difs_size);
+
+int ipcp_bootstrap(struct ipcp * instance,
+ struct dif_config conf);
+int ipcp_enroll(struct ipcp * instance,
char * dif_name,
rina_name_t member);
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 262b737c..f744ee7f 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -26,53 +26,79 @@
#include <ouroboros/common.h>
#include <ouroboros/sockets.h>
#include <ouroboros/irm.h>
+#include <ouroboros/ipcp.h>
+#include <ouroboros/da.h>
+
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#include <errno.h>
-static void create_ipcp(rina_name_t * name,
+struct irm {
+
+};
+
+static void create_ipcp(rina_name_t name,
char * ipcp_type)
{
- LOG_DBG("AP name is %s", name->ap_name);
- LOG_DBG("AP instance id is %d", name->api_id);
- LOG_DBG("AE name is %s", name->ae_name);
- LOG_DBG("AE instance id is %d", name->aei_id);
+ struct ipcp * instance = NULL;
- LOG_DBG("IPCP type is %s", ipcp_type);
-
- LOG_MISSING;
+ instance = ipcp_create(name, ipcp_type);
+ if (instance == NULL)
+ LOG_ERR("Failed to create IPCP");
}
-static void destroy_ipcp(rina_name_t * name)
+static void destroy_ipcp(rina_name_t name)
{
- LOG_MISSING;
+ struct ipcp * instance = NULL;
+
+ if (ipcp_destroy(instance))
+ LOG_ERR("Could not destroy IPCP");
}
-static void bootstrap_ipcp(rina_name_t * name,
- struct dif_config * conf)
+static void bootstrap_ipcp(rina_name_t name,
+ struct dif_config conf)
{
- LOG_MISSING;
+ struct ipcp * instance = NULL;
+
+ if (ipcp_bootstrap(instance, conf))
+ LOG_ERR("Could not bootstrap IPCP");
}
-static void enroll_ipcp(rina_name_t * name,
+static void enroll_ipcp(rina_name_t name,
char * dif_name)
{
- LOG_MISSING;
+ struct ipcp * instance = NULL;
+ rina_name_t * member;
+
+ member = da_resolve_daf(dif_name);
+ if (member == NULL) {
+ LOG_ERR("Could not find a member of that DIF");
+ return;
+ }
+
+ if (ipcp_enroll(instance, dif_name, *member))
+ LOG_ERR("Could not enroll IPCP");
}
-static void reg_ipcp(rina_name_t * name,
+static void reg_ipcp(rina_name_t name,
char ** difs,
size_t difs_size)
{
- LOG_MISSING;
+ struct ipcp * instance = NULL;
+
+ if (ipcp_reg(instance, difs, difs_size))
+ LOG_ERR("Could not register IPCP to N-1 DIF(s)");
}
-static void unreg_ipcp(rina_name_t * name,
+static void unreg_ipcp(rina_name_t name,
char ** difs,
size_t difs_size)
{
- LOG_MISSING;
+ struct ipcp * instance = NULL;
+
+ if (ipcp_unreg(instance, difs, difs_size))
+ LOG_ERR("Could not unregister IPCP from N-1 DIF(s)");
}
int main()
@@ -104,29 +130,28 @@ int main()
if (msg == NULL)
continue;
- LOG_DBG("Got message code %d", msg->code);
switch (msg->code) {
case IRM_CREATE_IPCP:
- create_ipcp(msg->name, msg->ipcp_type);
+ create_ipcp(*(msg->name), msg->ipcp_type);
break;
case IRM_DESTROY_IPCP:
- destroy_ipcp(msg->name);
+ destroy_ipcp(*(msg->name));
break;
case IRM_BOOTSTRAP_IPCP:
- bootstrap_ipcp(msg->name,
- msg->conf);
+ bootstrap_ipcp(*(msg->name),
+ *(msg->conf));
break;
case IRM_ENROLL_IPCP:
- enroll_ipcp(msg->name,
+ enroll_ipcp(*(msg->name),
msg->dif_name);
break;
case IRM_REG_IPCP:
- reg_ipcp(msg->name,
+ reg_ipcp(*(msg->name),
msg->difs,
msg->difs_size);
break;
case IRM_UNREG_IPCP:
- unreg_ipcp(msg->name,
+ unreg_ipcp(*(msg->name),
msg->difs,
msg->difs_size);
break;
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index 5dad9153..349f8d73 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -8,7 +8,9 @@ set(SOURCE_FILES
# Add source files here
bitmap.c
cdap.c
+ da.c
du_buff.c
+ ipcp.c
irm.c
sockets.c
)
diff --git a/src/lib/da.c b/src/lib/da.c
new file mode 100644
index 00000000..e9888d9e
--- /dev/null
+++ b/src/lib/da.c
@@ -0,0 +1,33 @@
+/*
+ * Ouroboros - Copyright (C) 2016
+ *
+ * The API to instruct the DIF Allocator
+ *
+ * Sander Vrijders <sander.vrijders@intec.ugent.be>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <ouroboros/da.h>
+
+rina_name_t * da_resolve_daf(char * daf_name)
+{
+ return NULL;
+}
+
+char ** da_resolve_dap(rina_name_t * name)
+{
+ return NULL;
+}
diff --git a/src/lib/ipcp.c b/src/lib/ipcp.c
new file mode 100644
index 00000000..718b5f3e
--- /dev/null
+++ b/src/lib/ipcp.c
@@ -0,0 +1,63 @@
+/*
+ * Ouroboros - Copyright (C) 2016
+ *
+ * The API to instruct IPCPs
+ *
+ * Sander Vrijders <sander.vrijders@intec.ugent.be>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <ouroboros/ipcp.h>
+
+struct ipcp {};
+
+struct ipcp * ipcp_create(rina_name_t name,
+ char * ipcp_type)
+{
+ return NULL;
+}
+
+int ipcp_destroy(struct ipcp * instance)
+{
+ return -1;
+}
+
+int ipcp_reg(struct ipcp * instance,
+ char ** difs,
+ size_t difs_size)
+{
+ return -1;
+}
+
+int ipcp_unreg(struct ipcp * instance,
+ char ** difs,
+ size_t difs_size)
+{
+ return -1;
+}
+
+int ipcp_bootstrap(struct ipcp * instance,
+ struct dif_config conf)
+{
+ return -1;
+}
+
+int ipcp_enroll(struct ipcp * instance,
+ char * dif_name,
+ rina_name_t member)
+{
+ return -1;
+}
diff --git a/src/lib/irm.c b/src/lib/irm.c
index 519b4eb8..493cb71d 100644
--- a/src/lib/irm.c
+++ b/src/lib/irm.c
@@ -40,7 +40,7 @@ static int send_irm_msg(struct irm_msg * msg)
buf = serialize_irm_msg(msg);
if (buf == NULL) {
close(sockfd);
- return -1;
+ return -1;
}
if (write(sockfd, buf->data, buf->size) == -1) {