From 919349fd119bff11e9d34da09a9d71bf5675dba2 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Thu, 3 May 2018 17:49:03 +0200 Subject: ipcpd: Allow wait for dir enrollment on dt conn This adds the option to wait for the directory (DHT) to enroll on creating a new data transfer connection. This makes scripting network bootstraps more stable. The default setting is OFF. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/ipcpd/normal/connmgr.c | 7 ++++++- src/ipcpd/normal/dht.c | 2 +- src/ipcpd/normal/dht.h | 2 ++ src/ipcpd/normal/dir.c | 10 ++++++++++ src/ipcpd/normal/dir.h | 2 ++ 5 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src/ipcpd/normal') diff --git a/src/ipcpd/normal/connmgr.c b/src/ipcpd/normal/connmgr.c index 843eb280..6301baed 100644 --- a/src/ipcpd/normal/connmgr.c +++ b/src/ipcpd/normal/connmgr.c @@ -33,6 +33,7 @@ #include "comp.h" #include "connmgr.h" +#include "dir.h" #include "enroll.h" #include "ipcp.h" @@ -376,7 +377,8 @@ int connmgr_alloc(enum comp_id id, return -1; } - if (connmgr.comps[id].info.pref_version != conn->conn_info.pref_version) { + if (connmgr.comps[id].info.pref_version != + conn->conn_info.pref_version) { log_dbg("Unknown protocol version."); flow_dealloc(conn->flow_info.fd); return -1; @@ -391,6 +393,9 @@ int connmgr_alloc(enum comp_id id, switch (id) { case COMPID_DT: notifier_event(NOTIFY_DT_CONN_ADD, conn); +#ifdef IPCP_CONN_WAIT_DIR + dir_wait_running(); +#endif break; case COMPID_MGMT: notifier_event(NOTIFY_MGMT_CONN_ADD, conn); diff --git a/src/ipcpd/normal/dht.c b/src/ipcpd/normal/dht.c index 1fabcb84..5e63f748 100644 --- a/src/ipcpd/normal/dht.c +++ b/src/ipcpd/normal/dht.c @@ -295,7 +295,7 @@ static int dht_set_state(struct dht * dht, return 0; } -static int dht_wait_running(struct dht * dht) +int dht_wait_running(struct dht * dht) { int ret = 0; diff --git a/src/ipcpd/normal/dht.h b/src/ipcpd/normal/dht.h index b49e860d..00410ff4 100644 --- a/src/ipcpd/normal/dht.h +++ b/src/ipcpd/normal/dht.h @@ -47,4 +47,6 @@ int dht_unreg(struct dht * dht, uint64_t dht_query(struct dht * dht, const uint8_t * key); +int dht_wait_running(struct dht * dht); + #endif /* OUROBOROS_IPCPD_NORMAL_DHT_H */ diff --git a/src/ipcpd/normal/dir.c b/src/ipcpd/normal/dir.c index 2428e1b6..1c883974 100644 --- a/src/ipcpd/normal/dir.c +++ b/src/ipcpd/normal/dir.c @@ -84,3 +84,13 @@ uint64_t dir_query(const uint8_t * hash) { return dht_query(dht, hash); } + +int dir_wait_running(void) +{ + if (dht_wait_running(dht)) { + log_warn("Directory did not bootstrap."); + return -1; + } + + return 0; +} diff --git a/src/ipcpd/normal/dir.h b/src/ipcpd/normal/dir.h index 365341ad..eb7a8aea 100644 --- a/src/ipcpd/normal/dir.h +++ b/src/ipcpd/normal/dir.h @@ -35,4 +35,6 @@ int dir_unreg(const uint8_t * hash); uint64_t dir_query(const uint8_t * hash); +int dir_wait_running(void); + #endif /* OUROBOROS_IPCPD_NORMAL_DIR_H */ -- cgit v1.2.3