diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/ouroboros/CMakeLists.txt | 1 | ||||
-rw-r--r-- | include/ouroboros/crypt.h | 4 | ||||
-rw-r--r-- | include/ouroboros/flow.h | 4 | ||||
-rw-r--r-- | include/ouroboros/hash.h | 16 | ||||
-rw-r--r-- | include/ouroboros/ipcp-dev.h | 5 | ||||
-rw-r--r-- | include/ouroboros/ipcp.h | 2 | ||||
-rw-r--r-- | include/ouroboros/irm.h | 14 | ||||
-rw-r--r-- | include/ouroboros/list.h | 2 | ||||
-rw-r--r-- | include/ouroboros/name.h | 40 | ||||
-rw-r--r-- | include/ouroboros/proc.h | 44 | ||||
-rw-r--r-- | include/ouroboros/rib.h | 4 | ||||
-rw-r--r-- | include/ouroboros/shm_rdrbuff.h | 4 | ||||
-rw-r--r-- | include/ouroboros/test.h | 79 | ||||
-rw-r--r-- | include/ouroboros/time.h (renamed from include/ouroboros/time_utils.h) | 15 | ||||
-rw-r--r-- | include/ouroboros/utils.h | 7 |
15 files changed, 209 insertions, 32 deletions
diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index 8f248710..cac1b8d9 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -16,6 +16,7 @@ set(HEADER_FILES fqueue.h ipcp.h irm.h + name.h proto.h qos.h ${CMAKE_CURRENT_BINARY_DIR}/version.h diff --git a/include/ouroboros/crypt.h b/include/ouroboros/crypt.h index c6e89a47..f0521c5a 100644 --- a/include/ouroboros/crypt.h +++ b/include/ouroboros/crypt.h @@ -24,6 +24,7 @@ #define OUROBOROS_LIB_CRYPT_H #include <ouroboros/shm_du_buff.h> +#include <ouroboros/utils.h> #define SYMMKEYSZ 32 @@ -39,8 +40,7 @@ int crypt_dh_pkp_create(void ** pkp, void crypt_dh_pkp_destroy(void * pkp); int crypt_dh_derive(void * pkp, - uint8_t * pk, - size_t len, + buffer_t pk, uint8_t * s); int crypt_encrypt(struct crypt_info * info, diff --git a/include/ouroboros/flow.h b/include/ouroboros/flow.h index e8c1dfdf..e10e987c 100644 --- a/include/ouroboros/flow.h +++ b/include/ouroboros/flow.h @@ -30,11 +30,11 @@ enum flow_state { /* DO NOT CHANGE ORDER! */ FLOW_INIT = 0, FLOW_ALLOC_PENDING, - FLOW_ALLOC_REQ_PENDING, + FLOW_ACCEPT_PENDING, FLOW_ALLOCATED, FLOW_DEALLOC_PENDING, FLOW_DEALLOCATED, - FLOW_DESTROY, + FLOW_DESTROY, /* TODO: REMOVE! */ FLOW_NULL }; diff --git a/include/ouroboros/hash.h b/include/ouroboros/hash.h index c7168238..6b0087ce 100644 --- a/include/ouroboros/hash.h +++ b/include/ouroboros/hash.h @@ -72,13 +72,13 @@ enum hash_algo { uint16_t hash_len(enum hash_algo algo); -void mem_hash(enum hash_algo algo, - void * dst, - const uint8_t * buf, - size_t len); - -void str_hash(enum hash_algo algo, - void * dst, - const char * str); +void mem_hash(enum hash_algo algo, + void * dst, + const uint8_t * buf, + size_t len); + +void str_hash(enum hash_algo algo, + void * dst, + const char * str); #endif /* OUROBOROS_LIB_HASH_H */ diff --git a/include/ouroboros/ipcp-dev.h b/include/ouroboros/ipcp-dev.h index a7075dc4..5ee78905 100644 --- a/include/ouroboros/ipcp-dev.h +++ b/include/ouroboros/ipcp-dev.h @@ -22,11 +22,12 @@ #include <ouroboros/shm_rdrbuff.h> #include <ouroboros/qoscube.h> +#include <ouroboros/ipcp.h> #ifndef OUROBOROS_LIB_IPCP_DEV_H #define OUROBOROS_LIB_IPCP_DEV_H -int ipcp_create_r(int result); +int ipcp_create_r(const struct ipcp_info * info); int ipcp_flow_req_arr(const uint8_t * dst, size_t len, @@ -53,6 +54,8 @@ int np1_flow_read(int fd, int np1_flow_write(int fd, struct shm_du_buff * sdb); +int ipcp_flow_dealloc(int fd); + int ipcp_flow_fini(int fd); int ipcp_flow_get_qoscube(int fd, diff --git a/include/ouroboros/ipcp.h b/include/ouroboros/ipcp.h index eb7d1670..42c4dfa4 100644 --- a/include/ouroboros/ipcp.h +++ b/include/ouroboros/ipcp.h @@ -36,6 +36,8 @@ enum ipcp_state { IPCP_INIT = 0, IPCP_BOOT, IPCP_OPERATIONAL, + IPCP_BOOTSTRAPPED, + IPCP_ENROLLED, IPCP_SHUTDOWN, IPCP_NULL }; diff --git a/include/ouroboros/irm.h b/include/ouroboros/irm.h index 30d461ab..b27343e8 100644 --- a/include/ouroboros/irm.h +++ b/include/ouroboros/irm.h @@ -25,25 +25,15 @@ #include <ouroboros/cdefs.h> #include <ouroboros/ipcp.h> +#include <ouroboros/name.h> #include <ouroboros/qos.h> #include <sys/types.h> /* Name binding options. */ -#define BIND_AUTO 0x01 +#define BIND_AUTO 0x01 #define NAME_SIZE 255 -enum pol_balance { - LB_RR = 0, - LB_SPILL, - LB_INVALID -}; - -struct name_info { - char name[NAME_SIZE + 1]; - enum pol_balance pol_lb; -}; - struct ipcp_list_info { pid_t pid; enum ipcp_type type; diff --git a/include/ouroboros/list.h b/include/ouroboros/list.h index dc408649..f3ea0e46 100644 --- a/include/ouroboros/list.h +++ b/include/ouroboros/list.h @@ -61,6 +61,6 @@ void list_del(struct list_head * e); void list_move(struct list_head * dst, struct list_head * src); -bool list_is_empty(struct list_head * h); +bool list_is_empty(const struct list_head * h); #endif /* OUROBOROS_LIB_LIST_H */ diff --git a/include/ouroboros/name.h b/include/ouroboros/name.h new file mode 100644 index 00000000..0f71e63d --- /dev/null +++ b/include/ouroboros/name.h @@ -0,0 +1,40 @@ +/* + * Ouroboros - Copyright (C) 2016 - 2024 + * + * Names + * + * Dimitri Staessens <[email protected]> + * Sander Vrijders <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., http://www.fsf.org/about/contact/. + */ + +#ifndef OUROBOROS_NAME_H +#define OUROBOROS_NAME_H + +#define NAME_SIZE 255 +#define BIND_AUTO 0x01 + +enum pol_balance { + LB_RR = 0, + LB_SPILL, + LB_INVALID +}; + +struct name_info { + char name[NAME_SIZE + 1]; + enum pol_balance pol_lb; +}; + +#endif /* OUROBOROS_NAME_H */
\ No newline at end of file diff --git a/include/ouroboros/proc.h b/include/ouroboros/proc.h new file mode 100644 index 00000000..d0b010bb --- /dev/null +++ b/include/ouroboros/proc.h @@ -0,0 +1,44 @@ +/* + * Ouroboros - Copyright (C) 2016 - 2024 + * + * Processes and Programs + * + * Dimitri Staessens <[email protected]> + * Sander Vrijders <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., http://www.fsf.org/about/contact/. + */ + +#ifndef OUROBOROS_LIB_PROC_H +#define OUROBOROS_LIB_PROC_H + +#include <sys/types.h> + +#define PROG_NAME_SIZE 255 +#define PROG_PATH_SIZE 255 + +/* Processes */ +struct proc_info { + pid_t pid; + char prog[PROG_NAME_SIZE + 1]; /* program instantiated */ + +}; + +/* Programs */ +struct prog_info { + char name[PROG_NAME_SIZE + 1]; + char path[PROG_PATH_SIZE + 1]; +}; + +#endif /* OUROBOROS_LIB_PROC_H */
\ No newline at end of file diff --git a/include/ouroboros/rib.h b/include/ouroboros/rib.h index 94bb5b85..6aabe8f7 100644 --- a/include/ouroboros/rib.h +++ b/include/ouroboros/rib.h @@ -23,7 +23,7 @@ #ifndef OUROBOROS_LIB_RIB_H #define OUROBOROS_LIB_RIB_H -#define RIB_PATH_LEN 128 +#define RIB_PATH_LEN 300 #define RIB_SEPARATOR "/" #include <sys/types.h> @@ -53,4 +53,6 @@ int rib_reg(const char * path, void rib_unreg(const char * path); +void rib_cleanup(const char * mnt); + #endif /* OUROBOROS_LIB_RIB_H */ diff --git a/include/ouroboros/shm_rdrbuff.h b/include/ouroboros/shm_rdrbuff.h index 93846132..4f9a215a 100644 --- a/include/ouroboros/shm_rdrbuff.h +++ b/include/ouroboros/shm_rdrbuff.h @@ -24,10 +24,10 @@ #define OUROBOROS_LIB_SHM_RDRBUFF_H #include <ouroboros/shm_du_buff.h> -#include <ouroboros/time_utils.h> +#include <ouroboros/time.h> -#include <stdint.h> #include <pthread.h> +#include <stdint.h> #include <sys/types.h> struct shm_rdrbuff; diff --git a/include/ouroboros/test.h b/include/ouroboros/test.h new file mode 100644 index 00000000..56c92137 --- /dev/null +++ b/include/ouroboros/test.h @@ -0,0 +1,79 @@ +/* + * Ouroboros - Copyright (C) 2016 - 2024 + * + * Test macros + * + * Dimitri Staessens <[email protected]> + * Sander Vrijders <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., http://www.fsf.org/about/contact/. + */ + +#ifndef OUROBOROS_LIB_TEST_H +#define OUROBOROS_LIB_TEST_H + +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <sys/wait.h> + +#define TEST_START() \ + do { \ + printf("%s started.\n", __func__); \ + fflush(stdout); \ + } while(0) +#define TEST_SUCCESS() \ + do { \ + printf("%s succeeded.\n", __func__); \ + fflush(stdout); \ + } while(0) + +#define TEST_FAIL() \ + do { \ + printf("%s failed.\n", __func__); \ + fflush(stdout); \ + } while(0) + +static int __attribute__((unused)) test_assert_fail(int(* testfunc)(void)) +{ + pid_t pid; + int wstatus; + + pid = fork(); + if (pid == -1) { + printf("Failed to fork: %s.\n", strerror(errno)); + return -1; + } + + if (pid == 0) + return testfunc(); /* should abort */ + + waitpid(pid, &wstatus, 0); +#ifdef CONFIG_OUROBOROS_DEBUG + if (WIFSIGNALED(wstatus) && wstatus == 134) + return 0; + + printf("Process did not abort, status: %d.\n", wstatus); +#else + if (WIFEXITED(wstatus) && wstatus == 0) + return 0; + + printf("Process did not exit, status: %d.\n", wstatus); +#endif + + return -1; +} + +#endif /* OUROBOROS_LIB_TEST_H */
\ No newline at end of file diff --git a/include/ouroboros/time_utils.h b/include/ouroboros/time.h index 872c9963..b274c35b 100644 --- a/include/ouroboros/time_utils.h +++ b/include/ouroboros/time.h @@ -20,8 +20,8 @@ * Foundation, Inc., http://www.fsf.org/about/contact/. */ -#ifndef OUROBOROS_LIB_TIME_UTILS_H -#define OUROBOROS_LIB_TIME_UTILS_H +#ifndef OUROBOROS_LIB_TIME_H +#define OUROBOROS_LIB_TIME_H #ifdef MILLION #undef MILLION @@ -37,6 +37,15 @@ #include <time.h> #include <sys/time.h> +#define TIMESPEC_INIT_S(s) {(s), 0} +#define TIMESPEC_INIT_MS(ms) {(ms) / 1000, ((ms) % 1000) * MILLION} +#define TIMESPEC_INIT_US(us) {(us) / MILLION, ((us) % MILLION) * 1000} +#define TIMESPEC_INIT_NS(ns) {(ns) / BILLION, ((ns) % BILLION)} + +#define TIMEVAL_INIT_S(s) {(s), 0} +#define TIMEVAL_INIT_MS(ms) {(ms) / 1000, ((ms) % 1000) * 1000} +#define TIMEVAL_INIT_US(us) {(us) / MILLION, ((us) % MILLION)} + /* functions for timespecs */ #define ts_diff_ns(t0, tx) (((tx)->tv_sec - (t0)->tv_sec) * BILLION \ + ((tx)->tv_nsec - (t0)->tv_nsec)) @@ -118,4 +127,4 @@ (tv)->tv_usec = (ts)->tv_nsec / 1000L; \ } while (0); -#endif /* OUROBOROS_LIB_TIME_UTILS_H */ +#endif /* OUROBOROS_LIB_TIME_H */ diff --git a/include/ouroboros/utils.h b/include/ouroboros/utils.h index 2dff6e67..93fbf402 100644 --- a/include/ouroboros/utils.h +++ b/include/ouroboros/utils.h @@ -47,6 +47,13 @@ int n_digits(unsigned i); /* gets the application name */ char * path_strip(const char * src); +/* functions for copying and destroying arguments list */ +size_t argvlen(const char ** argv); + +char ** argvdup(char ** argv); + +void argvfree(char ** argv); + /* destroy a ** */ #define freepp(type, ptr, len) \ do { \ |