summaryrefslogtreecommitdiff
path: root/src/ipcpd/unicast/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipcpd/unicast/main.c')
-rw-r--r--src/ipcpd/unicast/main.c54
1 files changed, 24 insertions, 30 deletions
diff --git a/src/ipcpd/unicast/main.c b/src/ipcpd/unicast/main.c
index bd1fee51..c2348242 100644
--- a/src/ipcpd/unicast/main.c
+++ b/src/ipcpd/unicast/main.c
@@ -55,7 +55,7 @@
#include <assert.h>
#include <inttypes.h>
-static int initialize_components(const struct ipcp_config * conf)
+static int initialize_components(struct ipcp_config * conf)
{
assert(ipcp_dir_hash_len() != 0);
@@ -77,23 +77,25 @@ static int initialize_components(const struct ipcp_config * conf)
goto fail_dt;
}
- if (fa_init()) {
- log_err("Failed to initialize flow allocator component.");
- goto fail_fa;
- }
+ ipcp_set_dir_hash_algo((enum hash_algo) conf->layer_info.dir_hash_algo);
- if (dir_init()) {
+ if (dir_init(&conf->unicast.dir)) {
log_err("Failed to initialize directory.");
goto fail_dir;
}
+ if (fa_init()) {
+ log_err("Failed to initialize flow allocator component.");
+ goto fail_fa;
+ }
+
ipcp_set_state(IPCP_INIT);
return 0;
- fail_dir:
- fa_fini();
fail_fa:
+ dir_fini();
+ fail_dir:
dt_fini();
fail_dt:
ca_fini();
@@ -105,10 +107,10 @@ static int initialize_components(const struct ipcp_config * conf)
static void finalize_components(void)
{
- dir_fini();
-
fa_fini();
+ dir_fini();
+
dt_fini();
ca_fini();
@@ -138,8 +140,15 @@ static int start_components(void)
goto fail_connmgr_start;
}
+ if (dir_start() < 0) {
+ log_err("Failed to start directory.");
+ goto fail_dir_start;
+ }
+
return 0;
+ fail_dir_start:
+ connmgr_stop();
fail_connmgr_start:
enroll_stop();
fail_enroll_start:
@@ -153,6 +162,8 @@ static int start_components(void)
static void stop_components(void)
{
+ dir_stop();
+
connmgr_stop();
enroll_stop();
@@ -164,16 +175,6 @@ static void stop_components(void)
ipcp_set_state(IPCP_INIT);
}
-static int bootstrap_components(void)
-{
- if (dir_bootstrap()) {
- log_err("Failed to bootstrap directory.");
- return -1;
- }
-
- return 0;
-}
-
static int unicast_ipcp_enroll(const char * dst,
struct layer_info * info)
{
@@ -231,32 +232,25 @@ static int unicast_ipcp_enroll(const char * dst,
return -1;
}
-static int unicast_ipcp_bootstrap(const struct ipcp_config * conf)
+static int unicast_ipcp_bootstrap(struct ipcp_config * conf)
{
assert(conf);
assert(conf->type == THIS_TYPE);
- enroll_bootstrap(conf);
-
if (initialize_components(conf) < 0) {
log_err("Failed to init IPCP components.");
goto fail_init;
}
+ enroll_bootstrap(conf);
+
if (start_components() < 0) {
log_err("Failed to init IPCP components.");
goto fail_start;
}
- if (bootstrap_components() < 0) {
- log_err("Failed to bootstrap IPCP components.");
- goto fail_bootstrap;
- }
-
return 0;
- fail_bootstrap:
- stop_components();
fail_start:
finalize_components();
fail_init: