summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2017-10-12 02:15:39 +0200
committerdimitri staessens <[email protected]>2017-10-14 13:19:10 +0200
commitbedd1d4eadde9ab64f924c69eba716b015599e67 (patch)
treeb521ef89c8752334448bee1582b51dbe97851839
parenta483bc8597e5c19e796dc55c0587f1a045bc7281 (diff)
downloadouroboros-bedd1d4eadde9ab64f924c69eba716b015599e67.tar.gz
ouroboros-bedd1d4eadde9ab64f924c69eba716b015599e67.zip
lib: Deprecate ouroboros_init and ourboros_fini
This commit deprecates ouroboros_init and ouroboros_fini and adds them as a constructor or destructor, causing these function to be run automatically when a program that links to the library calls and exits main(). For this to fully work, the library had to be split so that we can avoid the irmd calling these functions (the IRMd has to create the shm structures on which these calls depend). The library is split in 3 parts: libouroboros-dev, libouroboros-irm and libouroboros-common. The latter is linked to the other two so that including libouroboros-dev or libouroboros-irm will also link libouroboros-common.
-rw-r--r--CMakeLists.txt14
-rw-r--r--CONTRIBUTORS4
-rw-r--r--doc/man/CMakeLists.txt2
-rw-r--r--doc/man/fccntl.32
-rw-r--r--doc/man/flow_alloc.35
-rw-r--r--doc/man/flow_read.32
-rw-r--r--doc/man/fqueue.32
-rw-r--r--doc/man/fset.32
-rw-r--r--doc/man/ouroboros_fini.31
-rw-r--r--doc/man/ouroboros_init.369
-rw-r--r--include/ouroboros/dev.h5
-rw-r--r--include/ouroboros/wrap/CMakeLists.txt3
-rw-r--r--include/ouroboros/wrap/ouroboros.i3
-rw-r--r--ouroboros-dev.pc.in12
-rw-r--r--ouroboros-irm.pc.in (renamed from ouroboros.pc.in)6
-rw-r--r--src/ipcpd/ipcp.c17
-rw-r--r--src/ipcpd/ipcp.h1
-rw-r--r--src/ipcpd/local/CMakeLists.txt2
-rw-r--r--src/ipcpd/local/main.c2
-rw-r--r--src/ipcpd/normal/CMakeLists.txt2
-rw-r--r--src/ipcpd/normal/dht.c9
-rw-r--r--src/ipcpd/normal/main.c2
-rw-r--r--src/ipcpd/normal/pol/tests/CMakeLists.txt2
-rw-r--r--src/ipcpd/normal/tests/CMakeLists.txt2
-rw-r--r--src/ipcpd/shim-eth-llc/CMakeLists.txt4
-rw-r--r--src/ipcpd/shim-eth-llc/main.c2
-rw-r--r--src/ipcpd/shim-udp/CMakeLists.txt2
-rw-r--r--src/ipcpd/shim-udp/main.c2
-rw-r--r--src/irmd/CMakeLists.txt2
-rw-r--r--src/irmd/main.c1
-rw-r--r--src/lib/CMakeLists.txt64
-rw-r--r--src/lib/dev.c29
-rw-r--r--src/lib/tests/CMakeLists.txt2
-rw-r--r--src/tools/cbr/CMakeLists.txt2
-rw-r--r--src/tools/cbr/cbr.c13
-rw-r--r--src/tools/echo/CMakeLists.txt2
-rw-r--r--src/tools/echo/echo.c16
-rw-r--r--src/tools/echo/echo_server.c14
-rw-r--r--src/tools/irm/CMakeLists.txt2
-rw-r--r--src/tools/operf/CMakeLists.txt2
-rw-r--r--src/tools/operf/operf.c13
-rw-r--r--src/tools/oping/CMakeLists.txt2
-rw-r--r--src/tools/oping/oping.c13
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, &eth_llc_ops) < 0)
+ if (ipcp_init(argc, argv, &eth_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 6ab5ebc8..c1b8f354 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
@@ -168,17 +168,24 @@ set(SHM_RDRB_BLOCK_SIZE "sysconf(_SC_PAGESIZE)" CACHE STRING
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
@@ -195,29 +202,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 9cb6f2ed..99d3ecec 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);