From 7ae3d85c7249b9e8846bc87fdf44e8621a370565 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Thu, 17 Aug 2017 14:02:34 +0200 Subject: ipcpd: Support Berkeley Packet Filter in LLC shim This adds support reading Ethernet frames using the Berkeley Packet Filter (BPF). Ouroboros now fully runs on OS X Sierra. --- src/ipcpd/shim-eth-llc/CMakeLists.txt | 63 ++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 20 deletions(-) (limited to 'src/ipcpd/shim-eth-llc/CMakeLists.txt') diff --git a/src/ipcpd/shim-eth-llc/CMakeLists.txt b/src/ipcpd/shim-eth-llc/CMakeLists.txt index 12bfb42e..21003cf0 100644 --- a/src/ipcpd/shim-eth-llc/CMakeLists.txt +++ b/src/ipcpd/shim-eth-llc/CMakeLists.txt @@ -17,31 +17,54 @@ find_path(NETMAP_C_INCLUDE_DIR HINTS /usr/include /usr/local/include ) -protobuf_generate_c(SHIM_ETH_LLC_PROTO_SRCS SHIM_ETH_LLC_PROTO_HDRS - shim_eth_llc_messages.proto) - -set(IPCP_SHIM_ETH_LLC_TARGET ipcpd-shim-eth-llc - CACHE STRING "IPCP_SHIM_ETH_LLC_TARGET") - -set(SHIM_ETH_LLC_SOURCES - # Add source files here - ${CMAKE_CURRENT_SOURCE_DIR}/main.c) +find_path(BPF_C_INCLUDE_DIR + net/bpf.h + HINTS /usr/include /usr/local/include + ) -add_executable(ipcpd-shim-eth-llc ${SHIM_ETH_LLC_SOURCES} ${IPCP_SOURCES} - ${SHIM_ETH_LLC_PROTO_SRCS}) -target_link_libraries(ipcpd-shim-eth-llc LINK_PUBLIC ouroboros - ${PROTOBUF_C_LIBRARY}) +if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" AND + NOT BPF_C_INCLUDE_DIR STREQUAL "BPF_C_INCLUDE_DIR-NOTFOUND") + message(STATUS "Found Berkeley Packet Filter headers in ${BPF_C_INCLUDE_DIR}") + set(HAVE_BPF "1" CACHE STRING "Have Berkeley Packet Filter") +endif () -if (NOT ${NETMAP_C_INCLUDE_DIR} STREQUAL "NETMAP_C_INCLUDE_DIR-NOTFOUND") +if (NOT NETMAP_C_INCLUDE_DIR STREQUAL "NETMAP_C_INCLUDE_DIR-NOTFOUND") message(STATUS "Found netmap headers in ${NETMAP_C_INCLUDE_DIR}") - include_directories(${NETMAP_C_INCLUDE_DIR}) set(HAVE_NETMAP "1" CACHE STRING "Have netmap") test_and_set_c_compiler_flag_global(-std=c99) endif () -include(AddCompileFlags) -if (CMAKE_BUILD_TYPE MATCHES Debug) - add_compile_flags(ipcpd-shim-eth-llc -DCONFIG_OUROBOROS_DEBUG) -endif (CMAKE_BUILD_TYPE MATCHES Debug) +if (HAVE_NETMAP OR HAVE_BPF OR CMAKE_SYSTEM_NAME STREQUAL "Linux") + message(STATUS "Supported raw Ethernet API found, building shim-eth-llc") + protobuf_generate_c(SHIM_ETH_LLC_PROTO_SRCS SHIM_ETH_LLC_PROTO_HDRS + shim_eth_llc_messages.proto) + + set(SHIM_ETH_LLC_SOURCES + # Add source files here + ${CMAKE_CURRENT_SOURCE_DIR}/main.c + ) + + set(IPCP_SHIM_ETH_LLC_TARGET ipcpd-shim-eth-llc + CACHE STRING "IPCP_SHIM_ETH_LLC_TARGET") + + add_executable(ipcpd-shim-eth-llc ${SHIM_ETH_LLC_SOURCES} ${IPCP_SOURCES} + ${SHIM_ETH_LLC_PROTO_SRCS}) + + if (HAVE_BPF AND NOT APPLE) + target_include_directories(ipcpd-shim-eth-llc PUBLIC ${BPF_C_INCLUDE_DIR}) + endif () + + if (HAVE_NETMAP AND NOT APPLE) + target_include_directories(ipcpd-shim-eth-llc PUBLIC ${NETMAP_C_INCLUDE_DIR}) + endif () -install(TARGETS ipcpd-shim-eth-llc RUNTIME DESTINATION sbin) + target_link_libraries(ipcpd-shim-eth-llc LINK_PUBLIC ouroboros + ${PROTOBUF_C_LIBRARY}) + + include(AddCompileFlags) + if (CMAKE_BUILD_TYPE MATCHES Debug) + add_compile_flags(ipcpd-shim-eth-llc -DCONFIG_OUROBOROS_DEBUG) + endif (CMAKE_BUILD_TYPE MATCHES Debug) + + install(TARGETS ipcpd-shim-eth-llc RUNTIME DESTINATION sbin) +endif () -- cgit v1.2.3