From af1dff6fc06f55d6565589282ac4ebacc53b4d29 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Sat, 14 May 2016 18:32:49 +0200 Subject: lib, ipcpd, irmd: Add QoS cube definition This adds the QoS cube definition, which is an enum to select which QoS is needed in the IPCP. An application has to use the qos_spec in qos.h to define what it needs. The IRMd will map this unto a qos cube definition. Some headers are now also no longer installed on the system, since they are only to be used within the irmd and ipcps. --- src/ipcpd/flow.c | 7 ++++--- src/ipcpd/flow.h | 31 +++++++------------------------ src/ipcpd/ipcp-ops.h | 13 ++++++------- src/ipcpd/ipcp.c | 2 +- src/ipcpd/normal/CMakeLists.txt | 6 ++++-- src/ipcpd/shim-udp/main.c | 15 ++++++++------- src/irmd/main.c | 13 +++++-------- src/lib/CMakeLists.txt | 3 --- src/lib/ipcp.c | 32 +++++++++++++++++--------------- src/lib/ipcpd_messages.proto | 11 ++++++----- 10 files changed, 58 insertions(+), 75 deletions(-) (limited to 'src') diff --git a/src/ipcpd/flow.c b/src/ipcpd/flow.c index 10280f3d..4ca61341 100644 --- a/src/ipcpd/flow.c +++ b/src/ipcpd/flow.c @@ -26,10 +26,11 @@ #define OUROBOROS_PREFIX "ipcpd/flow" #include +#include -flow_t * flow_create(int port_id) +struct flow * flow_create(int port_id) { - flow_t * flow = malloc(sizeof *flow); + struct flow * flow = malloc(sizeof *flow); if (flow == NULL) { LOG_DBGF("Could not malloc flow."); return NULL; @@ -45,7 +46,7 @@ flow_t * flow_create(int port_id) return flow; } -void flow_destroy(flow_t * flow) +void flow_destroy(struct flow * flow) { if (flow == NULL) return; diff --git a/src/ipcpd/flow.h b/src/ipcpd/flow.h index 43de5f94..6f50698e 100644 --- a/src/ipcpd/flow.h +++ b/src/ipcpd/flow.h @@ -20,32 +20,15 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef OUROBOROS_FLOW_H -#define OUROBOROS_FLOW_H +#ifndef OUROBOROS_IPCP_FLOW_H +#define OUROBOROS_IPCP_FLOW_H -#include #include +#include #include #include -/* 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_NULL = 0, - FLOW_ALLOCATED, - FLOW_PENDING -}; - -typedef struct flow { +struct flow { struct list_head list; int port_id; @@ -53,9 +36,9 @@ typedef struct flow { enum flow_state state; pthread_mutex_t lock; -} flow_t; +}; -flow_t * flow_create(int port_id); -void flow_destroy(flow_t * flow); +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 5e90939d..1365f9b6 100644 --- a/src/ipcpd/ipcp-ops.h +++ b/src/ipcpd/ipcp-ops.h @@ -24,7 +24,6 @@ #ifndef IPCPD_IPCP_OPS_H #define IPCPD_IPCP_OPS_H -#include #include #include @@ -38,12 +37,12 @@ struct ipcp_ops { size_t len); int (* ipcp_name_reg)(char * name); int (* ipcp_name_unreg)(char * name); - int (* ipcp_flow_alloc)(int port_id, - pid_t n_pid, - char * dst_ap_name, - char * src_ap_name, - char * src_ae_name, - struct qos_spec * qos); + int (* ipcp_flow_alloc)(int port_id, + pid_t n_pid, + char * dst_ap_name, + char * src_ap_name, + char * src_ae_name, + enum qos_cube qos); int (* ipcp_flow_alloc_resp)(int port_id, pid_t n_pid, int response); diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c index 13632a80..1e122b73 100644 --- a/src/ipcpd/ipcp.c +++ b/src/ipcpd/ipcp.c @@ -181,7 +181,7 @@ void * ipcp_main_loop(void * o) msg->dst_name, msg->src_ap_name, msg->src_ae_name, - NULL); + msg->qos_cube); break; case IPCP_MSG_CODE__IPCP_FLOW_ALLOC_RESP: if (_ipcp->ops->ipcp_flow_alloc_resp == NULL) { diff --git a/src/ipcpd/normal/CMakeLists.txt b/src/ipcpd/normal/CMakeLists.txt index c13cbaa3..58584e20 100644 --- a/src/ipcpd/normal/CMakeLists.txt +++ b/src/ipcpd/normal/CMakeLists.txt @@ -1,5 +1,7 @@ -get_filename_component(CURRENT_SOURCE_PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) -get_filename_component(CURRENT_BINARY_PARENT_DIR ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY) +get_filename_component(CURRENT_SOURCE_PARENT_DIR + ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) +get_filename_component(CURRENT_BINARY_PARENT_DIR + ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/ipcpd/shim-udp/main.c b/src/ipcpd/shim-udp/main.c index 14a698ee..f9a8c42b 100644 --- a/src/ipcpd/shim-udp/main.c +++ b/src/ipcpd/shim-udp/main.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #define OUROBOROS_PREFIX "ipcpd/shim-udp" @@ -679,12 +680,12 @@ static int ipcp_udp_name_unreg(char * name) return 0; } -static int ipcp_udp_flow_alloc(int port_id, - pid_t n_pid, - char * dst_name, - char * src_ap_name, - char * src_ae_name, - struct qos_spec * qos) +static int ipcp_udp_flow_alloc(int port_id, + pid_t n_pid, + char * dst_name, + char * src_ap_name, + char * src_ae_name, + enum qos_cube qos) { struct sockaddr_in l_saddr; struct sockaddr_in r_saddr; @@ -708,7 +709,7 @@ static int ipcp_udp_flow_alloc(int port_id, return -1; } - if (qos != NULL) + if (qos != QOS_CUBE_BE) LOG_DBGF("QoS requested. UDP/IP can't do that."); fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); diff --git a/src/irmd/main.c b/src/irmd/main.c index d266273d..65c173de 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -24,7 +24,6 @@ #include #include -#include #include #include #include @@ -35,6 +34,8 @@ #include #include #include +#include +#include #include #include @@ -56,12 +57,6 @@ #define IRMD_THREADPOOL_SIZE 3 #endif -enum flow_state { - FLOW_NULL = 0, - FLOW_PENDING, - FLOW_ALLOCATED -}; - struct ipcp_entry { struct list_head next; instance_name_t * api; @@ -927,6 +922,8 @@ static struct port_map_entry * flow_alloc(pid_t pid, struct port_map_entry * pme; instance_name_t * ipcp; + /* FIXME: Map qos_spec to qos_cube */ + pthread_mutex_lock(&instance->s_lock); if (instance->shutdown) { pthread_mutex_unlock(&instance->s_lock); @@ -965,7 +962,7 @@ static struct port_map_entry * flow_alloc(pid_t pid, dst_name, src_ap_name, src_ae_name, - qos) < 0) { + QOS_CUBE_BE) < 0) { pthread_mutex_lock(&instance->r_lock); list_del(&pme->next); diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 53a7b354..5166f569 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -38,9 +38,6 @@ set(SOURCE_FILES utils.c ) -install(FILES ${IRM_PROTO_HDRS} ${IPCP_PROTO_HDRS} ${DIF_CONFIG_PROTO_HDRS} - DESTINATION include/ouroboros) - add_library(ouroboros SHARED ${SOURCE_FILES} ${IRM_PROTO_SRCS} ${IPCP_PROTO_SRCS} ${DIF_CONFIG_PROTO_SRCS}) diff --git a/src/lib/ipcp.c b/src/lib/ipcp.c index 1f1e5c99..8a4f9629 100644 --- a/src/lib/ipcp.c +++ b/src/lib/ipcp.c @@ -361,13 +361,13 @@ int ipcp_name_unreg(pid_t pid, return ret; } -int ipcp_flow_alloc(pid_t pid, - int port_id, - pid_t n_pid, - char * dst_name, - char * src_ap_name, - char * src_ae_name, - struct qos_spec * qos) +int ipcp_flow_alloc(pid_t pid, + int port_id, + pid_t n_pid, + char * dst_name, + char * src_ap_name, + char * src_ae_name, + enum qos_cube qos) { ipcp_msg_t msg = IPCP_MSG__INIT; ipcp_msg_t * recv_msg = NULL; @@ -376,14 +376,16 @@ int ipcp_flow_alloc(pid_t pid, if (dst_name == NULL || src_ap_name == NULL || src_ae_name == NULL) return -EINVAL; - msg.code = IPCP_MSG_CODE__IPCP_FLOW_ALLOC; - msg.has_port_id = true; - msg.port_id = port_id; - msg.has_pid = true; - msg.pid = n_pid; - msg.src_ap_name = src_ap_name; - msg.src_ae_name = src_ae_name; - msg.dst_name = dst_name; + msg.code = IPCP_MSG_CODE__IPCP_FLOW_ALLOC; + msg.has_port_id = true; + msg.port_id = port_id; + msg.has_pid = true; + msg.pid = n_pid; + msg.src_ap_name = src_ap_name; + msg.src_ae_name = src_ae_name; + msg.dst_name = dst_name; + msg.has_qos_cube = true; + msg.qos_cube = qos; recv_msg = send_recv_ipcp_msg(pid, &msg); if (recv_msg == NULL) diff --git a/src/lib/ipcpd_messages.proto b/src/lib/ipcpd_messages.proto index 901adaa0..63e41986 100644 --- a/src/lib/ipcpd_messages.proto +++ b/src/lib/ipcpd_messages.proto @@ -24,9 +24,10 @@ message ipcp_msg { optional string dst_name = 8; optional string src_ap_name = 9; optional string src_ae_name = 10; - optional dif_config_msg conf = 11; - optional sint32 fd = 12; - optional sint32 pid = 13; - optional sint32 response = 14; - optional sint32 result = 15; + optional sint32 qos_cube = 11; + optional dif_config_msg conf = 12; + optional sint32 fd = 13; + optional sint32 pid = 14; + optional sint32 response = 15; + optional sint32 result = 16; }; -- cgit v1.2.3 From 8f1e46eab45ba0f497f05d6fe18fb83d8590b3e9 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Sat, 14 May 2016 18:57:24 +0200 Subject: lib: Fix header inclusion This fixes wrong header inclusion that would make programs which are not developed within ouroboros fail upon compilation, since they would not find certain headers on their system. --- include/ouroboros/CMakeLists.txt | 4 ++-- include/ouroboros/cdap.h | 37 ++++++++++++++++++------------------- include/ouroboros/da.h | 4 ++-- include/ouroboros/dif_config.h | 4 ++-- include/ouroboros/instance_name.h | 4 +++- src/ipcpd/ipcp-ops.h | 1 + 6 files changed, 28 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index 5ce99c4c..6e49ee04 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -8,9 +8,9 @@ set(HEADER_FILES dev.h dif_config.h flow.h + instance_name.h irm.h qos.h ) -install(FILES ${HEADER_FILES} "${CMAKE_CURRENT_BINARY_DIR}/config.h" - DESTINATION include/ouroboros) +install(FILES ${HEADER_FILES} DESTINATION include/ouroboros) diff --git a/include/ouroboros/cdap.h b/include/ouroboros/cdap.h index f1abeff5..72788ad6 100644 --- a/include/ouroboros/cdap.h +++ b/include/ouroboros/cdap.h @@ -23,81 +23,80 @@ #ifndef OUROBOROS_CDAP_H #define OUROBOROS_CDAP_H -#include "common.h" #include struct cdap; struct cdap_ops { /* Sender related callbacks */ - int (* handle_connect_r)(port_id_t id, + int (* handle_connect_r)(int fd, int invoke_id, int result); - int (* handle_release_r)(port_id_t id, + int (* handle_release_r)(int fd, int invoke_id, int result); - int (* handle_read_r)(port_id_t id, + int (* handle_read_r)(int fd, int invoke_id, int result, char * reason, char * obj_val, bool complete); - int (* handle_cancelread_r)(port_id_t id, + int (* handle_cancelread_r)(int fd, int invoke_id, int result); - int (* handle_write_r)(port_id_t id, + int (* handle_write_r)(int fd, int invoke_id, int result, char * reason, char * obj_val); - int (* handle_create_r)(port_id_t id, + int (* handle_create_r)(int fd, int invoke_id, int result); - int (* handle_delete_r)(port_id_t id, + int (* handle_delete_r)(int fd, int invoke_id, int result); - int (* handle_start_r)(port_id_t id, + int (* handle_start_r)(int fd, int invoke_id, int result); - int (* handle_stop_r)(port_id_t id, + int (* handle_stop_r)(int fd, int invoke_id, int result); /* Receiver related callbacks */ - int (* handle_connect)(port_id_t id, + int (* handle_connect)(int fd, int invoke_id, rina_name_t src, rina_name_t dst, char * auth_mech, char * auth_val); - int (* handle_release)(port_id_t id, + int (* handle_release)(int fd, int invoke_id); - int (* handle_cancelread)(port_id_t id, + int (* handle_cancelread)(int fd, int invoke_id); - int (* handle_write)(port_id_t id, + int (* handle_write)(int fd, int invoke_id, char * obj_name, char * obj_val); - int (* handle_create)(port_id_t id, + int (* handle_create)(int fd, int invoke_id, char * obj_class, char * obj_name, char * obj_val); - int (* handle_delete)(port_id_t id, + int (* handle_delete)(int fd, int invoke_id, char * obj_name); - int (* handle_start)(port_id_t id, + int (* handle_start)(int fd, int invoke_id, char * obj_name, char * obj_val); - int (* handle_stop)(port_id_t id, + int (* handle_stop)(int fd, int invoke_id, char * obj_name, char * obj_val); }; struct cdap * cdap_create(struct cdap_ops ops, - port_id_t id); + int fd); int cdap_destroy(struct cdap * instance); /* Sender related functions */ diff --git a/include/ouroboros/da.h b/include/ouroboros/da.h index 9ecd4bd8..406be7a8 100644 --- a/include/ouroboros/da.h +++ b/include/ouroboros/da.h @@ -23,8 +23,8 @@ #ifndef OUROBOROS_DA_H #define OUROBOROS_DA_H -#include "common.h" -#include "instance_name.h" +#include +#include char * da_resolve_daf(char * daf_name); /* diff --git a/include/ouroboros/dif_config.h b/include/ouroboros/dif_config.h index 5d489b0c..d76d4f68 100644 --- a/include/ouroboros/dif_config.h +++ b/include/ouroboros/dif_config.h @@ -20,8 +20,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include -#include +#include +#include #ifndef OUROBOROS_DIF_CONFIG_H #define OUROBOROS_DIF_CONFIG_H diff --git a/include/ouroboros/instance_name.h b/include/ouroboros/instance_name.h index 351b222f..92681504 100644 --- a/include/ouroboros/instance_name.h +++ b/include/ouroboros/instance_name.h @@ -22,7 +22,9 @@ #ifndef INSTANCE_NAME_H #define INSTANCE_NAME_H -#include "common.h" +#include +#include +#include typedef struct { char * name; diff --git a/src/ipcpd/ipcp-ops.h b/src/ipcpd/ipcp-ops.h index 1365f9b6..a766c3ae 100644 --- a/src/ipcpd/ipcp-ops.h +++ b/src/ipcpd/ipcp-ops.h @@ -25,6 +25,7 @@ #define IPCPD_IPCP_OPS_H #include +#include #include struct ipcp_ops { -- cgit v1.2.3