summaryrefslogtreecommitdiff
path: root/src/ipcpd/normal
diff options
context:
space:
mode:
authorDimitri Staessens <[email protected]>2018-05-03 17:49:03 +0200
committerSander Vrijders <[email protected]>2018-05-03 17:56:11 +0200
commit919349fd119bff11e9d34da09a9d71bf5675dba2 (patch)
treeb078ee0d0c2e5123fd1649a172d6471c3b2f9212 /src/ipcpd/normal
parent8295c3628f70c1db342860ff1e79fc7056557739 (diff)
downloadouroboros-919349fd119bff11e9d34da09a9d71bf5675dba2.tar.gz
ouroboros-919349fd119bff11e9d34da09a9d71bf5675dba2.zip
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 <[email protected]> Signed-off-by: Sander Vrijders <[email protected]>
Diffstat (limited to 'src/ipcpd/normal')
-rw-r--r--src/ipcpd/normal/connmgr.c7
-rw-r--r--src/ipcpd/normal/dht.c2
-rw-r--r--src/ipcpd/normal/dht.h2
-rw-r--r--src/ipcpd/normal/dir.c10
-rw-r--r--src/ipcpd/normal/dir.h2
5 files changed, 21 insertions, 2 deletions
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 */