From f97dee45d3c1b0088aa8010a1c9d59593c3d0df0 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Fri, 23 Dec 2016 18:13:40 +0100 Subject: ipcpd, lib: Refactor normal ipcp and cdap Refactors the normal IPCP fmgr and ribmgr, and modifies the API for cdap so that no callbacks are needed. --- include/ouroboros/cdap.h | 46 +++++++++++++++++++++---------------------- include/ouroboros/config.h.in | 1 + include/ouroboros/ipcp-dev.h | 4 ++-- include/ouroboros/shared.h | 6 +++--- 4 files changed, 28 insertions(+), 29 deletions(-) (limited to 'include') diff --git a/include/ouroboros/cdap.h b/include/ouroboros/cdap.h index 7312fb6f..89d598f9 100644 --- a/include/ouroboros/cdap.h +++ b/include/ouroboros/cdap.h @@ -30,6 +30,8 @@ #define F_SYNC 0x0001 +#define INVALID_CDAP_KEY -1 + enum cdap_opcode { CDAP_READ = 0, CDAP_WRITE, @@ -41,40 +43,36 @@ enum cdap_opcode { struct cdap; -/* Callback functions that work on the application's RIB */ -struct cdap_ops { - int (* cdap_request)(struct cdap * instance, - int invoke_id, - enum cdap_opcode opcode, - char * name, - uint8_t * data, - size_t len, - uint32_t flags); - - int (* cdap_reply)(struct cdap * instance, - int invoke_id, - int result, - uint8_t * data, - size_t len); -}; +typedef int32_t cdap_key_t; /* Assumes flow is blocking */ -struct cdap * cdap_create(struct cdap_ops * ops, - int fd); +struct cdap * cdap_create(int fd); + int cdap_destroy(struct cdap * instance); -/* Returns a positive invoke-id on success to be used in the callback */ -int cdap_send_request(struct cdap * instance, +cdap_key_t cdap_request_send(struct cdap * instance, enum cdap_opcode code, char * name, uint8_t * data, size_t len, uint32_t flags); -/* Can only be called following a callback function */ -int cdap_send_reply(struct cdap * instance, - int invoke_id, +int cdap_reply_wait(struct cdap * instance, + cdap_key_t key, + uint8_t ** data, + size_t * len); + +cdap_key_t cdap_request_wait(struct cdap * instance, + enum cdap_opcode * opcode, + char ** name, + uint8_t ** data, + size_t * len, + uint32_t * flags); + +int cdap_reply_send(struct cdap * instance, + cdap_key_t key, int result, uint8_t * data, size_t len); -#endif + +#endif /* OUROBOROS_CDAP_H */ diff --git a/include/ouroboros/config.h.in b/include/ouroboros/config.h.in index 2417a5c0..4208c6d2 100644 --- a/include/ouroboros/config.h.in +++ b/include/ouroboros/config.h.in @@ -49,6 +49,7 @@ #define IRMD_MAX_FLOWS 4096 #define IRMD_THREADPOOL_SIZE 5 #define IPCPD_THREADPOOL_SIZE 3 +#define IPCPD_MAX_CONNS IRMD_MAX_FLOWS #define LOG_DIR "/@LOG_DIR@/" #define PTHREAD_COND_CLOCK CLOCK_MONOTONIC #define PFT_SIZE 1 << 12 diff --git a/include/ouroboros/ipcp-dev.h b/include/ouroboros/ipcp-dev.h index 19a66762..fd1e7478 100644 --- a/include/ouroboros/ipcp-dev.h +++ b/include/ouroboros/ipcp-dev.h @@ -45,7 +45,7 @@ void ipcp_flow_fini(int fd); void ipcp_flow_del(struct shm_du_buff * sdb); -int ipcp_flow_get_qoscube(int fd, - enum qos_cube * cube); +int ipcp_flow_get_qoscube(int fd, + qoscube_t * cube); #endif /* OUROBOROS_IPCP_DEV_H */ diff --git a/include/ouroboros/shared.h b/include/ouroboros/shared.h index c38b1bde..7b281cc2 100644 --- a/include/ouroboros/shared.h +++ b/include/ouroboros/shared.h @@ -24,10 +24,10 @@ #define OUROBOROS_SHARED_H /* FIXME: To be decided which QoS cubes we support */ -enum qos_cube { +typedef enum qos_cube { QOS_CUBE_BE = 0, QOS_CUBE_VIDEO, - QOS_MAX -}; + QOS_CUBE_MAX +} qoscube_t; #endif /* OUROBOROS_SHARED_H */ -- cgit v1.2.3