diff options
author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2017-02-23 17:00:37 +0100 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2017-02-23 17:00:37 +0100 |
commit | 41704c2379eda1124c5fc94d5589be6951e5b7ee (patch) | |
tree | 8dcebedf435309473e24f34a2250d794795aae7c | |
parent | 9678e275ba0cdb80b5e9efb878fa996d75696a7d (diff) | |
parent | ce5ad7a0697853e7d23030c823c3381ca3f71fef (diff) | |
download | ouroboros-41704c2379eda1124c5fc94d5589be6951e5b7ee.tar.gz ouroboros-41704c2379eda1124c5fc94d5589be6951e5b7ee.zip |
Merge branch 'testing' into be
-rw-r--r-- | src/ipcpd/normal/main.c | 6 | ||||
-rw-r--r-- | src/irmd/main.c | 35 |
2 files changed, 34 insertions, 7 deletions
diff --git a/src/ipcpd/normal/main.c b/src/ipcpd/normal/main.c index 9ce2383d..522daa3b 100644 --- a/src/ipcpd/normal/main.c +++ b/src/ipcpd/normal/main.c @@ -342,10 +342,8 @@ static int normal_ipcp_bootstrap(struct dif_config * conf) (void) pol; - if (conf == NULL || conf->type != THIS_TYPE) { - log_err("Bad DIF configuration."); - return -EINVAL; - } + assert(conf); + assert(conf->type == THIS_TYPE); pthread_rwlock_wrlock(&ipcpi.state_lock); diff --git a/src/irmd/main.c b/src/irmd/main.c index e1071920..8e8d2db4 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -181,6 +181,19 @@ static struct ipcp_entry * get_ipcp_entry_by_api(pid_t api) return NULL; } +static struct ipcp_entry * get_ipcp_entry_by_name(const char * name) +{ + struct list_head * p = NULL; + + list_for_each(p, &irmd->ipcps) { + struct ipcp_entry * e = list_entry(p, struct ipcp_entry, next); + if (strcmp(name, e->name)) + return e; + } + + return NULL; +} + /* Check if the name exists anywhere in a DIF. */ static pid_t get_ipcp_by_dst_name(char * dst_name) { @@ -228,9 +241,10 @@ static pid_t get_ipcp_by_dst_name(char * dst_name) static pid_t create_ipcp(char * name, enum ipcp_type ipcp_type) { - struct pid_el * api = NULL; - struct ipcp_entry * tmp = NULL; - struct list_head * p = NULL; + struct pid_el * api = NULL; + struct ipcp_entry * tmp = NULL; + struct list_head * p = NULL; + struct ipcp_entry * entry = NULL; api = malloc(sizeof(*api)); if (api == NULL) @@ -245,6 +259,14 @@ static pid_t create_ipcp(char * name, pthread_rwlock_wrlock(&irmd->reg_lock); + entry = get_ipcp_entry_by_name(name); + if (entry != NULL) { + pthread_rwlock_unlock(&irmd->reg_lock); + pthread_rwlock_unlock(&irmd->state_lock); + log_err("IPCP by that name already exists."); + return -1; + } + api->pid = ipcp_create(name, ipcp_type); if (api->pid == -1) { pthread_rwlock_unlock(&irmd->reg_lock); @@ -397,6 +419,13 @@ static int bootstrap_ipcp(pid_t api, return -1; } + if (entry->type != (enum ipcp_type) conf->ipcp_type) { + pthread_rwlock_unlock(&irmd->reg_lock); + pthread_rwlock_unlock(&irmd->state_lock); + log_err("Configuration does not match IPCP type."); + return -1; + } + if (ipcp_bootstrap(entry->api, conf)) { pthread_rwlock_unlock(&irmd->reg_lock); pthread_rwlock_unlock(&irmd->state_lock); |