From 21b304b46a347772c1338b22fba6a15291bb2945 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Sun, 17 Apr 2016 12:08:49 +0200 Subject: ipcpd: initial IPC processes Basic functions for implementation of IPC processes, and implementation of core functions of the shim IPCP over UDP. Updates to the build system to compile these IPC processes, as well as some fixes in the irmd (rudimentary capturing exit signals) and some fixes in the library, mainly relating to the messaging. Basic implementation of creation / bootstrapping / deletion of the shim UDP. Placeholders for other functions. --- src/lib/flow.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/lib/flow.c') diff --git a/src/lib/flow.c b/src/lib/flow.c index 593bef1a..da0ca148 100644 --- a/src/lib/flow.c +++ b/src/lib/flow.c @@ -35,9 +35,11 @@ flow_t * flow_create(int32_t port_id) return NULL; } + INIT_LIST_HEAD(&flow->list); + flow->port_id = port_id; flow->oflags = FLOW_O_DEFAULT; - flow->state = FLOW_INIT; + flow->state = FLOW_NULL; pthread_mutex_init(&flow->lock, NULL); @@ -46,6 +48,8 @@ flow_t * flow_create(int32_t port_id) void flow_destroy(flow_t * flow) { + if (flow == NULL) + return; free(flow); } -- cgit v1.2.3 From 34b8b6e39ec45080c89b62994cf3ba8d32e666a1 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Tue, 19 Apr 2016 13:15:43 +0200 Subject: lib: moved flow header and source to ipcpd --- include/ouroboros/CMakeLists.txt | 1 - include/ouroboros/flow.h | 63 ----------------------------- src/ipcpd/CMakeLists.txt | 1 + src/ipcpd/flow.c | 87 ++++++++++++++++++++++++++++++++++++++++ src/ipcpd/flow.h | 63 +++++++++++++++++++++++++++++ src/ipcpd/ipcp-data.c | 1 - src/ipcpd/ipcp-data.h | 2 +- src/ipcpd/shim-udp/main.c | 2 +- src/lib/CMakeLists.txt | 1 - src/lib/flow.c | 87 ---------------------------------------- 10 files changed, 153 insertions(+), 155 deletions(-) delete mode 100644 include/ouroboros/flow.h create mode 100644 src/ipcpd/flow.c create mode 100644 src/ipcpd/flow.h delete mode 100644 src/lib/flow.c (limited to 'src/lib/flow.c') diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index fb4884b7..cfa299ca 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -10,7 +10,6 @@ set(HEADER_FILES dev.h dif_config.h du_buff.h - flow.h instance_name.h ipcp.h irm.h diff --git a/include/ouroboros/flow.h b/include/ouroboros/flow.h deleted file mode 100644 index 000de5ad..00000000 --- a/include/ouroboros/flow.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - * - * Flows - * - * Dimitri Staessens - * - * 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 -#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 list_head list; - - 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/src/ipcpd/CMakeLists.txt b/src/ipcpd/CMakeLists.txt index 6311e3dc..5a924ffe 100644 --- a/src/ipcpd/CMakeLists.txt +++ b/src/ipcpd/CMakeLists.txt @@ -1,5 +1,6 @@ set(IPCP_SOURCES # Add source files here + ${CMAKE_CURRENT_SOURCE_DIR}/flow.c ${CMAKE_CURRENT_SOURCE_DIR}/ipcp.c ${CMAKE_CURRENT_SOURCE_DIR}/ipcp-data.c ) diff --git a/src/ipcpd/flow.c b/src/ipcpd/flow.c new file mode 100644 index 00000000..c436733b --- /dev/null +++ b/src/ipcpd/flow.c @@ -0,0 +1,87 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Flows + * + * Dimitri Staessens + * + * 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. + */ + +#include +#include "flow.h" + +#define OUROBOROS_PREFIX "ipcpd/flow" + +#include + +flow_t * flow_create(int32_t port_id) +{ + flow_t * flow = malloc(sizeof *flow); + if (flow == NULL) { + LOG_DBGF("Could not malloc flow."); + return NULL; + } + + INIT_LIST_HEAD(&flow->list); + + flow->port_id = port_id; + flow->oflags = FLOW_O_DEFAULT; + flow->state = FLOW_NULL; + + pthread_mutex_init(&flow->lock, NULL); + + return flow; +} + +void flow_destroy(flow_t * flow) +{ + if (flow == NULL) + return; + free(flow); +} + +int flow_set_opts(flow_t * flow, uint16_t opts) +{ + if (flow == NULL) { + LOG_DBGF("Non-existing flow."); + return -1; + } + + pthread_mutex_lock(&flow->lock); + + if ((opts & FLOW_O_ACCMODE) == FLOW_O_ACCMODE) { + flow->oflags = FLOW_O_DEFAULT; + pthread_mutex_unlock(&flow->lock); + LOG_WARN("Invalid flow options. Setting default."); + return -1; + } + + flow->oflags = opts; + + pthread_mutex_unlock(&flow->lock); + + return 0; +} + +uint16_t flow_get_opts(const flow_t * flow) +{ + if (flow == NULL) { + LOG_DBGF("Non-existing flow."); + return FLOW_O_INVALID; + } + + return flow->oflags; +} diff --git a/src/ipcpd/flow.h b/src/ipcpd/flow.h new file mode 100644 index 00000000..000de5ad --- /dev/null +++ b/src/ipcpd/flow.h @@ -0,0 +1,63 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Flows + * + * Dimitri Staessens + * + * 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 +#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 list_head list; + + 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/src/ipcpd/ipcp-data.c b/src/ipcpd/ipcp-data.c index 17649b42..2ed20943 100644 --- a/src/ipcpd/ipcp-data.c +++ b/src/ipcpd/ipcp-data.c @@ -22,7 +22,6 @@ */ #include "ipcp-data.h" -#include #include #include #include diff --git a/src/ipcpd/ipcp-data.h b/src/ipcpd/ipcp-data.h index d51f3730..a8db44f7 100644 --- a/src/ipcpd/ipcp-data.h +++ b/src/ipcpd/ipcp-data.h @@ -27,11 +27,11 @@ #include #include #include -#include #include #include #include "ipcp-ops.h" +#include "flow.h" struct ipcp_data { instance_name_t * iname; diff --git a/src/ipcpd/shim-udp/main.c b/src/ipcpd/shim-udp/main.c index 45620ee9..df731490 100644 --- a/src/ipcpd/shim-udp/main.c +++ b/src/ipcpd/shim-udp/main.c @@ -23,9 +23,9 @@ #include #include "ipcp.h" +#include "flow.h" #include #include -#include #include #include #include diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index c2d1bcc7..4922e07c 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -28,7 +28,6 @@ set(SOURCE_FILES da.c dev.c du_buff.c - flow.c instance_name.c ipcp.c irm.c diff --git a/src/lib/flow.c b/src/lib/flow.c deleted file mode 100644 index da0ca148..00000000 --- a/src/lib/flow.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - * - * Flows - * - * Dimitri Staessens - * - * 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. - */ - -#include -#include - -#define OUROBOROS_PREFIX "ipcpd/flow" - -#include - -flow_t * flow_create(int32_t port_id) -{ - flow_t * flow = malloc(sizeof *flow); - if (flow == NULL) { - LOG_DBGF("Could not malloc flow."); - return NULL; - } - - INIT_LIST_HEAD(&flow->list); - - flow->port_id = port_id; - flow->oflags = FLOW_O_DEFAULT; - flow->state = FLOW_NULL; - - pthread_mutex_init(&flow->lock, NULL); - - return flow; -} - -void flow_destroy(flow_t * flow) -{ - if (flow == NULL) - return; - free(flow); -} - -int flow_set_opts(flow_t * flow, uint16_t opts) -{ - if (flow == NULL) { - LOG_DBGF("Non-existing flow."); - return -1; - } - - pthread_mutex_lock(&flow->lock); - - if ((opts & FLOW_O_ACCMODE) == FLOW_O_ACCMODE) { - flow->oflags = FLOW_O_DEFAULT; - pthread_mutex_unlock(&flow->lock); - LOG_WARN("Invalid flow options. Setting default."); - return -1; - } - - flow->oflags = opts; - - pthread_mutex_unlock(&flow->lock); - - return 0; -} - -uint16_t flow_get_opts(const flow_t * flow) -{ - if (flow == NULL) { - LOG_DBGF("Non-existing flow."); - return FLOW_O_INVALID; - } - - return flow->oflags; -} -- cgit v1.2.3