summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2024-02-25 12:00:11 +0100
committerSander Vrijders <sander@ouroboros.rocks>2024-02-26 09:00:09 +0100
commitbb617311f4fc4ece5bf963d3f445e73e09a9cdaa (patch)
tree636e524150e4993544c41c5933bd077d19785ac1
parent7c523eb8167116176eb43d2f9380e0179a6275b0 (diff)
downloadouroboros-bb617311f4fc4ece5bf963d3f445e73e09a9cdaa.tar.gz
ouroboros-bb617311f4fc4ece5bf963d3f445e73e09a9cdaa.zip
lib: Rename CACEP to CEP and set conngmr timeout0.21.2
The Common Application Connection Establishment Protocol (CACEP) is a RINA construct associated with the Common Distributed Application Protocol (CDAP). We dropped CDAP as O7s sees connection establishment as common to all applications (though it can be a nop). The wiki already refers to this as (O7s) Connection Establishment Protocol (CEP). The connection manager will now timeout waiting for CEP messages to avoid hanging forever, configurable at build time via CONNMGR_RCV_TIMEOUT. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
-rw-r--r--CMakeLists.txt2
-rw-r--r--include/ouroboros/CMakeLists.txt2
-rw-r--r--include/ouroboros/cep.h (renamed from include/ouroboros/cacep.h)23
-rw-r--r--src/ipcpd/CMakeLists.txt2
-rw-r--r--src/ipcpd/common/comp.h2
-rw-r--r--src/ipcpd/common/connmgr.c69
-rw-r--r--src/ipcpd/common/connmgr.h2
-rw-r--r--src/ipcpd/config.h.in1
-rw-r--r--src/lib/CMakeLists.txt8
-rw-r--r--src/lib/cep.c (renamed from src/lib/cacep.c)52
-rw-r--r--src/lib/dev.c14
-rw-r--r--src/lib/pb/cep.proto (renamed from src/lib/pb/cacep.proto)4
12 files changed, 94 insertions, 87 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8bc79b05..397cfdad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,7 +9,7 @@ include(GNUInstallDirs)
set(PACKAGE_VERSION_MAJOR 0)
set(PACKAGE_VERSION_MINOR 21)
-set(PACKAGE_VERSION_PATCH 1)
+set(PACKAGE_VERSION_PATCH 2)
set(PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
set(PACKAGE_DESCRIPTION "The Ouroboros prototype")
diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt
index cac1b8d9..4e90bc59 100644
--- a/include/ouroboros/CMakeLists.txt
+++ b/include/ouroboros/CMakeLists.txt
@@ -8,7 +8,7 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/sockets.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/sockets.h" @ONLY)
set(HEADER_FILES
- cacep.h
+ cep.h
cdefs.h
dev.h
errno.h
diff --git a/include/ouroboros/cacep.h b/include/ouroboros/cep.h
index e33654a9..4c1737f0 100644
--- a/include/ouroboros/cacep.h
+++ b/include/ouroboros/cep.h
@@ -1,7 +1,7 @@
/*
* Ouroboros - Copyright (C) 2016 - 2024
*
- * The Common Application Connection Establishment Protocol
+ * The Ouroboros Connection Establishment Protocol
*
* Dimitri Staessens <dimitri@ouroboros.rocks>
* Sander Vrijders <sander@ouroboros.rocks>
@@ -20,20 +20,19 @@
* Foundation, Inc., http://www.fsf.org/about/contact/.
*/
-#ifndef OUROBOROS_CACEP_H
-#define OUROBOROS_CACEP_H
+#ifndef OUROBOROS_CEP_H
+#define OUROBOROS_CEP_H
#include <ouroboros/cdefs.h>
#include <ouroboros/proto.h>
#include <stdint.h>
-#include <sys/types.h>
-#define CACEP_BUF_STRLEN 64
+#define OCEP_BUF_STRLEN 128
struct conn_info {
- char comp_name[CACEP_BUF_STRLEN + 1];
- char protocol[CACEP_BUF_STRLEN + 1];
+ char comp_name[OCEP_BUF_STRLEN + 1];
+ char protocol[OCEP_BUF_STRLEN + 1];
uint32_t pref_version;
enum proto_concrete_syntax pref_syntax;
struct proto_field fixed_conc_syntax[PROTO_MAX_FIELDS];
@@ -43,12 +42,12 @@ struct conn_info {
__BEGIN_DECLS
-int cacep_snd(int fd,
- const struct conn_info * in);
+int cep_snd(int fd,
+ const struct conn_info * in);
-int cacep_rcv(int fd,
- struct conn_info * out);
+int cep_rcv(int fd,
+ struct conn_info * out);
__END_DECLS
-#endif /* OUROBOROS_CACEP_H */
+#endif /* OUROBOROS_CEP_H */
diff --git a/src/ipcpd/CMakeLists.txt b/src/ipcpd/CMakeLists.txt
index cd81949e..54294f11 100644
--- a/src/ipcpd/CMakeLists.txt
+++ b/src/ipcpd/CMakeLists.txt
@@ -1,3 +1,5 @@
+set(CONNMGR_RCV_TIMEOUT 1000 CACHE STRING
+ "Timeout for the connection manager to wait for OCEP info (ms).")
set(IPCP_DEBUG_LOCAL FALSE CACHE BOOL
"Use PID as address for local debugging")
set(IPCP_QOS_CUBE_BE_PRIO 50 CACHE STRING
diff --git a/src/ipcpd/common/comp.h b/src/ipcpd/common/comp.h
index 1130a163..f3790d9c 100644
--- a/src/ipcpd/common/comp.h
+++ b/src/ipcpd/common/comp.h
@@ -23,7 +23,7 @@
#ifndef OUROBOROS_IPCPD_COMMON_COMP_H
#define OUROBOROS_IPCPD_COMMON_COMP_H
-#include <ouroboros/cacep.h>
+#include <ouroboros/cep.h>
#define DST_MAX_STRLEN 64
diff --git a/src/ipcpd/common/connmgr.c b/src/ipcpd/common/connmgr.c
index 71b114aa..4b5fd420 100644
--- a/src/ipcpd/common/connmgr.c
+++ b/src/ipcpd/common/connmgr.c
@@ -22,9 +22,10 @@
#define OUROBOROS_PREFIX "connection-manager"
+#include <ouroboros/cep.h>
#include <ouroboros/dev.h>
-#include <ouroboros/cacep.h>
#include <ouroboros/errno.h>
+#include <ouroboros/fccntl.h>
#include <ouroboros/list.h>
#include <ouroboros/logs.h>
#include <ouroboros/notifier.h>
@@ -33,9 +34,9 @@
#include "connmgr.h"
#include "ipcp.h"
-#include <string.h>
-#include <stdlib.h>
#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
enum connmgr_state {
CONNMGR_NULL = 0,
@@ -128,10 +129,12 @@ static int add_comp_conn(enum comp_id id,
static void * flow_acceptor(void * o)
{
- int fd;
- qosspec_t qs;
- struct conn_info rcv_info;
- struct conn_info fail_info;
+ int fd;
+ qosspec_t qs;
+ struct conn_info rcv_info;
+ struct conn_info fail_info;
+ struct timespec timeo = TIMESPEC_INIT_MS(CONNMGR_RCV_TIMEOUT);
+ int err;
(void) o;
@@ -147,10 +150,13 @@ static void * flow_acceptor(void * o)
continue;
}
- log_info("Handling incoming flow %d",fd);
+ log_info("Handling incoming flow %d.",fd);
- if (cacep_rcv(fd, &rcv_info)) {
- log_err("Error receiving CACEP info.");
+ fccntl(fd, FLOWSRCVTIMEO, &timeo);
+
+ err = cep_rcv(fd, &rcv_info);
+ if (err < 0) {
+ log_err("Error receiving OCEP info: %d.", err);
flow_dealloc(fd);
continue;
}
@@ -161,24 +167,26 @@ static void * flow_acceptor(void * o)
if (id < 0) {
log_err("Connection request for unknown component %s.",
rcv_info.comp_name);
- cacep_snd(fd, &fail_info);
+ cep_snd(fd, &fail_info);
flow_dealloc(fd);
continue;
}
- if (cacep_snd(fd, &connmgr.comps[id].info)) {
- log_err("Failed to respond to CACEP request.");
+ err = cep_snd(fd, &connmgr.comps[id].info);
+ if (err < 0) {
+ log_err("Failed responding to OCEP request: %d.", err);
flow_dealloc(fd);
continue;
}
- if (add_comp_conn(id, fd, qs, &rcv_info)) {
- log_err("Failed to add new connection.");
+ err = add_comp_conn(id, fd, qs, &rcv_info);
+ if (err < 0) {
+ log_err("Failed to add new connection: %d.", err);
flow_dealloc(fd);
continue;
}
- log_info("Finished handling incoming flow %d for %s: 0.",
+ log_info("Finished handling incoming flow %d for %s.",
fd, rcv_info.comp_name);
}
@@ -422,8 +430,9 @@ int connmgr_alloc(enum comp_id id,
qosspec_t * qs,
struct conn * conn)
{
- struct comp * comp;
- int fd;
+ struct comp * comp;
+ int fd;
+ struct timespec timeo = TIMESPEC_INIT_MS(CONNMGR_RCV_TIMEOUT);
assert(id >= 0 && id < COMPID_MAX);
assert(dst);
@@ -443,34 +452,36 @@ int connmgr_alloc(enum comp_id id,
else
memset(&conn->flow_info.qs, 0, sizeof(conn->flow_info.qs));
- log_dbg("Sending cacep info for protocol %s to fd %d.",
+ log_dbg("Sending OCEP info for protocol %s to fd %d.",
comp->info.protocol, conn->flow_info.fd);
- if (cacep_snd(fd, &comp->info)) {
- log_err("Failed to send CACEP info.");
- goto fail_cacep;
+ fccntl(fd, FLOWSRCVTIMEO, &timeo);
+
+ if (cep_snd(fd, &comp->info)) {
+ log_err("Failed to send OCEP info.");
+ goto fail_cep;
}
- if (cacep_rcv(fd, &conn->conn_info)) {
- log_err("Failed to receive CACEP info.");
- goto fail_cacep;
+ if (cep_rcv(fd, &conn->conn_info)) {
+ log_err("Failed to receive OCEP info.");
+ goto fail_cep;
}
if (strcmp(comp->info.protocol, conn->conn_info.protocol)) {
log_err("Unknown protocol (requested %s, got %s).",
comp->info.protocol, conn->conn_info.protocol);
- goto fail_cacep;
+ goto fail_cep;
}
if (comp->info.pref_version != conn->conn_info.pref_version) {
log_err("Unknown protocol version %d.",
conn->conn_info.pref_version);
- goto fail_cacep;
+ goto fail_cep;
}
if (comp->info.pref_syntax != conn->conn_info.pref_syntax) {
log_err("Unknown protocol syntax.");
- goto fail_cacep;
+ goto fail_cep;
}
switch (id) {
@@ -489,7 +500,7 @@ int connmgr_alloc(enum comp_id id,
return 0;
- fail_cacep:
+ fail_cep:
flow_dealloc(conn->flow_info.fd);
fail_alloc:
return -1;
diff --git a/src/ipcpd/common/connmgr.h b/src/ipcpd/common/connmgr.h
index 21dc8ba3..0710dbbf 100644
--- a/src/ipcpd/common/connmgr.h
+++ b/src/ipcpd/common/connmgr.h
@@ -23,7 +23,7 @@
#ifndef OUROBOROS_IPCPD_COMMON_CONNMGR_H
#define OUROBOROS_IPCPD_COMMON_CONNMGR_H
-#include <ouroboros/cacep.h>
+#include <ouroboros/cep.h>
#include <ouroboros/qos.h>
#include "comp.h"
diff --git a/src/ipcpd/config.h.in b/src/ipcpd/config.h.in
index af0658d6..fe4f5fd2 100644
--- a/src/ipcpd/config.h.in
+++ b/src/ipcpd/config.h.in
@@ -51,6 +51,7 @@
#define PFT_SIZE @PFT_SIZE@
#define DHT_ENROLL_SLACK @DHT_ENROLL_SLACK@
#define IPCP_UNICAST_MPL @IPCP_UNICAST_MPL@
+#define CONNMGR_RCV_TIMEOUT @CONNMGR_RCV_TIMEOUT@
#cmakedefine IPCP_CONN_WAIT_DIR
#cmakedefine DISABLE_CORE_LOCK
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index 66f26125..a6d7ac98 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -10,8 +10,8 @@ protobuf_generate_c(IPCP_CONFIG_PROTO_SRCS IPCP_CONFIG_PROTO_HDRS
pb/ipcp_config.proto)
protobuf_generate_c(ENROLL_PROTO_SRCS ENROLL_PROTO_HDRS
pb/enroll.proto)
-protobuf_generate_c(CACEP_PROTO_SRCS CACEP_PROTO_HDRS
- pb/cacep.proto)
+protobuf_generate_c(CEP_PROTO_SRCS CEP_PROTO_HDRS
+ pb/cep.proto)
protobuf_generate_c(IRM_PROTO_SRCS IRM_PROTO_HDRS
pb/irm.proto)
protobuf_generate_c(IPCP_PROTO_SRCS IPCP_PROTO_HDRS
@@ -241,7 +241,7 @@ endif ()
set(SOURCE_FILES_DEV
# Add source files here
- cacep.c
+ cep.c
dev.c
)
@@ -282,7 +282,7 @@ add_library(ouroboros-common SHARED ${SOURCE_FILES_COMMON} ${IRM_PROTO_SRCS}
${IPCP_PROTO_SRCS} ${IPCP_CONFIG_PROTO_SRCS} ${MODEL_PROTO_SRCS}
${ENROLL_PROTO_SRCS})
-add_library(ouroboros-dev SHARED ${SOURCE_FILES_DEV} ${CACEP_PROTO_SRCS})
+add_library(ouroboros-dev SHARED ${SOURCE_FILES_DEV} ${CEP_PROTO_SRCS})
add_library(ouroboros-irm SHARED ${SOURCE_FILES_IRM})
diff --git a/src/lib/cacep.c b/src/lib/cep.c
index da1c2e2c..ba238023 100644
--- a/src/lib/cacep.c
+++ b/src/lib/cep.c
@@ -1,7 +1,7 @@
/*
* Ouroboros - Copyright (C) 2016 - 2024
*
- * The Common Application Connection Establishment Protocol
+ * The Ouroboros Connection Establishment Protocol
*
* Dimitri Staessens <dimitri@ouroboros.rocks>
* Sander Vrijders <sander@ouroboros.rocks>
@@ -22,35 +22,35 @@
#define _POSIX_C_SOURCE 199309L
-#include <ouroboros/cacep.h>
+#include <ouroboros/cep.h>
#include <ouroboros/dev.h>
#include <ouroboros/errno.h>
#include <stdlib.h>
#include <string.h>
-#include "cacep.pb-c.h"
-typedef CacepMsg cacep_msg_t;
+#include "cep.pb-c.h"
+typedef CepMsg cep_msg_t;
#define BUF_SIZE 128
static int read_msg(int fd,
struct conn_info * info)
{
- uint8_t buf[BUF_SIZE];
- cacep_msg_t * msg;
- ssize_t len;
+ uint8_t buf[BUF_SIZE];
+ cep_msg_t * msg;
+ ssize_t len;
len = flow_read(fd, buf, BUF_SIZE);
if (len < 0)
- return -1;
+ return (int) len;
- msg = cacep_msg__unpack(NULL, len, buf);
+ msg = cep_msg__unpack(NULL, len, buf);
if (msg == NULL)
return -1;
- if (strlen(msg->comp_name) > CACEP_BUF_STRLEN) {
- cacep_msg__free_unpacked(msg, NULL);
+ if (strlen(msg->comp_name) > OCEP_BUF_STRLEN) {
+ cep_msg__free_unpacked(msg, NULL);
return -1;
}
@@ -61,7 +61,7 @@ static int read_msg(int fd,
info->pref_syntax = msg->pref_syntax;
info->addr = msg->address;
- cacep_msg__free_unpacked(msg, NULL);
+ cep_msg__free_unpacked(msg, NULL);
return 0;
}
@@ -69,9 +69,9 @@ static int read_msg(int fd,
static int send_msg(int fd,
const struct conn_info * info)
{
- cacep_msg_t msg = CACEP_MSG__INIT;
- uint8_t * data = NULL;
- size_t len = 0;
+ cep_msg_t msg = CEP_MSG__INIT;
+ uint8_t * data = NULL;
+ size_t len = 0;
msg.comp_name = (char *) info->comp_name;
msg.protocol = (char *) info->protocol;
@@ -81,7 +81,7 @@ static int send_msg(int fd,
if (msg.pref_syntax < 0)
return -1;
- len = cacep_msg__get_packed_size(&msg);
+ len = cep_msg__get_packed_size(&msg);
if (len == 0)
return -1;
@@ -89,7 +89,7 @@ static int send_msg(int fd,
if (data == NULL)
return -ENOMEM;
- cacep_msg__pack(&msg, data);
+ cep_msg__pack(&msg, data);
if (flow_write(fd, data, len) < 0) {
free(data);
@@ -101,26 +101,20 @@ static int send_msg(int fd,
return 0;
}
-int cacep_snd(int fd,
- const struct conn_info * in)
+int cep_snd(int fd,
+ const struct conn_info * in)
{
if (in == NULL)
return -EINVAL;
- if (send_msg(fd, in))
- return -1;
-
- return 0;
+ return send_msg(fd, in);
}
-int cacep_rcv(int fd,
- struct conn_info * out)
+int cep_rcv(int fd,
+ struct conn_info * out)
{
if (out == NULL)
return -EINVAL;
- if (read_msg(fd, out))
- return -1;
-
- return 0;
+ return read_msg(fd, out);
}
diff --git a/src/lib/dev.c b/src/lib/dev.c
index a7f20e88..92310b9e 100644
--- a/src/lib/dev.c
+++ b/src/lib/dev.c
@@ -28,19 +28,19 @@
#include "config.h"
-#include <ouroboros/hash.h>
-#include <ouroboros/cacep.h>
+#include <ouroboros/bitmap.h>
+#include <ouroboros/cep.h>
#include <ouroboros/crypt.h>
-#include <ouroboros/errno.h>
#include <ouroboros/dev.h>
+#include <ouroboros/errno.h>
+#include <ouroboros/fccntl.h>
#include <ouroboros/flow.h>
+#include <ouroboros/fqueue.h>
+#include <ouroboros/hash.h>
#include <ouroboros/ipcp.h>
#include <ouroboros/ipcp-dev.h>
#include <ouroboros/list.h>
#include <ouroboros/local-dev.h>
-#include <ouroboros/sockets.h>
-#include <ouroboros/fccntl.h>
-#include <ouroboros/bitmap.h>
#include <ouroboros/np1_flow.h>
#include <ouroboros/pthread.h>
#include <ouroboros/random.h>
@@ -48,8 +48,8 @@
#include <ouroboros/shm_flow_set.h>
#include <ouroboros/shm_rdrbuff.h>
#include <ouroboros/shm_rbuff.h>
+#include <ouroboros/sockets.h>
#include <ouroboros/utils.h>
-#include <ouroboros/fqueue.h>
#ifdef PROC_FLOW_STATS
#include <ouroboros/rib.h>
#endif
diff --git a/src/lib/pb/cacep.proto b/src/lib/pb/cep.proto
index 166e261d..d31cf4f7 100644
--- a/src/lib/pb/cacep.proto
+++ b/src/lib/pb/cep.proto
@@ -1,7 +1,7 @@
/*
* Ouroboros - Copyright (C) 2016 - 2024
*
- * Message for Connection Information in CACEP
+ * Message for Connection Information in OCEP
*
* Dimitri Staessens <dimitri@ouroboros.rocks>
* Sander Vrijders <sander@ouroboros.rocks>
@@ -27,7 +27,7 @@ message fixed_conc_syntax_msg {
repeated uint32 lens = 2;
}
-message cacep_msg {
+message cep_msg {
required string comp_name = 1;
required string protocol = 2;
required int32 pref_version = 3;