summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2016-12-23 18:13:40 +0100
committerdimitri staessens <[email protected]>2016-12-24 12:19:10 +0100
commitf97dee45d3c1b0088aa8010a1c9d59593c3d0df0 (patch)
treef7d3be68e5cbbab230cd114e9dcf3e167f7454e5 /include
parentcbaa4a95cc6c74c7a2cfe8a5acaf7b4867fc343a (diff)
downloadouroboros-f97dee45d3c1b0088aa8010a1c9d59593c3d0df0.tar.gz
ouroboros-f97dee45d3c1b0088aa8010a1c9d59593c3d0df0.zip
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.
Diffstat (limited to 'include')
-rw-r--r--include/ouroboros/cdap.h46
-rw-r--r--include/ouroboros/config.h.in1
-rw-r--r--include/ouroboros/ipcp-dev.h4
-rw-r--r--include/ouroboros/shared.h6
4 files changed, 28 insertions, 29 deletions
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 */