diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/ouroboros/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | include/ouroboros/config.h.in | 9 | ||||
| -rw-r--r-- | include/ouroboros/da.h | 2 | ||||
| -rw-r--r-- | include/ouroboros/flow.h | 61 | ||||
| -rw-r--r-- | include/ouroboros/instance_name.h (renamed from include/ouroboros/rina_name.h) | 51 | ||||
| -rw-r--r-- | include/ouroboros/ipcp.h | 75 | ||||
| -rw-r--r-- | include/ouroboros/irm.h | 31 | ||||
| -rw-r--r-- | include/ouroboros/shm_du_map.h | 4 | ||||
| -rw-r--r-- | include/ouroboros/sockets.h | 82 | 
9 files changed, 174 insertions, 146 deletions
| diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index a196140b..0b52a2bc 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -9,15 +9,16 @@ set(HEADER_FILES          da.h          dev.h          du_buff.h +        flow.h +        instance_name.h          ipcp.h          irm.h          list.h          logs.h -        rina_name.h          shm_du_map.h          sockets.h          utils.h  )  install(FILES ${HEADER_FILES} "${CMAKE_CURRENT_BINARY_DIR}/config.h" -  DESTINATION include/ouroboros) +        DESTINATION include/ouroboros) diff --git a/include/ouroboros/config.h.in b/include/ouroboros/config.h.in index 0f5c2131..01d7888e 100644 --- a/include/ouroboros/config.h.in +++ b/include/ouroboros/config.h.in @@ -23,9 +23,10 @@  #ifndef OUROBOROS_CONFIG  #define OUROBOROS_CONFIG -#define PROJECT_NAME     "@CMAKE_PROJECT_NAME@" -#define PROJECT_VERSION  "@PACKAGE_VERSION@" -#define INSTALL_DIR      "@CMAKE_INSTALL_PREFIX@" -#define BUILD_TYPE       "@CMAKE_BUILD_TYPE@" +#define PROJECT_NAME    "@CMAKE_PROJECT_NAME@" +#define PROJECT_VERSION "@PACKAGE_VERSION@" +#define INSTALL_DIR     "@CMAKE_INSTALL_PREFIX@" +#define BUILD_TYPE      "@CMAKE_BUILD_TYPE@" +#define _POSIX_C_SOURCE 199506L  #endif diff --git a/include/ouroboros/da.h b/include/ouroboros/da.h index f678007d..9ecd4bd8 100644 --- a/include/ouroboros/da.h +++ b/include/ouroboros/da.h @@ -24,7 +24,7 @@  #define OUROBOROS_DA_H  #include "common.h" -#include "rina_name.h" +#include "instance_name.h"  char *  da_resolve_daf(char * daf_name);  /* diff --git a/include/ouroboros/flow.h b/include/ouroboros/flow.h new file mode 100644 index 00000000..7d8c311e --- /dev/null +++ b/include/ouroboros/flow.h @@ -0,0 +1,61 @@ +/* + * 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. + */ + +#ifndef OUROBOROS_FLOW_H +#define OUROBOROS_FLOW_H + +#include <ouroboros/common.h> + +#include <pthread.h> + +/* same values as fcntl.h */ +#define FLOW_O_RDONLY   00000000 +#define FLOW_O_WRONLY   00000001 +#define FLOW_O_RDWR     00000002 +#define FLOW_O_ACCMODE  00000003 + +#define FLOW_O_NONBLOCK 00004000 +#define FLOW_O_DEFAULT  00000002 + +#define FLOW_O_INVALID  (FLOW_O_WRONLY | FLOW_O_RDWR) + +enum flow_state { +        FLOW_INIT = 0, +        FLOW_ALLOCATED, +        FLOW_PENDING +}; + +typedef struct flow { +        int32_t         port_id; +        uint16_t        oflags; +        enum flow_state state; + +        pthread_mutex_t lock; +} flow_t; + +flow_t * flow_create(int32_t   port_id); +void     flow_destroy(flow_t * flow); + +int      flow_set_opts(flow_t * flow, uint16_t opts); +uint16_t flow_get_opts(const flow_t * flow); + +#endif /* OUROBOROS_FLOW_H */ diff --git a/include/ouroboros/rina_name.h b/include/ouroboros/instance_name.h index f8af00c2..351b222f 100644 --- a/include/ouroboros/rina_name.h +++ b/include/ouroboros/instance_name.h @@ -19,21 +19,21 @@   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.   */ -#ifndef RINA_NAME_H -#define RINA_NAME_H +#ifndef INSTANCE_NAME_H +#define INSTANCE_NAME_H  #include "common.h"  typedef struct { -        char *       ap_name; -        unsigned int api_id; -} rina_name_t; +        char *   name; +        uint16_t id; +} instance_name_t;  /*   * Allocates a new name, returning the allocated object.   * In case of an error, a NULL is returned.   */ -rina_name_t * name_create(); +instance_name_t * instance_name_create();  /*   * Initializes a previously dynamically allocated name (i.e. name_create()) @@ -46,49 +46,44 @@ rina_name_t * name_create();   *   * It is allowed to call name_init() over an already initialized object   */ -rina_name_t * name_init_from(rina_name_t * dst, -                             const char *  ap_name, -                             unsigned int  api_id); +instance_name_t * instance_name_init_from(instance_name_t * dst, +                                          const char *      name, +                                          uint16_t          api_id);  /* Takes ownership of the passed parameters */ -rina_name_t * name_init_with(rina_name_t * dst, -                             char *        ap_name, -                             unsigned int  api_id); +instance_name_t * instance_name_init_with(instance_name_t * dst, +                                          char *            name, +                                          uint16_t          id);  /*   * Finalize a name object, releasing all the embedded resources (without   * releasing the object itself). After name_fini() execution the passed   * object will be in the same states as at the end of name_init().   */ -void          name_fini(rina_name_t * dst); +void          instance_name_fini(instance_name_t * dst);  /* Releases all the associated resources bound to a name object */ -void          name_destroy(rina_name_t * ptr); +void          instance_name_destroy(instance_name_t * ptr);  /* Duplicates a name object, returning the pointer to the new object */ -rina_name_t * name_dup(const rina_name_t * src); +instance_name_t * instance_name_dup(const instance_name_t * src);  /*   * Copies the source object contents into the destination object, both must   * be previously allocated   */ -int           name_cpy(const rina_name_t * src, rina_name_t * dst); +int           instance_name_cpy(instance_name_t * dst, +                                const instance_name_t * src); -bool          name_is_equal(const rina_name_t * a, const rina_name_t * b); -bool          name_is_ok(const rina_name_t * n); +int           instance_name_cmp(const instance_name_t * a, +                                const instance_name_t * b); -#define NAME_CMP_APN 0x01 -#define NAME_CMP_API 0x02 -#define NAME_CMP_ALL (NAME_CMP_APN | NAME_CMP_API) - -bool          name_cmp(uint8_t             flags, -                       const rina_name_t * a, -                       const rina_name_t * b); +bool          instance_name_is_valid(const instance_name_t * n);  /* Returns a name as a (newly allocated) string */ -char *        name_to_string(const rina_name_t * n); +char *        instance_name_to_string(const instance_name_t * n);  /* Inverse of name_tostring() */ -rina_name_t * string_to_name(const char * s); +instance_name_t * string_to_instance_name(const char * s); -#endif +#endif /* INSTANCE_NAME_H */ diff --git a/include/ouroboros/ipcp.h b/include/ouroboros/ipcp.h index b8775fc0..fdaf5c4a 100644 --- a/include/ouroboros/ipcp.h +++ b/include/ouroboros/ipcp.h @@ -23,31 +23,66 @@  #ifndef OUROBOROS_IPCP_H  #define OUROBOROS_IPCP_H -#include <sys/types.h> +#include <ouroboros/common.h> +#include <ouroboros/instance_name.h> -#include "common.h" -#include "rina_name.h" +#include <sys/types.h>  struct ipcp;  /* Returns the process id */ -pid_t ipcp_create(rina_name_t name, -                  char * ipcp_type); -int ipcp_destroy(pid_t pid); - -int ipcp_reg(pid_t pid, -             char ** difs, -             size_t difs_size); -int ipcp_unreg(pid_t pid, +pid_t ipcp_create(instance_name_t * api, +                  char *            ipcp_type); +int   ipcp_destroy(pid_t pid); + +int   ipcp_reg(pid_t   pid,                 char ** difs, -               size_t difs_size); +               size_t  difs_size); +int   ipcp_unreg(pid_t   pid, +                 char ** difs, +                 size_t  difs_size); + +int   ipcp_bootstrap(pid_t               pid, +                     struct dif_config * conf); +int   ipcp_enroll(pid_t  pid, +                  char * member_name, +                  char * n_1_dif); + +/* Flow related ops, these go from IRMd to IPCP */ + +int   ipcp_ap_reg(pid_t    pid, +                  uint32_t reg_api_id, +                  char *   ap_name); +int   ipcp_ap_unreg(pid_t    pid, +                    uint32_t reg_api_id); + +int   ipcp_flow_alloc(pid_t             pid, +                      uint32_t          port_id, +                      char *            dst_ap_name, +                      char *            src_ap_name, +                      char *            src_ae_name, +                      struct qos_spec * qos); +int   ipcp_flow_alloc_resp(pid_t    pid, +                           uint32_t port_id, +                           int      result); + +/* These operations go from the IPCP to the IRMd */ + +/* Returns the port_id */ +int   ipcp_flow_req_arr(pid_t    pid, +                        uint32_t reg_api_id, +                        char *   ap_name, +                        char *   ae_name); +int   ipcp_flow_alloc_reply(pid_t    pid, +                            uint32_t port_id, +                            int      result); + +/* + * This operation can go both ways + * pid == 0 means the IRMd is the destination + */ +int   ipcp_flow_dealloc(pid_t    pid, +                        uint32_t port_id); -int ipcp_bootstrap(pid_t pid, -                   struct dif_config conf); -int ipcp_enroll(pid_t pid, -                char * dif_name, -                char * member_name, -                char ** n_1_difs, -                ssize_t n_1_difs_size); -#endif +#endif /* OUROBOROS_IPCP_H */ diff --git a/include/ouroboros/irm.h b/include/ouroboros/irm.h index a6f0d9f3..780bf77b 100644 --- a/include/ouroboros/irm.h +++ b/include/ouroboros/irm.h @@ -24,22 +24,21 @@  #define OUROBOROS_IRM_H  #include "common.h" -#include "rina_name.h" +#include "instance_name.h" -int     irm_create_ipcp(rina_name_t name, -                        char * ipcp_type); -int     irm_destroy_ipcp(rina_name_t name); +int irm_create_ipcp(instance_name_t * api, +                    char *            ipcp_type); +int irm_destroy_ipcp(instance_name_t * api); -int     irm_bootstrap_ipcp(rina_name_t name, -                           struct dif_config conf); -int     irm_enroll_ipcp(rina_name_t name, -                        char * dif_name); +int irm_bootstrap_ipcp(instance_name_t *   api, +                       struct dif_config * conf); +int irm_enroll_ipcp(instance_name_t * api, +                    char *            dif_name); -int     irm_reg_ipcp(rina_name_t name, -                     char ** difs, -                     size_t difs_size); -int     irm_unreg_ipcp(rina_name_t name, -                       char ** difs, -                       size_t difs_size); - -#endif +int irm_reg_ipcp(instance_name_t * api, +                 char **           difs, +                 size_t            difs_size); +int irm_unreg_ipcp(const instance_name_t * api, +                   char **                 difs, +                   size_t                  difs_size); +#endif /* OUROBOROS_IRM_H */ diff --git a/include/ouroboros/shm_du_map.h b/include/ouroboros/shm_du_map.h index 68492a91..fb51768d 100644 --- a/include/ouroboros/shm_du_map.h +++ b/include/ouroboros/shm_du_map.h @@ -24,10 +24,6 @@  #ifndef OUROBOROS_SHM_DU_MAP_H  #define OUROBOROS_SHM_DU_MAP_H -#ifndef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 199506L -#endif -  #ifndef SHM_DU_BUFF_BLOCK_SIZE  #define SHM_DU_BUFF_BLOCK_SIZE sysconf(_SC_PAGESIZE)  #endif diff --git a/include/ouroboros/sockets.h b/include/ouroboros/sockets.h index 45d7a27d..0c517bd4 100644 --- a/include/ouroboros/sockets.h +++ b/include/ouroboros/sockets.h @@ -24,87 +24,27 @@  #define OUROBOROS_SOCKETS_H  #include <ouroboros/common.h> -#include <ouroboros/rina_name.h>  #include <sys/types.h> +#include "irmd_messages.pb-c.h" +typedef IrmMsg irm_msg_t; + +#include "ipcpd_messages.pb-c.h" +typedef IpcpMsg ipcp_msg_t; +  #define IRM_SOCK_PATH "/tmp/irm_sock"  #define IRM_MSG_BUF_SIZE 256  #define IPCP_SOCK_PATH_PREFIX "/tmp/ipcp_sock" -#define IPCP_MSG_BUFS_SIZE IRM_MSG_BUF_SIZE - -enum irm_msg_code { -        IRM_CREATE_IPCP, -        IRM_DESTROY_IPCP, -        IRM_BOOTSTRAP_IPCP, -        IRM_ENROLL_IPCP, -        IRM_REG_IPCP, -        IRM_UNREG_IPCP, -        IRM_AP_REG, -        IRM_AP_REG_R, -        IRM_AP_UNREG, -        IRM_FLOW_ACCEPT, -        IRM_FLOW_ACCEPT_R, -        IRM_FLOW_ALLOC_RESP, -        IRM_FLOW_ALLOC, -        IRM_FLOW_ALLOC_R, -        IRM_FLOW_ALLOC_RES, -        IRM_FLOW_ALLOC_RES_R, -        IRM_FLOW_DEALLOC, -        IRM_FLOW_CONTROL, -        IRM_FLOW_WRITE, -        IRM_FLOW_READ -}; - -struct irm_msg { -        enum irm_msg_code   code; -        rina_name_t *       name; -        char *              ipcp_type; -        struct dif_config * conf; -        char *              dif_name; -        char **             difs; -        size_t              difs_size; -        char *              ap_name; -        char *              ae_name; -        int                 fd; -        int                 result; -        struct qos_spec *   qos; -        int                 oflags; -        char *              dst_ap_name; -        ssize_t             count; -}; - -enum ipcp_msg_code { -        IPCP_BOOTSTRAP, -        IPCP_ENROLL, -        IPCP_REG, -        IPCP_UNREG -}; - -struct ipcp_msg { -        enum ipcp_msg_code  code; -        struct dif_config * conf; -        char *              dif_name; -        char *              ap_name; -        char **             difs; -        size_t              difs_size; -}; +#define IPCP_MSG_BUF_SIZE IRM_MSG_BUF_SIZE  /* Returns the full socket path of an IPCP */ -char *            ipcp_sock_path(pid_t pid); - -int               server_socket_open(char * file_name); -int               client_socket_open(char * file_name); +char *      ipcp_sock_path(pid_t pid); -int               send_irmd_msg(struct irm_msg * msg); -struct irm_msg *  send_recv_irmd_msg(struct irm_msg * msg); +int         server_socket_open(char * file_name); +int         client_socket_open(char * file_name); -/* Caller has to free the buffer */ -buffer_t *        serialize_irm_msg(struct irm_msg * msg); -buffer_t *        serialize_ipcp_msg(struct ipcp_msg * msg); -/* Caller has to free all the allocated fields in the message */ -struct irm_msg *  deserialize_irm_msg(buffer_t * data); -struct ipcp_msg * deserialize_ipcp_msg(buffer_t * data); +irm_msg_t * send_recv_irm_msg(irm_msg_t * msg);  #endif | 
