diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ipcpd/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/ipcpd/flow.c | 54 | ||||
| -rw-r--r-- | src/ipcpd/flow.h | 9 | ||||
| -rw-r--r-- | src/ipcpd/ipcp-ops.h | 2 | ||||
| -rw-r--r-- | src/ipcpd/ipcp.c | 2 | ||||
| -rw-r--r-- | src/ipcpd/local/main.c | 2 | ||||
| -rw-r--r-- | src/irmd/main.c | 16 | ||||
| -rw-r--r-- | src/lib/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/lib/dev.c | 66 | ||||
| -rw-r--r-- | src/lib/instance_name.c | 4 | ||||
| -rw-r--r-- | src/lib/ipcp.c | 13 | ||||
| -rw-r--r-- | src/lib/ipcpd_messages.proto | 2 | ||||
| -rw-r--r-- | src/lib/irm.c | 5 | ||||
| -rw-r--r-- | src/lib/nsm.c (renamed from src/lib/da.c) | 25 | 
14 files changed, 86 insertions, 117 deletions
| diff --git a/src/ipcpd/CMakeLists.txt b/src/ipcpd/CMakeLists.txt index 49bd49f2..bb482ed9 100644 --- a/src/ipcpd/CMakeLists.txt +++ b/src/ipcpd/CMakeLists.txt @@ -1,6 +1,5 @@  set(IPCP_SOURCES          # Add source files here -        ${CMAKE_CURRENT_SOURCE_DIR}/flow.c          ${CMAKE_CURRENT_SOURCE_DIR}/ipcp.c          ${CMAKE_CURRENT_SOURCE_DIR}/ipcp-data.c  ) diff --git a/src/ipcpd/flow.c b/src/ipcpd/flow.c deleted file mode 100644 index 4ca61341..00000000 --- a/src/ipcpd/flow.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - * - * Flows - * - *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <stdlib.h> -#include "flow.h" - -#define OUROBOROS_PREFIX "ipcpd/flow" - -#include <ouroboros/logs.h> -#include <ouroboros/flow.h> - -struct flow * flow_create(int port_id) -{ -        struct flow * flow = malloc(sizeof *flow); -        if (flow == NULL) { -                LOG_DBGF("Could not malloc flow."); -                return NULL; -        } - -        INIT_LIST_HEAD(&flow->list); - -        flow->port_id = port_id; -        flow->state   = FLOW_NULL; - -        pthread_mutex_init(&flow->lock, NULL); - -        return flow; -} - -void flow_destroy(struct flow * flow) -{ -        if (flow == NULL) -                return; -        free(flow); -} diff --git a/src/ipcpd/flow.h b/src/ipcpd/flow.h index 6f50698e..e27882e2 100644 --- a/src/ipcpd/flow.h +++ b/src/ipcpd/flow.h @@ -24,21 +24,14 @@  #define OUROBOROS_IPCP_FLOW_H  #include <ouroboros/list.h> -#include <ouroboros/flow.h> +#include <ouroboros/common.h>  #include <ouroboros/shm_ap_rbuff.h>  #include <pthread.h>  struct flow { -        struct list_head list; -          int                   port_id;          struct shm_ap_rbuff * rb;          enum flow_state       state; - -        pthread_mutex_t  lock;  }; -struct flow * flow_create(int port_id); -void          flow_destroy(struct flow * flow); -  #endif /* OUROBOROS_FLOW_H */ diff --git a/src/ipcpd/ipcp-ops.h b/src/ipcpd/ipcp-ops.h index ffbc9cd7..a1d9f23f 100644 --- a/src/ipcpd/ipcp-ops.h +++ b/src/ipcpd/ipcp-ops.h @@ -30,7 +30,7 @@  struct ipcp_ops {          int   (* ipcp_bootstrap)(struct dif_config * conf); -        int   (* ipcp_enroll)(char * member_name, +        int   (* ipcp_enroll)(char * dif_name,                                char * n_1_dif);          int   (* ipcp_reg)(char ** dif_names,                             size_t  len); diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c index 901abae6..b5108712 100644 --- a/src/ipcpd/ipcp.c +++ b/src/ipcpd/ipcp.c @@ -159,7 +159,7 @@ void * ipcp_main_loop(void * o)                          }                          ret_msg.has_result = true;                          ret_msg.result = -                                _ipcp->ops->ipcp_enroll(msg->member_name, +                                _ipcp->ops->ipcp_enroll(msg->dif_name,                                                          msg->n_1_dif);                          break; diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c index 1e033a21..06e2b0a4 100644 --- a/src/ipcpd/local/main.c +++ b/src/ipcpd/local/main.c @@ -31,7 +31,7 @@  #include <ouroboros/dif_config.h>  #include <ouroboros/sockets.h>  #include <ouroboros/bitmap.h> -#include <ouroboros/flow.h> +#include <ouroboros/common.h>  #include <ouroboros/dev.h>  #define OUROBOROS_PREFIX "ipcpd/local" diff --git a/src/irmd/main.c b/src/irmd/main.c index edbf2d69..bc57c4b2 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -27,7 +27,7 @@  #include <ouroboros/sockets.h>  #include <ouroboros/irm.h>  #include <ouroboros/ipcp.h> -#include <ouroboros/da.h> +#include <ouroboros/nsm.h>  #include <ouroboros/list.h>  #include <ouroboros/instance_name.h>  #include <ouroboros/utils.h> @@ -1049,7 +1049,6 @@ static int bootstrap_ipcp(instance_name_t *  api,  static int enroll_ipcp(instance_name_t  * api,                         char *             dif_name)  { -        char *  member = NULL;          char ** n_1_difs = NULL;          ssize_t n_1_difs_size = 0;          struct ipcp_entry * entry = NULL; @@ -1079,16 +1078,7 @@ static int enroll_ipcp(instance_name_t  * api,                  return -1;          } -        member = da_resolve_daf(dif_name); -        if (member == NULL) { -                free(entry->dif_name); -                entry->dif_name = NULL; -                pthread_rwlock_unlock(&instance->reg_lock); -                pthread_rwlock_unlock(&instance->state_lock); -                return -1; -        } - -        n_1_difs_size = da_resolve_dap(member, n_1_difs); +        n_1_difs_size = nsm_resolve(dif_name, n_1_difs);          if (n_1_difs_size < 1) {                  free(entry->dif_name);                  entry->dif_name = NULL; @@ -1098,7 +1088,7 @@ static int enroll_ipcp(instance_name_t  * api,                  return -1;          } -        if (ipcp_enroll(api->id, member, n_1_difs[0])) { +        if (ipcp_enroll(api->id, dif_name, n_1_difs[0])) {                  free(entry->dif_name);                  entry->dif_name = NULL;                  pthread_rwlock_unlock(&instance->reg_lock); diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index ed7f2fc6..2a75ef17 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -25,13 +25,13 @@ set(SOURCE_FILES    # Add source files here    bitmap.c    cdap.c -  da.c    dev.c    du_buff.c    instance_name.c    ipcp.c    irm.c    list.c +  nsm.c    shm_ap_rbuff.c    shm_du_map.c    sockets.c diff --git a/src/lib/dev.c b/src/lib/dev.c index 1725cca3..ad311f7f 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -23,6 +23,7 @@  #define OUROBOROS_PREFIX "libouroboros-dev"  #include <ouroboros/config.h> +#include <ouroboros/errno.h>  #include <ouroboros/logs.h>  #include <ouroboros/dev.h>  #include <ouroboros/sockets.h> @@ -62,13 +63,13 @@ int ap_init(char * ap_name)          _ap_instance = malloc(sizeof(struct ap_data));          if (_ap_instance == NULL) { -                return -1; +                return -ENOMEM;          }          _ap_instance->api = instance_name_create();          if (_ap_instance->api == NULL) {                  free(_ap_instance); -                return -1; +                return -ENOMEM;          }          if (instance_name_init_from(_ap_instance->api, @@ -76,14 +77,14 @@ int ap_init(char * ap_name)                                      getpid()) == NULL) {                  instance_name_destroy(_ap_instance->api);                  free(_ap_instance); -                return -1; +                return -ENOMEM;          }          _ap_instance->fds = bmp_create(AP_MAX_FLOWS, 0);          if (_ap_instance->fds == NULL) {                  instance_name_destroy(_ap_instance->api);                  free(_ap_instance); -                return -1; +                return -ENOMEM;          }          _ap_instance->dum = shm_du_map_open(); @@ -210,7 +211,7 @@ int flow_accept(char ** ae_name)                          pthread_rwlock_unlock(&_ap_instance->flows_lock);                          pthread_rwlock_unlock(&_ap_instance->data_lock);                          irm_msg__free_unpacked(recv_msg, NULL); -                        return -1; +                        return -ENOMEM;                  }          } @@ -232,7 +233,7 @@ int flow_alloc_resp(int fd,          irm_msg_t * recv_msg = NULL;          int ret = -1; -        if (fd < 0) +        if (fd < 0 || fd >= AP_MAX_FLOWS)                  return -EBADF;          msg.code         = IRM_MSG_CODE__IRM_FLOW_ALLOC_RESP; @@ -243,6 +244,12 @@ int flow_alloc_resp(int fd,          pthread_rwlock_rdlock(&_ap_instance->data_lock);          pthread_rwlock_rdlock(&_ap_instance->flows_lock); +        if (_ap_instance->flows[fd].port_id < 0) { +                pthread_rwlock_unlock(&_ap_instance->flows_lock); +                pthread_rwlock_unlock(&_ap_instance->data_lock); +                return -ENOTALLOC; +        } +          msg.port_id      = _ap_instance->flows[fd].port_id;          pthread_rwlock_unlock(&_ap_instance->flows_lock); @@ -343,7 +350,7 @@ int flow_alloc_res(int fd)          irm_msg_t * recv_msg = NULL;          int result = 0; -        if (fd < 0) +        if (fd < 0 || fd >= AP_MAX_FLOWS)                  return -EBADF;          msg.code         = IRM_MSG_CODE__IRM_FLOW_ALLOC_RES; @@ -352,6 +359,12 @@ int flow_alloc_res(int fd)          pthread_rwlock_rdlock(&_ap_instance->data_lock);          pthread_rwlock_rdlock(&_ap_instance->flows_lock); +        if (_ap_instance->flows[fd].port_id < 0) { +                pthread_rwlock_unlock(&_ap_instance->flows_lock); +                pthread_rwlock_unlock(&_ap_instance->data_lock); +                return -ENOTALLOC; +        } +          msg.port_id      = _ap_instance->flows[fd].port_id;          pthread_rwlock_unlock(&_ap_instance->flows_lock); @@ -386,6 +399,12 @@ int flow_dealloc(int fd)          pthread_rwlock_rdlock(&_ap_instance->data_lock);          pthread_rwlock_wrlock(&_ap_instance->flows_lock); +        if (_ap_instance->flows[fd].port_id < 0) { +                pthread_rwlock_unlock(&_ap_instance->flows_lock); +                pthread_rwlock_unlock(&_ap_instance->data_lock); +                return -ENOTALLOC; +        } +          msg.port_id      = _ap_instance->flows[fd].port_id;          _ap_instance->flows[fd].port_id = -1; @@ -421,12 +440,18 @@ int flow_cntl(int fd, int cmd, int oflags)  {          int old; -        if (fd < 0) +        if (fd < 0 || fd >= AP_MAX_FLOWS)                  return -EBADF;          pthread_rwlock_rdlock(&_ap_instance->data_lock);          pthread_rwlock_wrlock(&_ap_instance->flows_lock); +        if (_ap_instance->flows[fd].port_id < 0) { +                pthread_rwlock_unlock(&_ap_instance->flows_lock); +                pthread_rwlock_unlock(&_ap_instance->data_lock); +                return -ENOTALLOC; +        } +          old = _ap_instance->flows[fd].oflags;          switch (cmd) { @@ -454,12 +479,18 @@ ssize_t flow_write(int fd, void * buf, size_t count)          if (buf == NULL)                  return 0; -        if (fd < 0) +        if (fd < 0 || fd >= AP_MAX_FLOWS)                  return -EBADF;          pthread_rwlock_rdlock(&_ap_instance->data_lock);          pthread_rwlock_rdlock(&_ap_instance->flows_lock); +        if (_ap_instance->flows[fd].port_id < 0) { +                pthread_rwlock_unlock(&_ap_instance->flows_lock); +                pthread_rwlock_unlock(&_ap_instance->data_lock); +                return -ENOTALLOC; +        } +          if (_ap_instance->flows[fd].oflags & FLOW_O_NONBLOCK) {                  index = shm_create_du_buff(_ap_instance->dum,                                             count + DU_BUFF_HEADSPACE + @@ -470,7 +501,7 @@ ssize_t flow_write(int fd, void * buf, size_t count)                  if (index == -1) {                          pthread_rwlock_unlock(&_ap_instance->flows_lock);                          pthread_rwlock_unlock(&_ap_instance->data_lock); -                        return -1; +                        return -EAGAIN;                  }                  e.index   = index; @@ -480,7 +511,7 @@ ssize_t flow_write(int fd, void * buf, size_t count)                          shm_release_du_buff(_ap_instance->dum, index);                          pthread_rwlock_unlock(&_ap_instance->flows_lock);                          pthread_rwlock_unlock(&_ap_instance->data_lock); -                        return -EPIPE; +                        return -1;                  }          } else { /* blocking */                  while ((index = shm_create_du_buff(_ap_instance->dum, @@ -510,7 +541,7 @@ ssize_t flow_read(int fd, void * buf, size_t count)          int n;          uint8_t * sdu; -        if (fd < 0) +        if (fd < 0 || fd >= AP_MAX_FLOWS)                  return -EBADF;          pthread_rwlock_rdlock(&_ap_instance->data_lock); @@ -519,16 +550,17 @@ ssize_t flow_read(int fd, void * buf, size_t count)          if (_ap_instance->flows[fd].port_id < 0) {                  pthread_rwlock_unlock(&_ap_instance->flows_lock);                  pthread_rwlock_unlock(&_ap_instance->data_lock); -                return -1; +                return -ENOTALLOC;          }          if (_ap_instance->flows[fd].oflags & FLOW_O_NONBLOCK) {                  idx = shm_ap_rbuff_read_port(_ap_instance->rb,                                             _ap_instance->flows[fd].port_id);          } else { /* block */ -                while ((idx = shm_ap_rbuff_read_port( -                                _ap_instance->rb, -                                _ap_instance->flows[fd].port_id)) < 0) +                while ((idx = +                        shm_ap_rbuff_read_port(_ap_instance->rb, +                                               _ap_instance-> +                                               flows[fd].port_id)) < 0)                          ;          } @@ -536,7 +568,7 @@ ssize_t flow_read(int fd, void * buf, size_t count)          if (idx < 0) {                  pthread_rwlock_unlock(&_ap_instance->data_lock); -                return -1; +                return -EAGAIN;          }          n = shm_du_map_read_sdu(&sdu, diff --git a/src/lib/instance_name.c b/src/lib/instance_name.c index 10a432d5..844bb924 100644 --- a/src/lib/instance_name.c +++ b/src/lib/instance_name.c @@ -106,11 +106,11 @@ int instance_name_cpy(instance_name_t *       dst,          instance_name_t * res;          if (src == NULL || dst == NULL) -                return -1; +                return -EINVAL;          res = instance_name_init_from(dst, src->name, src->id);          if (res == NULL) -                return -1; +                return -ENOMEM;          return 0;  } diff --git a/src/lib/ipcp.c b/src/lib/ipcp.c index a43afd21..730880f9 100644 --- a/src/lib/ipcp.c +++ b/src/lib/ipcp.c @@ -275,35 +275,32 @@ int ipcp_bootstrap(pid_t pid,  }  int ipcp_enroll(pid_t pid, -                char * member_name, +                char * dif_name,                  char * n_1_dif)  {          ipcp_msg_t msg = IPCP_MSG__INIT;          ipcp_msg_t * recv_msg = NULL;          int ret = -1; -        if (n_1_dif == NULL || member_name == NULL) +        if (n_1_dif == NULL || dif_name == NULL)                  return -EINVAL; -        msg.code        = IPCP_MSG_CODE__IPCP_ENROLL; -        msg.member_name = member_name; -        msg.n_1_dif     = n_1_dif; +        msg.code     = IPCP_MSG_CODE__IPCP_ENROLL; +        msg.dif_name = dif_name; +        msg.n_1_dif  = n_1_dif;          recv_msg = send_recv_ipcp_msg(pid, &msg);          if (recv_msg == NULL) { -                free(msg.member_name);                  return -1;          }          if (recv_msg->has_result == false) {                  ipcp_msg__free_unpacked(recv_msg, NULL); -                free(msg.member_name);                  return -1;          }          ret = recv_msg->result;          ipcp_msg__free_unpacked(recv_msg, NULL); -        free(msg.member_name);          return ret;  } diff --git a/src/lib/ipcpd_messages.proto b/src/lib/ipcpd_messages.proto index 63e41986..9eb5707c 100644 --- a/src/lib/ipcpd_messages.proto +++ b/src/lib/ipcpd_messages.proto @@ -15,7 +15,7 @@ enum ipcp_msg_code {  message ipcp_msg {          required ipcp_msg_code code  =  1; -        optional string member_name  =  2; +        optional string dif_name     =  2;          optional string n_1_dif      =  3;          repeated string dif_names    =  4;          optional int32  len          =  5; diff --git a/src/lib/irm.c b/src/lib/irm.c index ff5c3237..8fd0a7e7 100644 --- a/src/lib/irm.c +++ b/src/lib/irm.c @@ -22,6 +22,7 @@  #define OUROBOROS_PREFIX "libouroboros-irm" +#include <ouroboros/errno.h>  #include <ouroboros/irm.h>  #include <ouroboros/common.h>  #include <ouroboros/logs.h> @@ -143,7 +144,7 @@ int irm_bootstrap_ipcp(instance_name_t   * api,                  config.if_name = conf->if_name;                  break;          default: -                return -1; +                return -EIPCPTYPE;          }          recv_msg = send_recv_irm_msg(&msg); @@ -180,7 +181,7 @@ int irm_enroll_ipcp(instance_name_t * api,          msg.dif_name = malloc(sizeof(*(msg.dif_name)));          if (msg.dif_name == NULL) {                  LOG_ERR("Failed to malloc"); -                return -1; +                return -ENOMEM;          }          msg.dif_name[0] = dif_name; diff --git a/src/lib/da.c b/src/lib/nsm.c index 8e7756d1..069db139 100644 --- a/src/lib/da.c +++ b/src/lib/nsm.c @@ -1,7 +1,7 @@  /*   * Ouroboros - Copyright (C) 2016   * - * The API to instruct the DIF Allocator + * The API to instruct the global Namespace Manager   *   *    Sander Vrijders <sander.vrijders@intec.ugent.be>   * @@ -20,15 +20,26 @@   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.   */ -#include <ouroboros/da.h> +#include <ouroboros/nsm.h> -char * da_resolve_daf(char * daf_name) +int nsm_reg(char * name, +            char ** dafs, +            size_t dafs_size)  { -        return NULL; + +        return -1; +} + +int nsm_unreg(char * name, +              char ** dafs, +              size_t dafs_size) +{ + +        return -1;  } -ssize_t da_resolve_dap(char * name, -                       char ** n_1_difs) +ssize_t nsm_resolve(char * name, +                    char ** dafs)  { -        return 0; +        return -1;  } | 
