diff options
Diffstat (limited to 'cmake/ipcp')
| -rw-r--r-- | cmake/ipcp/broadcast.cmake | 22 | ||||
| -rw-r--r-- | cmake/ipcp/eth.cmake | 40 | ||||
| -rw-r--r-- | cmake/ipcp/ipcp.cmake | 58 | ||||
| -rw-r--r-- | cmake/ipcp/local.cmake | 11 | ||||
| -rw-r--r-- | cmake/ipcp/udp.cmake | 51 | ||||
| -rw-r--r-- | cmake/ipcp/unicast.cmake | 50 |
6 files changed, 232 insertions, 0 deletions
diff --git a/cmake/ipcp/broadcast.cmake b/cmake/ipcp/broadcast.cmake new file mode 100644 index 00000000..20610a25 --- /dev/null +++ b/cmake/ipcp/broadcast.cmake @@ -0,0 +1,22 @@ +set(BROADCAST_SOURCE_DIR "${IPCP_SOURCE_DIR}/broadcast") + +set(IPCP_BROADCAST_TARGET ipcpd-broadcast CACHE INTERNAL "") + +set(IPCP_BROADCAST_MPL 100 CACHE STRING + "Default maximum packet lifetime for the Broadcast IPCP, in ms") + +set(BROADCAST_SOURCES + "${BROADCAST_SOURCE_DIR}/connmgr.c" + "${BROADCAST_SOURCE_DIR}/dt.c" + "${BROADCAST_SOURCE_DIR}/main.c" +) + +add_executable(${IPCP_BROADCAST_TARGET} + ${BROADCAST_SOURCES} + ${IPCP_SOURCES} + ${COMMON_SOURCES} +) + +target_include_directories(${IPCP_BROADCAST_TARGET} PRIVATE ${IPCP_INCLUDE_DIRS}) +target_link_libraries(${IPCP_BROADCAST_TARGET} PUBLIC ouroboros-dev) +install(TARGETS ${IPCP_BROADCAST_TARGET} RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}) diff --git a/cmake/ipcp/eth.cmake b/cmake/ipcp/eth.cmake new file mode 100644 index 00000000..0d37bf9b --- /dev/null +++ b/cmake/ipcp/eth.cmake @@ -0,0 +1,40 @@ +set(ETH_SOURCE_DIR "${IPCP_SOURCE_DIR}/eth") + +set(IPCP_ETH_LLC_TARGET ipcpd-eth-llc CACHE INTERNAL "") +set(IPCP_ETH_DIX_TARGET ipcpd-eth-dix CACHE INTERNAL "") + +set(IPCP_ETH_RD_THR 1 CACHE STRING + "Number of reader threads in Ethernet IPCP") +set(IPCP_ETH_WR_THR 1 CACHE STRING + "Number of writer threads in Ethernet IPCP") +set(IPCP_ETH_QDISC_BYPASS false CACHE BOOL + "Bypass the Qdisc in the kernel when using raw sockets") +set(IPCP_ETH_LO_MTU 1500 CACHE STRING + "Restrict Ethernet MTU over loopback interfaces") +set(IPCP_ETH_MPL 100 CACHE STRING + "Default maximum packet lifetime for the Ethernet IPCPs, in ms") + +if (HAVE_RAW_SOCKETS OR HAVE_BPF OR HAVE_NETMAP) + set(HAVE_ETH TRUE) +else () + unset(HAVE_ETH) +endif () + +if (HAVE_ETH) + add_executable(${IPCP_ETH_LLC_TARGET} "${ETH_SOURCE_DIR}/llc.c" ${IPCP_SOURCES}) + add_executable(${IPCP_ETH_DIX_TARGET} "${ETH_SOURCE_DIR}/dix.c" ${IPCP_SOURCES}) + + foreach(target ${IPCP_ETH_LLC_TARGET} ${IPCP_ETH_DIX_TARGET}) + target_include_directories(${target} PRIVATE ${IPCP_INCLUDE_DIRS}) + if (HAVE_BPF AND NOT APPLE) + target_include_directories(${target} PRIVATE ${BPF_C_INCLUDE_DIR}) + endif () + if (HAVE_NETMAP AND NOT APPLE) + set_target_properties(${target} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -std=c99") + target_include_directories(${target} PRIVATE ${NETMAP_C_INCLUDE_DIR}) + endif () + target_link_libraries(${target} PUBLIC ouroboros-dev) + endforeach() + + install(TARGETS ${IPCP_ETH_LLC_TARGET} ${IPCP_ETH_DIX_TARGET} RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}) +endif () diff --git a/cmake/ipcp/ipcp.cmake b/cmake/ipcp/ipcp.cmake new file mode 100644 index 00000000..5b1eef09 --- /dev/null +++ b/cmake/ipcp/ipcp.cmake @@ -0,0 +1,58 @@ +set(IPCP_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/ipcpd") +set(IPCP_BINARY_DIR "${CMAKE_BINARY_DIR}/src/ipcpd") + +set(CONNMGR_RCV_TIMEOUT 1000 CACHE STRING + "Timeout for the connection manager to wait for OCEP info (ms).") +set(IPCP_DEBUG_LOCAL FALSE CACHE BOOL + "Use PID as address for local debugging") +set(IPCP_QOS_CUBE_BE_PRIO 50 CACHE STRING + "Priority for best effort QoS cube (0-99)") +set(IPCP_QOS_CUBE_VIDEO_PRIO 90 CACHE STRING + "Priority for video QoS cube (0-99)") +set(IPCP_QOS_CUBE_VOICE_PRIO 99 CACHE STRING + "Priority for voice QoS cube (0-99)") +set(IPCP_MIN_THREADS 4 CACHE STRING + "Minimum number of worker threads in the IPCP") +set(IPCP_ADD_THREADS 4 CACHE STRING + "Number of extra threads to start when an IPCP faces thread starvation") +set(IPCP_SCHED_THR_MUL 2 CACHE STRING + "Number of scheduler threads per QoS cube") +set(DISABLE_CORE_LOCK TRUE CACHE BOOL + "Disable locking performance threads to a core") + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(IPCP_LINUX_TIMERSLACK_NS 1000 CACHE STRING + "Slack value for high resolution timers on Linux systems.") +endif () + +if ((IPCP_QOS_CUBE_BE_PRIO LESS 0) OR (IPCP_QOS_CUBE_BE_PRIO GREATER 99)) + message(FATAL_ERROR "Invalid priority for best effort QoS cube") +endif () + +if ((IPCP_QOS_CUBE_VIDEO_PRIO LESS 0) OR (IPCP_QOS_CUBE_VIDEO_PRIO GREATER 99)) + message(FATAL_ERROR "Invalid priority for video QoS cube") +endif () + +if ((IPCP_QOS_CUBE_VOICE_PRIO LESS 0) OR (IPCP_QOS_CUBE_VOICE_PRIO GREATER 99)) + message(FATAL_ERROR "Invalid priority for voice QoS cube") +endif () + +if ((DHT_ENROLL_SLACK LESS 0) OR (DHT_ENROLL_SLACK GREATER 999)) + message(FATAL_ERROR "Invalid DHT slack value") +endif () + +set(IPCP_SOURCES + "${IPCP_SOURCE_DIR}/ipcp.c" + "${IPCP_SOURCE_DIR}/shim-data.c" +) + +set(COMMON_SOURCES + "${IPCP_SOURCE_DIR}/common/enroll.c" +) + +set(IPCP_INCLUDE_DIRS + ${IPCP_SOURCE_DIR} + ${IPCP_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_BINARY_DIR}/include +) diff --git a/cmake/ipcp/local.cmake b/cmake/ipcp/local.cmake new file mode 100644 index 00000000..9e320aad --- /dev/null +++ b/cmake/ipcp/local.cmake @@ -0,0 +1,11 @@ +set(LOCAL_SOURCE_DIR "${IPCP_SOURCE_DIR}/local") + +set(IPCP_LOCAL_TARGET ipcpd-local CACHE INTERNAL "") + +set(IPCP_LOCAL_MPL 100 CACHE STRING + "Default maximum packet lifetime for the Local IPCP, in ms") + +add_executable(${IPCP_LOCAL_TARGET} "${LOCAL_SOURCE_DIR}/main.c" ${IPCP_SOURCES}) +target_include_directories(${IPCP_LOCAL_TARGET} PRIVATE ${IPCP_INCLUDE_DIRS}) +target_link_libraries(${IPCP_LOCAL_TARGET} PUBLIC ouroboros-dev) +install(TARGETS ${IPCP_LOCAL_TARGET} RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}) diff --git a/cmake/ipcp/udp.cmake b/cmake/ipcp/udp.cmake new file mode 100644 index 00000000..7195dfa1 --- /dev/null +++ b/cmake/ipcp/udp.cmake @@ -0,0 +1,51 @@ +set(UDP_SOURCE_DIR "${IPCP_SOURCE_DIR}/udp") + +set(IPCP_UDP4_TARGET ipcpd-udp4 CACHE INTERNAL "") +set(IPCP_UDP6_TARGET ipcpd-udp6 CACHE INTERNAL "") + +set(IPCP_UDP_RD_THR 3 CACHE STRING + "Number of reader threads in UDP IPCPs") +set(IPCP_UDP_WR_THR 3 CACHE STRING + "Number of writer threads in UDP IPCPs") +set(IPCP_UDP_MPL 5000 CACHE STRING + "Default maximum packet lifetime for the UDP IPCPs, in ms") + +# Find nsupdate and nslookup for DDNS support +find_program(NSUPDATE_EXECUTABLE + NAMES nsupdate + DOC "The nsupdate tool that enables DDNS") + +find_program(NSLOOKUP_EXECUTABLE + NAMES nslookup + DOC "The nslookup tool that resolves DNS names") + +mark_as_advanced(NSLOOKUP_EXECUTABLE NSUPDATE_EXECUTABLE) + +if (NSLOOKUP_EXECUTABLE AND NSUPDATE_EXECUTABLE) + set(DISABLE_DDNS FALSE CACHE BOOL "Disable DDNS support") + if (NOT DISABLE_DDNS) + message(STATUS "DDNS support enabled") + set(HAVE_DDNS TRUE CACHE INTERNAL "") + else () + message(STATUS "DDNS support disabled by user") + unset(HAVE_DDNS CACHE) + endif () +else () + if (NSLOOKUP_EXECUTABLE) + message(STATUS "Install nsupdate to enable DDNS support") + elseif (NSUPDATE_EXECUTABLE) + message(STATUS "Install nslookup to enable DDNS support") + else () + message(STATUS "Install nslookup and nsupdate to enable DDNS support") + endif () +endif () + +add_executable(${IPCP_UDP4_TARGET} "${UDP_SOURCE_DIR}/udp4.c" ${IPCP_SOURCES}) +add_executable(${IPCP_UDP6_TARGET} "${UDP_SOURCE_DIR}/udp6.c" ${IPCP_SOURCES}) + +foreach(target ${IPCP_UDP4_TARGET} ${IPCP_UDP6_TARGET}) + target_include_directories(${target} PRIVATE ${IPCP_INCLUDE_DIRS}) + target_link_libraries(${target} PUBLIC ouroboros-dev) +endforeach() + +install(TARGETS ${IPCP_UDP4_TARGET} ${IPCP_UDP6_TARGET} RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}) diff --git a/cmake/ipcp/unicast.cmake b/cmake/ipcp/unicast.cmake new file mode 100644 index 00000000..2a2f7a3f --- /dev/null +++ b/cmake/ipcp/unicast.cmake @@ -0,0 +1,50 @@ +set(UNICAST_SOURCE_DIR "${IPCP_SOURCE_DIR}/unicast") +set(UNICAST_BINARY_DIR "${IPCP_BINARY_DIR}/unicast") + +set(IPCP_UNICAST_TARGET ipcpd-unicast CACHE INTERNAL "") + +set(IPCP_UNICAST_MPL 100 CACHE STRING + "Default maximum packet lifetime for the Unicast IPCP, in ms") +set(PFT_SIZE 256 CACHE STRING + "Prefix forwarding table size for the Unicast IPCP") +set(DEBUG_PROTO_DHT FALSE CACHE BOOL + "Add DHT protocol debug logging") +set(DEBUG_PROTO_LS FALSE CACHE BOOL + "Add link state protocol debug logging") + +# Generate DHT protobuf files +protobuf_generate_c(DHT_PROTO_SRCS DHT_PROTO_HDRS "${UNICAST_SOURCE_DIR}/dir/dht.proto") + +set (UNICAST_SOURCES + "${UNICAST_SOURCE_DIR}/addr-auth.c" + "${UNICAST_SOURCE_DIR}/ca.c" + "${UNICAST_SOURCE_DIR}/connmgr.c" + "${UNICAST_SOURCE_DIR}/dir.c" + "${UNICAST_SOURCE_DIR}/dt.c" + "${UNICAST_SOURCE_DIR}/fa.c" + "${UNICAST_SOURCE_DIR}/main.c" + "${UNICAST_SOURCE_DIR}/pff.c" + "${UNICAST_SOURCE_DIR}/routing.c" + "${UNICAST_SOURCE_DIR}/psched.c" + "${UNICAST_SOURCE_DIR}/addr-auth/flat.c" + "${UNICAST_SOURCE_DIR}/ca/mb-ecn.c" + "${UNICAST_SOURCE_DIR}/ca/nop.c" + "${UNICAST_SOURCE_DIR}/dir/dht.c" + "${UNICAST_SOURCE_DIR}/pff/simple.c" + "${UNICAST_SOURCE_DIR}/pff/alternate.c" + "${UNICAST_SOURCE_DIR}/pff/multipath.c" + "${UNICAST_SOURCE_DIR}/pff/pft.c" + "${UNICAST_SOURCE_DIR}/routing/link-state.c" + "${UNICAST_SOURCE_DIR}/routing/graph.c" +) + +add_executable(${IPCP_UNICAST_TARGET} + ${UNICAST_SOURCES} + ${IPCP_SOURCES} + ${COMMON_SOURCES} + ${DHT_PROTO_SRCS} +) +target_include_directories(${IPCP_UNICAST_TARGET} PRIVATE ${IPCP_INCLUDE_DIRS}) +target_include_directories(${IPCP_UNICAST_TARGET} PRIVATE "${UNICAST_SOURCE_DIR}") +target_link_libraries(${IPCP_UNICAST_TARGET} PUBLIC ouroboros-dev) +install(TARGETS ${IPCP_UNICAST_TARGET} RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}) |
