diff options
43 files changed, 123 insertions, 235 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 624950bc..432f6f49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(GNUInstallDirs) set(PACKAGE_NAME "${CMAKE_PROJECT_NAME}") set(PACKAGE_DESCRIPTION "The Ouroboros prototype") -set(PACKAGE_URL "None") +set(PACKAGE_URL "http://ouroboros.ilabt.imec.be") set(PACKAGE_BUGREPORT "None") set(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}") @@ -68,10 +68,16 @@ test_and_set_c_compiler_flag_global(-Wunreachable-code) test_and_set_c_compiler_flag_global(-Wdeclaration-after-statement) test_and_set_c_compiler_flag_global(-fmax-errors=5) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ouroboros.pc.in" - "${CMAKE_CURRENT_BINARY_DIR}/ouroboros.pc" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ouroboros-dev.pc.in" + "${CMAKE_CURRENT_BINARY_DIR}/ouroboros-dev.pc" @ONLY) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ouroboros.pc" +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ouroboros-irm.pc.in" + "${CMAKE_CURRENT_BINARY_DIR}/ouroboros-irm.pc" @ONLY) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ouroboros-dev.pc" + DESTINATION "usr/lib/pkgconfig") + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ouroboros-irm.pc" DESTINATION "usr/lib/pkgconfig") if (IS_DIRECTORY "/usr/lib/systemd") diff --git a/CONTRIBUTORS b/CONTRIBUTORS index eeff71ad..dbe6bde8 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1,5 +1,5 @@ This file contains a list of people who have made large contributions to Ouroboros, in alphabetical order. -Dimitri Staessens <[email protected]> -Sander Vrijders <[email protected]> +Dimitri Staessens <[email protected]> +Sander Vrijders <[email protected]> diff --git a/doc/man/CMakeLists.txt b/doc/man/CMakeLists.txt index ab56242d..ba72b14b 100644 --- a/doc/man/CMakeLists.txt +++ b/doc/man/CMakeLists.txt @@ -1,7 +1,5 @@ set(MAN_NAMES # Add man page sources here - ouroboros_init.3 - ouroboros_fini.3 flow_accept.3 flow_alloc.3 flow_dealloc.3 diff --git a/doc/man/fccntl.3 b/doc/man/fccntl.3 index ac35a7f8..eaa6a02e 100644 --- a/doc/man/fccntl.3 +++ b/doc/man/fccntl.3 @@ -14,7 +14,7 @@ fccntl \- control commands for flows and FRCT connections \fBint fccntl(int \fIfd\fB, int \fIcmd\fB, ...); -Compile and link with \fI-louroboros\fR. +Compile and link with \fI-louroboros-dev\fR. .SH DESCRIPTION diff --git a/doc/man/flow_alloc.3 b/doc/man/flow_alloc.3 index 662c46ec..cab8153e 100644 --- a/doc/man/flow_alloc.3 +++ b/doc/man/flow_alloc.3 @@ -22,7 +22,7 @@ const struct timespec * \fItimeo\fB); \fBint flow_dealloc(int \fIfd\fB);\fR -Compile and link with \fI-louroboros\fR. +Compile and link with \fI-louroboros-dev\fR. .SH DESCRIPTION @@ -109,8 +109,7 @@ _ .SH SEE ALSO -.BR ouroboros_init "(3), " ouroboros_fini "(3), " \ -flow_read "(3), " flow_write (3) +.BR flow_read "(3), " flow_write (3) .SH COLOPHON This page is part of the Ouroboros project, found at diff --git a/doc/man/flow_read.3 b/doc/man/flow_read.3 index 36a506a6..9e7842e5 100644 --- a/doc/man/flow_read.3 +++ b/doc/man/flow_read.3 @@ -16,7 +16,7 @@ flow_read, flow_write \- read and write from/to a flow \fBint flow_write(int \fIfd\fB, const void * \fIbuf\fB, size_t \fIcount\fB);\fR -Compile and link with \fI-louroboros\fR. +Compile and link with \fI-louroboros-dev\fR. .SH DESCRIPTION diff --git a/doc/man/fqueue.3 b/doc/man/fqueue.3 index cf8cef20..f932633d 100644 --- a/doc/man/fqueue.3 +++ b/doc/man/fqueue.3 @@ -22,7 +22,7 @@ on flows \fBint fevent(fset_t * \fIset\fB, fqueue_t * \fIfq\fB, const struct timespec * \fItimeo\fB); -Compile and link with \fI-louroboros\fR. +Compile and link with \fI-louroboros-dev\fR. .SH DESCRIPTION diff --git a/doc/man/fset.3 b/doc/man/fset.3 index b4f3a1b0..3b367e17 100644 --- a/doc/man/fset.3 +++ b/doc/man/fset.3 @@ -25,7 +25,7 @@ manipulation of a set of flow descriptors \fBbool fset_has(fset_t * \fIset\fB, int \fIfd\fB); -Compile and link with \fI-louroboros\fR. +Compile and link with \fI-louroboros-dev\fR. .SH DESCRIPTION diff --git a/doc/man/ouroboros_fini.3 b/doc/man/ouroboros_fini.3 deleted file mode 100644 index d525d287..00000000 --- a/doc/man/ouroboros_fini.3 +++ /dev/null @@ -1 +0,0 @@ -.so ouroboros_init.3 diff --git a/doc/man/ouroboros_init.3 b/doc/man/ouroboros_init.3 deleted file mode 100644 index c74bea5e..00000000 --- a/doc/man/ouroboros_init.3 +++ /dev/null @@ -1,69 +0,0 @@ -.\" Ouroboros man pages (C) 2017 -.\" Dimitri Staessens <[email protected]> -.\" Sander Vrijders <[email protected]> - -.TH OUROBOROS_INIT 3 2017-04-10 GNU "Ouroboros Programmer's Manual" - -.SH NAME - -ouroboros_init, ouroboros_fini \- initialize and finalize an -application for using Ouroboros - -.SH SYNOPSIS - -.B #include <ouroboros/dev.h> - -\fBint ouroboros_init(char * \fIapn\fB);\fR - -\fBvoid ouroboros_fini(void);\fR - -Compile and link with \fI-louroboros\fR. - -.SH DESCRIPTION - -The \fBouroboros_init\fR() call initializes an application process -instance for using the Ouroboros IPC infrastructure. If the -application is a server or peer, a \fBchar * \fIapn\fR has to be -provided indicating the application process that this instance belongs -to. This is usually argv[0]. A client application may pass NULL. The -\fBouroboros_fini\fR() call will release all resources allocated by -\fBouroboros_fini\fR(). - -\fBouroboros_init\fR() and \fBouroboros_fini\fR() should be called -only once in the application. - -.SH RETURN VALUE - -On success, \fBouroboros_init\fR() returns 0. On failure, a negative -value indicating the error will be returned. The -\fBouroboros_fini\fR() function has no return value. - -.SH ERRORS - -\fBouroboros_init\fR() can return the following errors: - -.B -EIRMD -Failed to contact an IRMd instance. - -.B -ENOMEM -Insufficient system resources to intialize the application. - -.SH ATTRIBUTES - -For an explanation of the terms used in this section, see -\fBattributes\fR(7). - -.TS -box, tab(&); -LB|LB|LB -L|L|L. -Interface & Attribute & Value -_ -\fBouroboros_init\fR() & Thread safety & MT-Safe -_ -\fBouroboros_fini\fR() & Thread safety & MT-Safe -.TE - -.SH COLOPHON -This page is part of the Ouroboros project, found at -https://bitbucket.org/ouroboros-rina/ouroboros diff --git a/include/ouroboros/dev.h b/include/ouroboros/dev.h index 0441179d..f64221d8 100644 --- a/include/ouroboros/dev.h +++ b/include/ouroboros/dev.h @@ -31,11 +31,6 @@ __BEGIN_DECLS -/* These calls should be removed once we write the ouroboros OS. */ -int ouroboros_init(const char * ap_name); - -void ouroboros_fini(void); - /* Returns flow descriptor, qs updates to supplied QoS. */ int flow_alloc(const char * dst_name, qosspec_t * qs, diff --git a/include/ouroboros/wrap/CMakeLists.txt b/include/ouroboros/wrap/CMakeLists.txt index 4ec42b9a..4ffc54a8 100644 --- a/include/ouroboros/wrap/CMakeLists.txt +++ b/include/ouroboros/wrap/CMakeLists.txt @@ -32,7 +32,8 @@ else () TYPE MODULE) endif() - swig_link_libraries(ouroboros ${PYTHON_LIBRARIES} ouroboros) + swig_link_libraries(ouroboros ${PYTHON_LIBRARIES} ouroboros-common + ouroboros-dev ouroboros-irm) # Installation directives if (CMAKE_INSTALL_PREFIX STREQUAL "") diff --git a/include/ouroboros/wrap/ouroboros.i b/include/ouroboros/wrap/ouroboros.i index db5e09f2..42d78c1c 100644 --- a/include/ouroboros/wrap/ouroboros.i +++ b/include/ouroboros/wrap/ouroboros.i @@ -3,7 +3,8 @@ * * SWIG wrapper file * - * Sander Vrijders <[email protected]> + * 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 diff --git a/ouroboros-dev.pc.in b/ouroboros-dev.pc.in new file mode 100644 index 00000000..8895a76b --- /dev/null +++ b/ouroboros-dev.pc.in @@ -0,0 +1,12 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/usr/lib +includedir=${prefix}/usr/include + +Name: ouroboros-dev +Description: Development library for Ouroboros +URL: @PACKAGE_URL@ +Version: @PACKAGE_VERSION@ + +Libs: -L${libdir} -louroboros-dev +Cflags: -I${includedir} diff --git a/ouroboros.pc.in b/ouroboros-irm.pc.in index 44da4b91..5e5841c2 100644 --- a/ouroboros.pc.in +++ b/ouroboros-irm.pc.in @@ -3,10 +3,10 @@ exec_prefix=${prefix} libdir=${exec_prefix}/usr/lib includedir=${prefix}/usr/include -Name: @PROJECT_NAME@ -Description: @PACKAGE_DESCRIPTION@ +Name: ouroboros-irm +Description: Management library for Ouroboros URL: @PACKAGE_URL@ Version: @PACKAGE_VERSION@ -Libs: -L${libdir} -louroboros +Libs: -L${libdir} -louroboros-irm Cflags: -I${includedir} diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c index 9f4d9eea..44dbb52a 100644 --- a/src/ipcpd/ipcp.c +++ b/src/ipcpd/ipcp.c @@ -544,7 +544,6 @@ static int parse_args(int argc, int ipcp_init(int argc, char ** argv, - enum ipcp_type type, struct ipcp_ops * ops) { bool log; @@ -558,18 +557,6 @@ int ipcp_init(int argc, log_init(log); - if (type == IPCP_NORMAL) { - if (ouroboros_init(argv[0])) { - log_err("Failed to init normal IPCPI."); - return -1; - } - } else { - if (ouroboros_init(NULL)) { - log_err("Failed to init shim IPCPI."); - return -1; - } - } - ipcpi.irmd_fd = -1; ipcpi.state = IPCP_NULL; @@ -652,8 +639,6 @@ int ipcp_init(int argc, fail_serv_sock: free(ipcpi.sock_path); fail_sock_path: - ouroboros_fini(); - return ret; } @@ -736,8 +721,6 @@ void ipcp_fini() log_info("IPCP %d out.", getpid()); log_fini(); - - ouroboros_fini(); } void ipcp_set_state(enum ipcp_state state) diff --git a/src/ipcpd/ipcp.h b/src/ipcpd/ipcp.h index d47d224b..62fb310a 100644 --- a/src/ipcpd/ipcp.h +++ b/src/ipcpd/ipcp.h @@ -109,7 +109,6 @@ struct ipcp { int ipcp_init(int argc, char ** argv, - enum ipcp_type type, struct ipcp_ops * ops); int ipcp_boot(void); diff --git a/src/ipcpd/local/CMakeLists.txt b/src/ipcpd/local/CMakeLists.txt index 925092bd..788c1139 100644 --- a/src/ipcpd/local/CMakeLists.txt +++ b/src/ipcpd/local/CMakeLists.txt @@ -19,7 +19,7 @@ set(SHIM_LOCAL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/main.c) add_executable(ipcpd-local ${SHIM_LOCAL_SOURCES} ${IPCP_SOURCES}) -target_link_libraries(ipcpd-local LINK_PUBLIC ouroboros) +target_link_libraries(ipcpd-local LINK_PUBLIC ouroboros-common ouroboros-dev) include(AddCompileFlags) if (CMAKE_BUILD_TYPE MATCHES Debug) diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c index b98e144c..684949d9 100644 --- a/src/ipcpd/local/main.c +++ b/src/ipcpd/local/main.c @@ -326,7 +326,7 @@ static struct ipcp_ops local_ops = { int main(int argc, char * argv[]) { - if (ipcp_init(argc, argv, THIS_TYPE, &local_ops) < 0) { + if (ipcp_init(argc, argv, &local_ops) < 0) { ipcp_create_r(getpid(), -1); exit(EXIT_FAILURE); } diff --git a/src/ipcpd/normal/CMakeLists.txt b/src/ipcpd/normal/CMakeLists.txt index 8dbe4820..dd67ce05 100644 --- a/src/ipcpd/normal/CMakeLists.txt +++ b/src/ipcpd/normal/CMakeLists.txt @@ -50,7 +50,7 @@ set(SOURCE_FILES add_executable(ipcpd-normal ${SOURCE_FILES} ${IPCP_SOURCES} ${FLOW_ALLOC_SRCS} ${LS_PROTO_SRCS} ${KAD_PROTO_SRCS} ${ENROLL_PROTO_SRCS}) -target_link_libraries(ipcpd-normal LINK_PUBLIC ouroboros) +target_link_libraries(ipcpd-normal LINK_PUBLIC ouroboros-dev ouroboros-irm) include(AddCompileFlags) if (CMAKE_BUILD_TYPE MATCHES Debug) diff --git a/src/ipcpd/normal/dht.c b/src/ipcpd/normal/dht.c index 7ca555ab..161bf292 100644 --- a/src/ipcpd/normal/dht.c +++ b/src/ipcpd/normal/dht.c @@ -1420,7 +1420,9 @@ static int send_msg(struct dht * dht, kad_msg_t * msg, uint64_t addr) { +#ifndef __DHT_TEST__ struct shm_du_buff * sdb; +#endif size_t len; int retr = 0; @@ -1451,12 +1453,11 @@ static int send_msg(struct dht * dht, if (len == 0) goto fail_msg; +#ifndef __DHT_TEST__ if (ipcp_sdb_reserve(&sdb, len)) goto fail_msg; - kad_msg__pack(msg, shm_du_buff_head(sdb)); -#ifndef __DHT_TEST__ while (retr >= 0) { if (dt_write_sdu(addr, QOS_CUBE_BE, dht->fd, sdb)) retr--; @@ -1470,7 +1471,6 @@ static int send_msg(struct dht * dht, #else (void) addr; (void) retr; - ipcp_sdb_release(sdb); #endif /* __DHT_TEST__ */ if (msg->code < KAD_STORE && dht_get_state(dht) != DHT_SHUTDOWN) @@ -2363,8 +2363,9 @@ static void * dht_handle_sdu(void * o) i = shm_du_buff_tail(cmd->sdb) - shm_du_buff_head(cmd->sdb); msg = kad_msg__unpack(NULL, i, shm_du_buff_head(cmd->sdb)); - +#ifndef __DHT_TEST__ ipcp_sdb_release(cmd->sdb); +#endif free(cmd); if (msg == NULL) { diff --git a/src/ipcpd/normal/main.c b/src/ipcpd/normal/main.c index 8c16fd22..719be77c 100644 --- a/src/ipcpd/normal/main.c +++ b/src/ipcpd/normal/main.c @@ -299,7 +299,7 @@ static struct ipcp_ops normal_ops = { int main(int argc, char * argv[]) { - if (ipcp_init(argc, argv, THIS_TYPE, &normal_ops) < 0) { + if (ipcp_init(argc, argv, &normal_ops) < 0) { log_err("Failed to init IPCP."); goto fail_init; } diff --git a/src/ipcpd/normal/pol/tests/CMakeLists.txt b/src/ipcpd/normal/pol/tests/CMakeLists.txt index 55ca425a..d0652533 100644 --- a/src/ipcpd/normal/pol/tests/CMakeLists.txt +++ b/src/ipcpd/normal/pol/tests/CMakeLists.txt @@ -21,7 +21,7 @@ create_test_sourcelist(${PARENT_DIR}_tests test_suite.c ) add_executable(${PARENT_DIR}_test EXCLUDE_FROM_ALL ${${PARENT_DIR}_tests}) -target_link_libraries(${PARENT_DIR}_test ouroboros) +target_link_libraries(${PARENT_DIR}_test ouroboros-common) add_dependencies(check ${PARENT_DIR}_test) diff --git a/src/ipcpd/normal/tests/CMakeLists.txt b/src/ipcpd/normal/tests/CMakeLists.txt index d975caf6..be92888f 100644 --- a/src/ipcpd/normal/tests/CMakeLists.txt +++ b/src/ipcpd/normal/tests/CMakeLists.txt @@ -24,7 +24,7 @@ set_source_files_properties(${KAD_PROTO_SRCS} PROPERTIES GENERATED TRUE) add_executable(${PARENT_DIR}_test EXCLUDE_FROM_ALL ${${PARENT_DIR}_tests} ${KAD_PROTO_SRCS}) -target_link_libraries(${PARENT_DIR}_test ouroboros) +target_link_libraries(${PARENT_DIR}_test ouroboros-common) add_dependencies(check ${PARENT_DIR}_test) diff --git a/src/ipcpd/shim-eth-llc/CMakeLists.txt b/src/ipcpd/shim-eth-llc/CMakeLists.txt index e10a715f..600340b7 100644 --- a/src/ipcpd/shim-eth-llc/CMakeLists.txt +++ b/src/ipcpd/shim-eth-llc/CMakeLists.txt @@ -91,8 +91,8 @@ if (HAVE_LLC) ${NETMAP_C_INCLUDE_DIR}) endif () - target_link_libraries(ipcpd-shim-eth-llc LINK_PUBLIC ouroboros - ${PROTOBUF_C_LIBRARY}) + target_link_libraries(ipcpd-shim-eth-llc LINK_PUBLIC ouroboros-common + ouroboros-dev ${PROTOBUF_C_LIBRARY}) include(AddCompileFlags) if (CMAKE_BUILD_TYPE MATCHES Debug) diff --git a/src/ipcpd/shim-eth-llc/main.c b/src/ipcpd/shim-eth-llc/main.c index 52b111a5..e735b651 100644 --- a/src/ipcpd/shim-eth-llc/main.c +++ b/src/ipcpd/shim-eth-llc/main.c @@ -1342,7 +1342,7 @@ static struct ipcp_ops eth_llc_ops = { int main(int argc, char * argv[]) { - if (ipcp_init(argc, argv, THIS_TYPE, ð_llc_ops) < 0) + if (ipcp_init(argc, argv, ð_llc_ops) < 0) goto fail_init; if (eth_llc_data_init() < 0) { diff --git a/src/ipcpd/shim-udp/CMakeLists.txt b/src/ipcpd/shim-udp/CMakeLists.txt index fb57778e..89a446a7 100644 --- a/src/ipcpd/shim-udp/CMakeLists.txt +++ b/src/ipcpd/shim-udp/CMakeLists.txt @@ -23,7 +23,7 @@ set(SHIM_UDP_SOURCES add_executable(ipcpd-shim-udp ${SHIM_UDP_SOURCES} ${IPCP_SOURCES} ${SHIM_UDP_PROTO_SRCS}) -target_link_libraries(ipcpd-shim-udp LINK_PUBLIC ouroboros +target_link_libraries(ipcpd-shim-udp LINK_PUBLIC ouroboros-common ouroboros-dev ${PROTOBUF_C_LIBRARY}) # Find the nsupdate executable diff --git a/src/ipcpd/shim-udp/main.c b/src/ipcpd/shim-udp/main.c index d393dc4b..f8248f86 100644 --- a/src/ipcpd/shim-udp/main.c +++ b/src/ipcpd/shim-udp/main.c @@ -1113,7 +1113,7 @@ static struct ipcp_ops udp_ops = { int main(int argc, char * argv[]) { - if (ipcp_init(argc, argv, THIS_TYPE, &udp_ops) < 0) { + if (ipcp_init(argc, argv, &udp_ops) < 0) { ipcp_create_r(getpid(), -1); exit(EXIT_FAILURE); } diff --git a/src/irmd/CMakeLists.txt b/src/irmd/CMakeLists.txt index de883d63..55288263 100644 --- a/src/irmd/CMakeLists.txt +++ b/src/irmd/CMakeLists.txt @@ -41,7 +41,7 @@ set(SOURCE_FILES add_executable (irmd ${SOURCE_FILES}) -target_link_libraries (irmd LINK_PUBLIC ouroboros) +target_link_libraries (irmd LINK_PUBLIC ouroboros-common) include(AddCompileFlags) if (CMAKE_BUILD_TYPE MATCHES Debug) diff --git a/src/irmd/main.c b/src/irmd/main.c index 99a34af2..80417806 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -1120,7 +1120,6 @@ static int flow_accept(pid_t api, e = api_table_get(&irmd.api_table, api); if (e == NULL) { - /* Can only happen if server called ouroboros_init(NULL); */ pthread_rwlock_unlock(&irmd.reg_lock); log_err("Unknown instance %d calling accept.", api); return -EINVAL; diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 00670f65..ba670acf 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -73,7 +73,7 @@ if (LIBGCRYPT_LIBRARIES) string(REGEX REPLACE "^#define GCRYPT_VERSION \"(.*)\".*$" "\\1" GCVER "${GCSTR}") if (NOT GCVER VERSION_LESS "1.7.0") - set (DISABLE_LIBGCRYPT FALSE CACHE BOOL "Disable libgcrypt support") + set(DISABLE_LIBGCRYPT FALSE CACHE BOOL "Disable libgcrypt support") if (NOT DISABLE_LIBGCRYPT) message(STATUS "libgcrypt support enabled") set(HAVE_LIBGCRYPT TRUE CACHE INTERNAL "") @@ -94,7 +94,7 @@ endif () find_package(OpenSSL QUIET) if (OPENSSL_FOUND) - set (DISABLE_OPENSSL FALSE CACHE BOOL "Disable OpenSSL support") + set(DISABLE_OPENSSL FALSE CACHE BOOL "Disable OpenSSL support") if (NOT DISABLE_OPENSSL) message(STATUS "OpenSSL support enabled") set(HAVE_OPENSSL TRUE) @@ -104,7 +104,7 @@ if (OPENSSL_FOUND) endif () if (NOT HAVE_OPENSSL) - set (OPENSSL_INCLUDE_DIR "") + set(OPENSSL_INCLUDE_DIR "") endif () if (APPLE OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") @@ -129,12 +129,12 @@ mark_as_advanced(LIBRT_LIBRARIES LIBPTHREAD_LIBRARIES LIBGCRYPT_LIBRARIES OPENSSL_LIBRARIES SYS_RND_INCLUDE_DIR LIBGCRYPT_INCLUDE_DIR SYS_RND_HDR) -math(EXPR SHM_BUFFER_EXPR "1 << 20") +math(EXPR SHM_BUFFER_EXPR "1 << 17") set(SHM_BUFFER_SIZE ${SHM_BUFFER_EXPR} CACHE STRING "Number of blocks in SDU buffer, must be a power of 2") -set(SYS_MAX_FLOWS 4096 CACHE STRING +set(SYS_MAX_FLOWS 10240 CACHE STRING "Maximum number of total flows for this system") -set(AP_MAX_FLOWS 1024 CACHE STRING +set(AP_MAX_FLOWS 4096 CACHE STRING "Maximum number of flows in an application") set(AP_RES_FDS 64 CACHE STRING "Number of reserved flow descriptors per application") @@ -148,7 +148,7 @@ if (NOT APPLE) set(PTHREAD_COND_CLOCK "CLOCK_MONOTONIC" CACHE STRING "Clock to use for condition variable timing") else () - set (PTHREAD_COND_CLOCK "CLOCK_REALTIME" CACHE INTERNAL + set(PTHREAD_COND_CLOCK "CLOCK_REALTIME" CACHE INTERNAL "Clock to use for condition variable timing") endif () set(SOCKET_TIMEOUT 1000 CACHE STRING @@ -170,17 +170,24 @@ set(SHM_RDRB_MULTI_BLOCK true CACHE BOOL set(SHM_RBUFF_LOCKLESS 0 CACHE BOOL "Enable shared memory lockless rbuff support") -set(SOURCE_FILES +set(SOURCE_FILES_DEV # Add source files here - bitmap.c - btree.c cacep.c - crc32.c dev.c frct_pci.c + timerwheel.c + ) + +set(SOURCE_FILES_IRM + irm.c +) + +set(SOURCE_FILES_COMMON + bitmap.c + btree.c + crc32.c hash.c hashtable.c - irm.c list.c lockfile.c logs.c @@ -197,29 +204,48 @@ set(SOURCE_FILES shm_rdrbuff.c sockets.c time_utils.c - timerwheel.c tpm.c utils.c - ) +) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" @ONLY) -add_library(ouroboros SHARED ${SOURCE_FILES} ${IRM_PROTO_SRCS} +add_library(ouroboros-common SHARED ${SOURCE_FILES_COMMON} ${IRM_PROTO_SRCS} + ${IPCP_PROTO_SRCS} ${DIF_CONFIG_PROTO_SRCS}) + +add_library(ouroboros-dev SHARED ${SOURCE_FILES_DEV} ${IRM_PROTO_SRCS} ${IPCP_PROTO_SRCS} ${DIF_CONFIG_PROTO_SRCS} ${CACEP_PROTO_SRCS}) +add_library(ouroboros-irm SHARED ${SOURCE_FILES_IRM} ${IRM_PROTO_SRCS} + ${IPCP_PROTO_SRCS} ${DIF_CONFIG_PROTO_SRCS}) + include(AddCompileFlags) if (CMAKE_BUILD_TYPE MATCHES Debug) - add_compile_flags(ouroboros -DCONFIG_OUROBOROS_DEBUG) + add_compile_flags(ouroboros-common -DCONFIG_OUROBOROS_DEBUG) + add_compile_flags(ouroboros-dev -DCONFIG_OUROBOROS_DEBUG) + add_compile_flags(ouroboros-irm -DCONFIG_OUROBOROS_DEBUG) endif (CMAKE_BUILD_TYPE MATCHES Debug) -target_link_libraries(ouroboros ${LIBRT_LIBRARIES} +target_link_libraries(ouroboros-common ${LIBRT_LIBRARIES} ${LIBPTHREAD_LIBRARIES} ${PROTOBUF_C_LIBRARY} ${OPENSSL_LIBRARIES} ${LIBGCRYPT_LIBRARIES} ${FUSE_LIBRARIES}) -install(TARGETS ouroboros LIBRARY DESTINATION usr/lib) +target_link_libraries(ouroboros-dev ouroboros-common) + +target_link_libraries(ouroboros-irm ouroboros-common) + +install(TARGETS ouroboros-common LIBRARY DESTINATION usr/lib) +install(TARGETS ouroboros-dev LIBRARY DESTINATION usr/lib) +install(TARGETS ouroboros-irm LIBRARY DESTINATION usr/lib) + +target_include_directories(ouroboros-common PUBLIC ${CMAKE_CURRENT_BINARY_DIR} + ${SYS_RND_HDR} ${LIBGCRYPT_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) + +target_include_directories(ouroboros-dev PUBLIC ${CMAKE_CURRENT_BINARY_DIR} + ${SYS_RND_HDR} ${LIBGCRYPT_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) -target_include_directories(ouroboros PUBLIC ${CMAKE_CURRENT_BINARY_DIR} +target_include_directories(ouroboros-irm PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${SYS_RND_HDR} ${LIBGCRYPT_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) add_subdirectory(tests) diff --git a/src/lib/dev.c b/src/lib/dev.c index e6e5b4d4..85dbfb0a 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -595,11 +595,16 @@ static int flow_init(int port_id, return fd; } -int ouroboros_init(const char * ap_name) +__attribute__((constructor)) static void init(int argc, + char ** argv, + char ** envp) { - int i; - int j; - int ret = -ENOMEM; + const char * ap_name = argv[0]; + int i; + int j; + + (void) argc; + (void) envp; assert(ai.ap_name == NULL); @@ -618,10 +623,8 @@ int ouroboros_init(const char * ap_name) goto fail_fqset; ai.rdrb = shm_rdrbuff_open(); - if (ai.rdrb == NULL) { - ret = -EIRMD; + if (ai.rdrb == NULL) goto fail_rdrb; - } ai.flows = malloc(sizeof(*ai.flows) * AP_MAX_FLOWS); if (ai.flows == NULL) @@ -651,10 +654,8 @@ int ouroboros_init(const char * ap_name) if (ai.ap_name == NULL) goto fail_ap_name; - if (api_announce((char *) ai.ap_name)) { - ret = -EIRMD; + if (api_announce((char *) ai.ap_name)) goto fail_announce; - } } for (i = 0; i < SYS_MAX_FLOWS; ++i) { @@ -680,7 +681,7 @@ int ouroboros_init(const char * ap_name) if (ai.tw == NULL) goto fail_timerwheel; - return 0; + return; fail_timerwheel: pthread_rwlock_destroy(&ai.lock); @@ -710,10 +711,12 @@ int ouroboros_init(const char * ap_name) fail_fqueues: bmp_destroy(ai.fds); fail_fds: - return ret; + fprintf(stderr, "FATAL: ouroboros-dev init failed. " + "Make sure an IRMd is running.\n\n"); + exit(EXIT_FAILURE); } -void ouroboros_fini() +__attribute__((destructor)) static void fini(void) { int i = 0; diff --git a/src/lib/tests/CMakeLists.txt b/src/lib/tests/CMakeLists.txt index 0edd4a42..a9ff207e 100644 --- a/src/lib/tests/CMakeLists.txt +++ b/src/lib/tests/CMakeLists.txt @@ -22,7 +22,7 @@ create_test_sourcelist(${PARENT_DIR}_tests test_suite.c add_executable(${PARENT_DIR}_test EXCLUDE_FROM_ALL ${${PARENT_DIR}_tests}) -target_link_libraries(${PARENT_DIR}_test ouroboros) +target_link_libraries(${PARENT_DIR}_test ouroboros-common) add_dependencies(check ${PARENT_DIR}_test) diff --git a/src/tools/cbr/CMakeLists.txt b/src/tools/cbr/CMakeLists.txt index 1883141c..2a64a65b 100644 --- a/src/tools/cbr/CMakeLists.txt +++ b/src/tools/cbr/CMakeLists.txt @@ -11,6 +11,6 @@ set(SOURCE_FILES add_executable(cbr ${SOURCE_FILES}) -target_link_libraries(cbr LINK_PUBLIC ouroboros) +target_link_libraries(cbr LINK_PUBLIC ouroboros-dev) install(TARGETS cbr RUNTIME DESTINATION usr/bin) diff --git a/src/tools/cbr/cbr.c b/src/tools/cbr/cbr.c index 14613198..afa9b535 100644 --- a/src/tools/cbr/cbr.c +++ b/src/tools/cbr/cbr.c @@ -72,7 +72,6 @@ int main(int argc, char ** argv) int ret = 0; char * rem = NULL; char * s_apn = NULL; - char ** argv_dup = argv; bool server = false; @@ -129,18 +128,8 @@ int main(int argc, char ** argv) } if (server) { - if (ouroboros_init(argv_dup[0]) < 0) { - printf("Failed to init.\n"); - exit(EXIT_FAILURE); - } - ret = server_main(); } else { - if (ouroboros_init(NULL) < 0) { - printf("Failed to init.\n"); - exit(EXIT_FAILURE); - } - if (s_apn == NULL) { printf("No server specified.\n"); usage(); @@ -150,7 +139,5 @@ int main(int argc, char ** argv) ret = client_main(s_apn, duration, size, rate, flood, sleep); } - ouroboros_fini(); - return ret; } diff --git a/src/tools/echo/CMakeLists.txt b/src/tools/echo/CMakeLists.txt index 7cecfe50..0cca8466 100644 --- a/src/tools/echo/CMakeLists.txt +++ b/src/tools/echo/CMakeLists.txt @@ -11,6 +11,6 @@ set(SOURCE_FILES add_executable(echo-app ${SOURCE_FILES}) -target_link_libraries(echo-app LINK_PUBLIC ouroboros) +target_link_libraries(echo-app LINK_PUBLIC ouroboros-dev) install(TARGETS echo-app RUNTIME DESTINATION usr/bin) diff --git a/src/tools/echo/echo.c b/src/tools/echo/echo.c index d07d99a3..91ab552d 100644 --- a/src/tools/echo/echo.c +++ b/src/tools/echo/echo.c @@ -41,7 +41,6 @@ static void usage(void) int main(int argc, char ** argv) { int ret = -1; - char ** argv_dup = argv; bool server = false; argc--; @@ -58,21 +57,10 @@ int main(int argc, char ** argv) argv++; } - if (server) { - if (ouroboros_init(argv_dup[0])) { - printf("Failed to init AP.\n"); - return -1; - } + if (server) ret = server_main(); - } else { - if (ouroboros_init(NULL)) { - printf("Failed to init AP.\n"); - return -1; - } + else ret = client_main(); - } - - ouroboros_fini(); return ret; } diff --git a/src/tools/echo/echo_server.c b/src/tools/echo/echo_server.c index 1e57ed60..14e0aa58 100644 --- a/src/tools/echo/echo_server.c +++ b/src/tools/echo/echo_server.c @@ -27,14 +27,6 @@ #include <ouroboros/dev.h> -void shutdown_server(int signo) -{ - (void) signo; - - ouroboros_fini(); - exit(EXIT_SUCCESS); -} - int server_main(void) { int fd = 0; @@ -44,12 +36,6 @@ int server_main(void) printf("Starting the server.\n"); - /* Manual cleanup is required for now */ - if (signal(SIGINT, shutdown_server) == SIG_ERR) { - printf("Can't install signal handler.\n"); - return -1; - } - while (true) { fd = flow_accept(&qs, NULL); if (fd < 0) { diff --git a/src/tools/irm/CMakeLists.txt b/src/tools/irm/CMakeLists.txt index 895bc746..03c1490a 100644 --- a/src/tools/irm/CMakeLists.txt +++ b/src/tools/irm/CMakeLists.txt @@ -29,6 +29,6 @@ set(SOURCE_FILES add_executable(irm ${SOURCE_FILES}) -target_link_libraries(irm LINK_PUBLIC ouroboros) +target_link_libraries(irm LINK_PUBLIC ouroboros-irm) install(TARGETS irm RUNTIME DESTINATION sbin) diff --git a/src/tools/operf/CMakeLists.txt b/src/tools/operf/CMakeLists.txt index 906bab7b..271a992d 100644 --- a/src/tools/operf/CMakeLists.txt +++ b/src/tools/operf/CMakeLists.txt @@ -16,6 +16,6 @@ set(SOURCE_FILES add_executable(operf ${SOURCE_FILES}) -target_link_libraries(operf LINK_PUBLIC ${LIBM_LIBRARIES} ouroboros) +target_link_libraries(operf LINK_PUBLIC ${LIBM_LIBRARIES} ouroboros-dev) install(TARGETS operf RUNTIME DESTINATION usr/bin) diff --git a/src/tools/operf/operf.c b/src/tools/operf/operf.c index 62adcdb7..1c975ae1 100644 --- a/src/tools/operf/operf.c +++ b/src/tools/operf/operf.c @@ -88,7 +88,6 @@ int main(int argc, char ** argv) int ret = -1; char * rem = NULL; bool serv = false; - char ** argv_dup = argv; argc--; argv++; @@ -141,18 +140,8 @@ int main(int argc, char ** argv) } if (serv) { - if (ouroboros_init(argv_dup[0])) { - printf("Failed to init AP.\n"); - exit(EXIT_FAILURE); - } - ret = server_main(); } else { - if (ouroboros_init(NULL)) { - printf("Failed to init AP.\n"); - exit(EXIT_FAILURE); - } - if (client.s_apn == NULL) { printf("No server specified.\n"); usage(); @@ -172,8 +161,6 @@ int main(int argc, char ** argv) ret = client_main(); } - ouroboros_fini(); - if (ret < 0) exit(EXIT_FAILURE); diff --git a/src/tools/oping/CMakeLists.txt b/src/tools/oping/CMakeLists.txt index b95add7e..d3146780 100644 --- a/src/tools/oping/CMakeLists.txt +++ b/src/tools/oping/CMakeLists.txt @@ -18,6 +18,6 @@ set(SOURCE_FILES add_executable(oping ${SOURCE_FILES}) -target_link_libraries(oping LINK_PUBLIC ${LIBM_LIBRARIES} ouroboros) +target_link_libraries(oping LINK_PUBLIC ${LIBM_LIBRARIES} ouroboros-dev) install(TARGETS oping RUNTIME DESTINATION usr/bin) diff --git a/src/tools/oping/oping.c b/src/tools/oping/oping.c index bca4f80b..a76f0fec 100644 --- a/src/tools/oping/oping.c +++ b/src/tools/oping/oping.c @@ -101,7 +101,6 @@ int main(int argc, char ** argv) int ret = -1; char * rem = NULL; bool serv = false; - char ** argv_dup = argv; argc--; argv++; @@ -140,18 +139,8 @@ int main(int argc, char ** argv) } if (serv) { - if (ouroboros_init(argv_dup[0])) { - printf("Failed to init AP.\n"); - exit(EXIT_FAILURE); - } - ret = server_main(); } else { - if (ouroboros_init(NULL)) { - printf("Failed to init AP.\n"); - exit(EXIT_FAILURE); - } - if (client.s_apn == NULL) { printf("No server specified.\n"); usage(); @@ -180,8 +169,6 @@ int main(int argc, char ** argv) ret = client_main(); } - ouroboros_fini(); - if (ret < 0) exit(EXIT_FAILURE); |