summaryrefslogtreecommitdiff
path: root/src/ipcpd
diff options
context:
space:
mode:
authordimitri staessens <dimitri.staessens@ugent.be>2017-08-09 18:55:37 +0200
committerdimitri staessens <dimitri.staessens@ugent.be>2017-08-09 20:48:27 +0200
commit24aa46946349529bf36d3569796a28917d3e756f (patch)
tree58ef8a40142323771eecbd8ce6c2eaea409bc138 /src/ipcpd
parentc1d7ff1e1bd44e1a38af8a1b498c68f3378fa342 (diff)
downloadouroboros-24aa46946349529bf36d3569796a28917d3e756f.tar.gz
ouroboros-24aa46946349529bf36d3569796a28917d3e756f.zip
build, lib, ipcpd, irmd: Add support for libgcrypt
This adds support for libgcrypt. If at least version 1.7.0 of libgcrypt is present, it may be used for secure random number generation and is used for hashing in the irmd/ipcp. The hash definitions are moved to the internal hash.h header, and defined independently of the hashes that are defined as part of the directory policy for the normal IPCP. The translation is moved from the IRMd to ipcpd/ipcp.h. The bootstrap call from the IRMd expects the IPCP to return the correct hash algorithm with a dif_info struct, which is in line with the behavior of the enroll call. This also improves how some platform checks in the build system are handled.
Diffstat (limited to 'src/ipcpd')
-rw-r--r--src/ipcpd/ipcp.c53
-rw-r--r--src/ipcpd/normal/dt_pci.c1
-rw-r--r--src/ipcpd/shim-eth-llc/CMakeLists.txt6
3 files changed, 46 insertions, 14 deletions
diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c
index 48ff046c..b2afdf99 100644
--- a/src/ipcpd/ipcp.c
+++ b/src/ipcpd/ipcp.c
@@ -23,6 +23,7 @@
#define OUROBOROS_PREFIX "ipcpd/ipcp"
#include <ouroboros/config.h>
+#include <ouroboros/hash.h>
#include <ouroboros/logs.h>
#include <ouroboros/time_utils.h>
#include <ouroboros/utils.h>
@@ -174,7 +175,7 @@ static void * mainloop(void * o)
strcpy(conf.dif_info.dif_name,
conf_msg->dif_info->dif_name);
if (conf.dif_info.dif_name == NULL) {
- ret_msg.has_result = true;
+ log_err("No DIF name provided.");
ret_msg.result = -1;
break;
}
@@ -186,21 +187,55 @@ static void * mainloop(void * o)
conf.dt_gam_type = conf_msg->dt_gam_type;
conf.rm_gam_type = conf_msg->rm_gam_type;
conf.routing_type = conf_msg->routing_type;
- conf.dif_info.dir_hash_algo =
- conf_msg->dif_info->dir_hash_algo;
+
+ switch(conf_msg->dif_info->dir_hash_algo) {
+ case DIR_HASH_SHA3_224:
+ conf.dif_info.dir_hash_algo
+ = HASH_SHA3_224;
+ break;
+ case DIR_HASH_SHA3_256:
+ conf.dif_info.dir_hash_algo
+ = HASH_SHA3_256;
+ break;
+ case DIR_HASH_SHA3_384:
+ conf.dif_info.dir_hash_algo
+ = HASH_SHA3_384;
+ break;
+ case DIR_HASH_SHA3_512:
+ conf.dif_info.dir_hash_algo
+ = HASH_SHA3_512;
+ break;
+ default:
+ assert(false);
+ }
+
+ dif_info.dir_hash_algo =
+ conf.dif_info.dir_hash_algo;
}
if (conf_msg->ipcp_type == IPCP_SHIM_UDP) {
- conf.ip_addr = conf_msg->ip_addr;
- conf.dns_addr = conf_msg->dns_addr;
+ conf.ip_addr = conf_msg->ip_addr;
+ conf.dns_addr = conf_msg->dns_addr;
+ dif_info.dir_hash_algo = HASH_MD5;
+ ipcpi.dir_hash_algo = HASH_MD5;
}
- if (conf_msg->ipcp_type == IPCP_SHIM_ETH_LLC)
- conf.if_name = conf_msg->if_name;
+ if (conf_msg->ipcp_type == IPCP_SHIM_ETH_LLC) {
+ conf.if_name = conf_msg->if_name;
+ dif_info.dir_hash_algo = HASH_SHA3_256;
+ ipcpi.dir_hash_algo = HASH_SHA3_256;
+ }
- ipcpi.dir_hash_algo = conf_msg->dif_info->dir_hash_algo;
+ if (conf_msg->ipcp_type == IPCP_LOCAL) {
+ dif_info.dir_hash_algo = HASH_SHA3_256;
+ ipcpi.dir_hash_algo = HASH_SHA3_256;
+ }
ret_msg.result = ipcpi.ops->ipcp_bootstrap(&conf);
+ if (ret_msg.result == 0) {
+ ret_msg.dif_info = &dif_info;
+ dif_info.dif_name = conf.dif_info.dif_name;
+ }
break;
case IPCP_MSG_CODE__IPCP_ENROLL:
ret_msg.has_result = true;
@@ -220,7 +255,7 @@ static void * mainloop(void * o)
ret_msg.result = ipcpi.ops->ipcp_enroll(msg->dst_name,
&info);
if (ret_msg.result == 0) {
- ret_msg.dif_info = &dif_info;
+ ret_msg.dif_info = &dif_info;
dif_info.dir_hash_algo = info.dir_hash_algo;
dif_info.dif_name = info.dif_name;
}
diff --git a/src/ipcpd/normal/dt_pci.c b/src/ipcpd/normal/dt_pci.c
index a4f99142..2a252545 100644
--- a/src/ipcpd/normal/dt_pci.c
+++ b/src/ipcpd/normal/dt_pci.c
@@ -22,7 +22,6 @@
#include <ouroboros/config.h>
#include <ouroboros/errno.h>
-#include <ouroboros/crc32.h>
#include <ouroboros/rib.h>
#include "dt_pci.h"
diff --git a/src/ipcpd/shim-eth-llc/CMakeLists.txt b/src/ipcpd/shim-eth-llc/CMakeLists.txt
index 08f50c04..12bfb42e 100644
--- a/src/ipcpd/shim-eth-llc/CMakeLists.txt
+++ b/src/ipcpd/shim-eth-llc/CMakeLists.txt
@@ -32,12 +32,10 @@ add_executable(ipcpd-shim-eth-llc ${SHIM_ETH_LLC_SOURCES} ${IPCP_SOURCES}
target_link_libraries(ipcpd-shim-eth-llc LINK_PUBLIC ouroboros
${PROTOBUF_C_LIBRARY})
-if (${NETMAP_C_INCLUDE_DIR} STREQUAL "NETMAP_C_INCLUDE_DIR-NOTFOUND")
- message(STATUS "Could not find netmap. Install for better performance.")
-else ()
+if (NOT ${NETMAP_C_INCLUDE_DIR} STREQUAL "NETMAP_C_INCLUDE_DIR-NOTFOUND")
message(STATUS "Found netmap headers in ${NETMAP_C_INCLUDE_DIR}")
include_directories(${NETMAP_C_INCLUDE_DIR})
- add_compile_flags(ipcpd-shim-eth-llc -DHAVE_NETMAP)
+ set(HAVE_NETMAP "1" CACHE STRING "Have netmap")
test_and_set_c_compiler_flag_global(-std=c99)
endif ()