summaryrefslogtreecommitdiff
path: root/src/ipcpd/ipcp.c
diff options
context:
space:
mode:
authordimitri staessens <dimitri.staessens@ugent.be>2017-08-09 19:41:57 +0000
committerSander Vrijders <sander.vrijders@ugent.be>2017-08-09 19:41:57 +0000
commitafc4342532225fb86d11729ddb783095cb62686a (patch)
tree58ef8a40142323771eecbd8ce6c2eaea409bc138 /src/ipcpd/ipcp.c
parentc1d7ff1e1bd44e1a38af8a1b498c68f3378fa342 (diff)
parent24aa46946349529bf36d3569796a28917d3e756f (diff)
downloadouroboros-afc4342532225fb86d11729ddb783095cb62686a.tar.gz
ouroboros-afc4342532225fb86d11729ddb783095cb62686a.zip
Merged in dstaesse/ouroboros/be-libgcrypt (pull request #544)
build, lib, ipcpd, irmd: Add support for libgcrypt
Diffstat (limited to 'src/ipcpd/ipcp.c')
-rw-r--r--src/ipcpd/ipcp.c53
1 files changed, 44 insertions, 9 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;
}