diff options
-rw-r--r-- | include/ouroboros/CMakeLists.txt | 13 | ||||
-rw-r--r-- | include/ouroboros/common.h | 11 | ||||
-rw-r--r-- | include/ouroboros/dev.h | 9 | ||||
-rw-r--r-- | include/ouroboros/flow.h | 4 | ||||
-rw-r--r-- | include/ouroboros/ipcp.h | 22 | ||||
-rw-r--r-- | include/ouroboros/qos.h | 35 | ||||
-rw-r--r-- | src/ipcpd/flow.c | 7 | ||||
-rw-r--r-- | src/ipcpd/flow.h | 31 | ||||
-rw-r--r-- | src/ipcpd/ipcp-ops.h | 13 | ||||
-rw-r--r-- | src/ipcpd/ipcp.c | 2 | ||||
-rw-r--r-- | src/ipcpd/normal/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/ipcpd/shim-udp/main.c | 15 | ||||
-rw-r--r-- | src/irmd/main.c | 13 | ||||
-rw-r--r-- | src/lib/CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/lib/ipcp.c | 32 | ||||
-rw-r--r-- | src/lib/ipcpd_messages.proto | 11 |
16 files changed, 117 insertions, 110 deletions
diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index f1276f51..5ce99c4c 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -3,24 +3,13 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/config.h") set(HEADER_FILES - bitmap.h cdap.h - common.h da.h dev.h dif_config.h - du_buff.h flow.h - instance_name.h - ipcp.h irm.h - list.h - logs.h - rw_lock.h - shm_ap_rbuff.h - shm_du_map.h - sockets.h - utils.h + qos.h ) install(FILES ${HEADER_FILES} "${CMAKE_CURRENT_BINARY_DIR}/config.h" diff --git a/include/ouroboros/common.h b/include/ouroboros/common.h index 971a382a..f2c8a9ec 100644 --- a/include/ouroboros/common.h +++ b/include/ouroboros/common.h @@ -33,13 +33,10 @@ typedef struct { size_t size; } buffer_t; -/* FIXME: may need revision */ -struct qos_spec { - char * qos_name; - char * dif_name; - - uint32_t delay; - uint32_t jitter; +/* FIXME: To be decided which QoS cubes we support */ +enum qos_cube { + QOS_CUBE_BE = 0, + QOS_CUBE_VIDEO }; #endif /* OUROBOROS_COMMON_H */ diff --git a/include/ouroboros/dev.h b/include/ouroboros/dev.h index d8e65144..506fa789 100644 --- a/include/ouroboros/dev.h +++ b/include/ouroboros/dev.h @@ -20,12 +20,15 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef OUROBOROS_DEV_H -#define OUROBOROS_DEV_H +#include <unistd.h> +#include <stdint.h> -#include <ouroboros/common.h> +#include <ouroboros/qos.h> #include <ouroboros/flow.h> +#ifndef OUROBOROS_DEV_H +#define OUROBOROS_DEV_H + #define UNKNOWN_AP "__UNKNOWN_AP__" #define UNKNOWN_AE "__UNKNOWN_AE__" diff --git a/include/ouroboros/flow.h b/include/ouroboros/flow.h index 380c671b..aa377034 100644 --- a/include/ouroboros/flow.h +++ b/include/ouroboros/flow.h @@ -39,8 +39,8 @@ enum flow_state { FLOW_NULL = 0, - FLOW_ALLOCATED, - FLOW_PENDING + FLOW_PENDING, + FLOW_ALLOCATED }; #endif /* OUROBOROS_FLOW_H */ diff --git a/include/ouroboros/ipcp.h b/include/ouroboros/ipcp.h index 63e19e9d..08bee33e 100644 --- a/include/ouroboros/ipcp.h +++ b/include/ouroboros/ipcp.h @@ -20,16 +20,16 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef OUROBOROS_IPCP_H -#define OUROBOROS_IPCP_H - -#include <ouroboros/common.h> #include <ouroboros/dif_config.h> #include <ouroboros/instance_name.h> #include <ouroboros/sockets.h> +#include <ouroboros/common.h> #include <sys/types.h> +#ifndef OUROBOROS_IPCP_H +#define OUROBOROS_IPCP_H + struct ipcp; /* Returns the process id */ @@ -59,13 +59,13 @@ int ipcp_name_reg(pid_t pid, int ipcp_name_unreg(pid_t pid, char * name); -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); int ipcp_flow_alloc_resp(pid_t pid, int port_id, pid_t n_pid, diff --git a/include/ouroboros/qos.h b/include/ouroboros/qos.h new file mode 100644 index 00000000..c87b7c69 --- /dev/null +++ b/include/ouroboros/qos.h @@ -0,0 +1,35 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Quality of Service specification + * + * Sander Vrijders <sander.vrijders@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_QOS_H +#define OUROBOROS_QOS_H + +/* FIXME: may need revision */ +struct qos_spec { + char * qos_name; + char * dif_name; + + uint32_t delay; + uint32_t jitter; +}; + +#endif 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 <ouroboros/logs.h> +#include <ouroboros/flow.h> -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 <ouroboros/common.h> #include <ouroboros/list.h> +#include <ouroboros/flow.h> #include <ouroboros/shm_ap_rbuff.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_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 <ouroboros/common.h> #include <ouroboros/dif_config.h> #include <sys/types.h> @@ -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 <ouroboros/dif_config.h> #include <ouroboros/sockets.h> #include <ouroboros/bitmap.h> +#include <ouroboros/flow.h> #include <ouroboros/dev.h> #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 <ouroboros/config.h> #include <ouroboros/logs.h> -#include <ouroboros/common.h> #include <ouroboros/sockets.h> #include <ouroboros/irm.h> #include <ouroboros/ipcp.h> @@ -35,6 +34,8 @@ #include <ouroboros/dif_config.h> #include <ouroboros/shm_du_map.h> #include <ouroboros/bitmap.h> +#include <ouroboros/flow.h> +#include <ouroboros/qos.h> #include <sys/socket.h> #include <sys/un.h> @@ -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 72e32512..ac9b93b1 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -39,9 +39,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; }; |