summaryrefslogtreecommitdiff
path: root/src/ipcpd/eth/CMakeLists.txt
diff options
context:
space:
mode:
authorDimitri Staessens <[email protected]>2018-03-10 10:09:08 +0100
committerSander Vrijders <[email protected]>2018-03-10 13:16:06 +0100
commit2936dd5e4232f7d7d9c720d89bb4a696abcd1830 (patch)
treee4d755789542da32c1720636bc1065a3a6b62c74 /src/ipcpd/eth/CMakeLists.txt
parent9b6fdc1c2abe85008610063d800edf80e5011a4d (diff)
downloadouroboros-2936dd5e4232f7d7d9c720d89bb4a696abcd1830.tar.gz
ouroboros-2936dd5e4232f7d7d9c720d89bb4a696abcd1830.zip
ipcpd: Add IPCP over DIX Ethernet
This adds an IPC Process that uses DIX Ethernet with an Ethertype that is configurable at bootstrap. This allows parallel DIX layers over the same Ethernet network with different Ethertypes (and one LLC layer). It allows jumbo frames in the future, and should avoid the problems we have with some routers not handling LLC traffic very well. The destination endpoint ID is sent as a 16 bit integer, so the maximum payload is 1498 bytes in standard Ethernet, and 8998 bytes when Jumbo frames are used. The implementation is very similar to the Ethernet LLC IPCP, so it is implemented using preprocessor macros in the single source instead of duplicating code. Signed-off-by: Dimitri Staessens <[email protected]> Signed-off-by: Sander Vrijders <[email protected]>
Diffstat (limited to 'src/ipcpd/eth/CMakeLists.txt')
-rw-r--r--src/ipcpd/eth/CMakeLists.txt119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/ipcpd/eth/CMakeLists.txt b/src/ipcpd/eth/CMakeLists.txt
new file mode 100644
index 00000000..6b8d1a77
--- /dev/null
+++ b/src/ipcpd/eth/CMakeLists.txt
@@ -0,0 +1,119 @@
+get_filename_component(CURRENT_SOURCE_PARENT_DIR
+ ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)
+get_filename_component(CURRENT_BINARY_PARENT_DIR
+ ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY)
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+include_directories(${CURRENT_SOURCE_PARENT_DIR})
+include_directories(${CURRENT_BINARY_PARENT_DIR})
+
+include_directories(${CMAKE_SOURCE_DIR}/include)
+include_directories(${CMAKE_BINARY_DIR}/include)
+
+find_path(NETMAP_C_INCLUDE_DIR
+ net/netmap_user.h
+ HINTS /usr/include /usr/local/include
+)
+
+mark_as_advanced(NETMAP_C_INCLUDE_DIR)
+
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(DISABLE_RAW_SOCKETS FALSE CACHE BOOL
+ "Disable raw socket support for Ethernet IPCPs")
+ if (NOT DISABLE_RAW_SOCKETS)
+ message(STATUS "Raw socket support for Ethernet IPCPs enabled")
+ set(HAVE_RAW_SOCKETS TRUE PARENT_SCOPE)
+ set(HAVE_ETH TRUE)
+ else ()
+ message(STATUS "Raw socket support for Ethernet IPCPs disabled by user")
+ unset(HAVE_RAW_SOCKETS)
+ unset(HAVE_ETH)
+ endif ()
+endif ()
+
+if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ find_path(BPF_C_INCLUDE_DIR
+ net/bpf.h
+ HINTS /usr/include /usr/local/include
+ )
+
+ mark_as_advanced(BPF_C_INCLUDE_DIR)
+
+ if (BPF_C_INCLUDE_DIR)
+ set(DISABLE_BPF FALSE CACHE BOOL
+ "Disable Berkeley Packet Filter support for Ethernet IPCPs")
+ if (NOT DISABLE_BPF)
+ message(STATUS "Berkeley Packet Filter support "
+ "for Ethernet IPCPs enabled")
+ set(HAVE_BPF TRUE PARENT_SCOPE)
+ set(HAVE_ETH TRUE)
+ else ()
+ message(STATUS "Berkeley Packet Filter support "
+ "for Ethernet IPCPs disabled by user")
+ unset(HAVE_BPF)
+ unset(HAVE_ETH)
+ endif ()
+ endif ()
+endif ()
+
+if (NETMAP_C_INCLUDE_DIR)
+ set(DISABLE_NETMAP FALSE CACHE BOOL
+ "Disable netmap support for ETH IPCPs")
+ if (NOT DISABLE_NETMAP)
+ message(STATUS "Netmap support for Ethernet IPCPs enabled")
+ set(HAVE_NETMAP TRUE PARENT_SCOPE)
+ test_and_set_c_compiler_flag_global(-std=c99)
+ set(HAVE_ETH TRUE)
+ else ()
+ message(STATUS "Netmap support for Ethernet IPCPs disabled by user")
+ unset(HAVE_NETMAP)
+ unset(HAVE_ETH)
+ unset(IPCP_ETH_TARGET CACHE)
+ endif ()
+endif ()
+
+if (HAVE_ETH)
+ message(STATUS "Supported raw packet API found, building eth-llc and eth-dix")
+
+ set(ETH_LLC_SOURCES
+ # Add source files here
+ ${CMAKE_CURRENT_SOURCE_DIR}/llc.c
+ )
+
+ set(ETH_DIX_SOURCES
+ # Add source files here
+ ${CMAKE_CURRENT_SOURCE_DIR}/dix.c
+ )
+
+ set(IPCP_ETH_LLC_TARGET ipcpd-eth-llc CACHE INTERNAL "")
+ set(IPCP_ETH_DIX_TARGET ipcpd-eth-dix CACHE INTERNAL "")
+
+ add_executable(ipcpd-eth-llc ${ETH_LLC_SOURCES} ${IPCP_SOURCES})
+ add_executable(ipcpd-eth-dix ${ETH_DIX_SOURCES} ${IPCP_SOURCES})
+
+ if (HAVE_BPF AND NOT APPLE)
+ target_include_directories(ipcpd-eth-llc PUBLIC ${BPF_C_INCLUDE_DIR})
+ target_include_directories(ipcpd-eth-dix PUBLIC ${BPF_C_INCLUDE_DIR})
+ endif ()
+
+ if (HAVE_NETMAP AND NOT APPLE)
+ target_include_directories(ipcpd-eth-llc PUBLIC
+ ${NETMAP_C_INCLUDE_DIR})
+ target_include_directories(ipcpd-eth-dix PUBLIC
+ ${NETMAP_C_INCLUDE_DIR})
+ endif ()
+
+ target_link_libraries(ipcpd-eth-llc LINK_PUBLIC ouroboros-dev)
+ target_link_libraries(ipcpd-eth-dix LINK_PUBLIC ouroboros-dev)
+
+ include(AddCompileFlags)
+ if (CMAKE_BUILD_TYPE MATCHES "Debug*")
+ add_compile_flags(ipcpd-eth-llc -DCONFIG_OUROBOROS_DEBUG)
+ add_compile_flags(ipcpd-eth-dix -DCONFIG_OUROBOROS_DEBUG)
+ endif ()
+
+ install(TARGETS ipcpd-eth-llc ipcpd-eth-dix RUNTIME DESTINATION
+ ${CMAKE_INSTALL_SBINDIR})
+endif ()