diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fa096b..f7a04de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,245 +1,41 @@ # TBD: license (udpi etc.) -cmake_minimum_required(VERSION 3.13 FATAL_ERROR) - -set(CMAKE_C_COMPILER_NAMES - clang-13 - clang-12 - clang-11 - clang-10 - clang-9 - gcc-10 - gcc-9 - cc -) - project(upf-plugin) -# rm -set(CMAKE_VERBOSE_MAKEFILE ON) - -include(GNUInstallDirs) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" -) - -set (CMAKE_CXX_STANDARD 11) -set (CMAKE_C_STANDARD 11) - -# Check for memfd_create syscall -include(CheckSymbolExists) -CHECK_SYMBOL_EXISTS ( "__NR_memfd_create" "sys/syscall.h" HAVE_MEMFD_CREATE ) -if ( HAVE_MEMFD_CREATE ) - add_definitions ( -DHAVE_MEMFD_CREATE ) -endif() - -if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) - set(UPF_PLUGIN upf-plugin) -endif() - -include (Packager) - -# Dependencies - -# message(STATUS "Looking for hyperscan") -# pkg_check_modules(HS libhs) - -# if(HS_FOUND) -# include_directories(${HS_INCLUDE_DIRS}) -# message(STATUS "Found Hyperscan in ${HYPERSCAN_INCLUDE_DIRS}") -# else() -# message(WARNING "-- Hyperscan not found") -# endif() - -message(STATUS "Looking for Hyperscan") -find_path(HYPERSCAN_INCLUDE_DIR NAMES hs/hs.h) -find_library(HYPERSCAN_LIB1 NAMES hs) -find_library(HYPERSCAN_LIB2 NAMES hs_runtime) -set (HYPERSCAN_LIB ${HYPERSCAN_LIB1} ${HYPERSCAN_LIB2}) -if(HYPERSCAN_INCLUDE_DIR AND HYPERSCAN_LIB) - include_directories(${HYPERSCAN_INCLUDE_DIR}) - message(STATUS "Found Hyperscan in ${HYPERSCAN_INCLUDE_DIR}") -else() - message(WARNING "-- Hyperscan not found") -endif() +cmake_minimum_required(VERSION 3.13 FATAL_ERROR) +include(cmake/misc.cmake) +include(cmake/Packager.cmake) find_package(VPP REQUIRED) -include_directories(${VPP_INCLUDE_DIR}) - -set(UPF_PLUGIN_SOURCES - upf/upf.c - upf/upf_api.c - upf/upf_cli.c - upf/upf_gtpu_encap.c - upf/upf_gtpu_decap.c - upf/upf_flow_node.c - upf/upf_classify.c - upf/upf_adf.c - upf/upf_input.c - upf/upf_forward.c - upf/upf_session_dpo.c - upf/pfcp.c - upf/upf_pfcp.c - upf/upf_pfcp_api.c - upf/upf_pfcp_server.c - upf/upf_pfcp_session_server.c - upf/upf_proxy_accept.c - upf/upf_proxy_input.c - upf/upf_proxy_output.c - upf/upf_tcp_forward.c - upf/upf_proxy.c - upf/upf_app_db.c - upf/upf_ipfilter.c - upf/upf_app_dpo.c - upf/upf_ipfix.c - upf/upf_ipfix_templates.c - upf/upf_tw_timer_1t_3w_1024sl_ov.c - upf/upf_tw_timer_2t_1w_2048sl.c - upf/flowtable_init.c - upf/flowtable.c - upf/unittest.c - - upf/upf_gtpu_encap.c - upf/upf_gtpu_decap.c - upf/upf_flow_node.c - upf/upf_classify.c - upf/upf_proxy_accept.c - upf/upf_proxy_input.c - upf/upf_proxy_output.c - upf/upf_tcp_forward.c - upf/upf_input.c - upf/upf_forward.c - upf/upf_session_dpo.c -) - -set(UPF_PLUGIN_HEADER_FILES - upf/upf.h - upf/pfcp.h - upf/upf_pfcp.h - upf/upf_pfcp_api.h - upf/upf_pfcp_server.h - upf/upf_proxy.h - upf/upf_app_db.h - upf/upf_ipfilter.h - upf/upf_app_dpo.h - upf/upf_app_db.h - upf/flowtable.h - upf/flowtable_tcp.h - upf/upf_ipfix.h - upf/upf_ipfix_templates.h - upf/upf_tw_timer_1t_3w_1024sl_ov.h - upf/upf_tw_timer_2t_1w_2048sl.h - upf/upf_tw_timer_template.h - upf/upf_gtpu_error.def - upf/version.h -) - -set(UPF_API_TEST_SOURCE_FILES - upf/upf_test.c -) - -set(UPF_API_GENERATED_FILES - ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.h - ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api_types.h - ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api_enum.h -) - -set(UPF_VAPI_GENERATED_FILES - ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.vapi.h - ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.vapi.hpp -) - -if (NOT VPP_HOME) - set(VPP_HOME /usr) -endif() - -if (NOT CMAKE_BUILD_TYPE) - set (CMAKE_BUILD_TYPE "Release") -endif (NOT CMAKE_BUILD_TYPE) +# Standard installation directories. +include(GNUInstallDirs) -SET(UPF_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} CACHE STRING "upf_install_prefix") +# Control where libraries and executables are placed during the build. +set(VPP_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}) if (CMAKE_BUILD_TYPE STREQUAL "Release") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wall -march=corei7 -mtune=corei7-avx -O3 -g") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wall -O3 -g") elseif (CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -march=corei7 -mtune=corei7-avx -O0 -g") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g") add_definitions(-DCLIB_DEBUG -DVLIB_BUFFER_TRACE_TRAJECTORY -fPIC -fstack-protector-all) endif() -execute_process( - COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf - ) - -add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.h ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api_types.h ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api_enum.h - COMMAND ${VPP_HOME}/bin/vppapigen ARGS --includedir ${VPP_HOME}/include --input ${CMAKE_CURRENT_SOURCE_DIR}/upf/upf.api --output ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.h --outputdir ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/ - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/upf/upf.api - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.json - COMMAND ${VPP_HOME}/bin/vppapigen ARGS JSON --includedir ${VPP_HOME}/include --input ${CMAKE_CURRENT_SOURCE_DIR}/upf/upf.api --output ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.json --outputdir ${CMAKE_CURRENT_BINARY_DIR}/vapi/ - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.vapi.h - COMMAND python3 ${VPP_HOME}/share/vpp/vapi_c_gen.py ARGS ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.json - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.vapi.hpp - COMMAND python3 ${VPP_HOME}/share/vpp/vapi_cpp_gen.py ARGS ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.json - ) - -include_directories(SYSTEM) -include_directories(${CMAKE_CURRENT_BINARY_DIR}) -include_directories(${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf) - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUPF_VPP_PLUGIN=1") -add_library(upf_plugin SHARED - ${UPF_PLUGIN_SOURCES} - ${UPF_API_GENERATED_FILES} - ${UPF_VAPI_GENERATED_FILES}) -target_link_libraries(upf_plugin ${HYPERSCAN_LIB}) - -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf) -file(COPY ${UPF_PLUGIN_HEADER_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf) -include_directories(${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins) - -# add_library(upf_api_test_plugin SHARED -# ${UPF_API_TEST_SOURCE_FILES} -# ${UPF_API_GENERATED_FILES}) - -set(VPP_INSTALL_PLUGIN ${UPF_INSTALL_PREFIX}/vpp_plugins) -# set(VPP_INSTALL_API_TEST_PLUGIN ${UPF_INSTALL_PREFIX}/vpp_api_test_plugins CACHE STRING "vpp_install_api_test_plugin") - -set_target_properties(upf_plugin - PROPERTIES - LINKER_LANGUAGE C - INSTALL_RPATH ${VPP_INSTALL_PLUGIN} - PREFIX "") -# set_target_properties(upf_api_test_plugin -# PROPERTIES -# LINKER_LANGUAGE C -# PREFIX "") - -install(DIRECTORY - DESTINATION ${VPP_INSTALL_PLUGIN} - COMPONENT ${UPF_PLUGIN}) -install(TARGETS upf_plugin - DESTINATION ${VPP_INSTALL_PLUGIN} - COMPONENT ${UPF_PLUGIN}) - -#install(DIRECTORY -# DESTINATION ${VPP_INSTALL_API_TEST_PLUGIN} -# COMPONENT ${UPF_PLUGIN}) -#install(TARGETS upf_api_test_plugin -# DESTINATION ${VPP_INSTALL_API_TEST_PLUGIN} -# COMPONENT ${UPF_PLUGIN}) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/vpp_plugins/upf/upf.api.json - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/vpp/api/plugins - COMPONENT ${UPF_PLUGIN}-dev) - -install(FILES ${UPF_API_HEADER_FILES} ${UPF_API_GENERATED_FILES} - DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/vpp_plugins/upf - COMPONENT ${UPF_PLUGIN}-dev) - -install(FILES ${UPF_VAPI_GENERATED_FILES} - DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/vapi - COMPONENT ${UPF_PLUGIN}-dev) +add_subdirectory(upf) make_packages() + +############################################################################## +# print configuration +############################################################################## +message(STATUS "Configuration:") +pr("Build type" ${CMAKE_BUILD_TYPE}) +pr("C compiler" "${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION})") +pr("C flags" ${CMAKE_C_FLAGS}${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}}) +pr("Linker flags (apps)" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}) +pr("Linker flags (libs)" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}) +pr("Host processor" ${CMAKE_HOST_SYSTEM_PROCESSOR}) +pr("Target processor" ${CMAKE_SYSTEM_PROCESSOR}) +pr("Prefix path" ${CMAKE_PREFIX_PATH}) +pr("Install prefix" ${CMAKE_INSTALL_PREFIX}) +pr("Library dir" ${VPP_LIBRARY_DIR}) diff --git a/cmake/FindVPP.cmake b/cmake/FindVPP.cmake deleted file mode 100644 index 7d8d16d..0000000 --- a/cmake/FindVPP.cmake +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright (c) 2017-2019 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set(VPP_SEARCH_PATH_LIST - ${VPP_HOME} - $ENV{VPP_HOME} - /usr/local - /opt - /usr -) - -find_path(VPP_INCLUDE_DIR vnet/vnet.h - HINTS ${VPP_SEARCH_PATH_LIST} - PATH_SUFFIXES include - DOC "Find the VPP includes" -) - -find_library(VPP_LIBRARY_MEMORYCLIENT - NAMES vlibmemoryclient - HINTS ${VPP_SEARCH_PATH_LIST} - PATH_SUFFIXES lib lib64 - DOC "Find the Vpp Memoryclient library" -) - -find_library(VPP_LIBRARY_SVM - NAMES svm - HINTS ${VPP_SEARCH_PATH_LIST} - PATH_SUFFIXES lib lib64 - DOC "Find the Vpp svm library" -) - -find_library(VPP_LIBRARY_INFRA - NAMES vppinfra - HINTS ${VPP_SEARCH_PATH_LIST} - PATH_SUFFIXES lib lib64 - DOC "Find the Vpp infra library" -) - -find_library(VPP_LIBRARY_VATPLUGIN - NAMES vatplugin - HINTS ${VPP_SEARCH_PATH_LIST} - PATH_SUFFIXES lib lib64 - DOC "Find the Vpp vatplugin library" -) - -find_library(VPP_LIBRARY_VLIB - NAMES vlib - HINTS ${VPP_SEARCH_PATH_LIST} - PATH_SUFFIXES lib lib64 - DOC "Find the Vpp vlib library" -) - -find_library(VPP_LIBRARY_VPPAPICLIENT - NAMES vppapiclient - HINTS ${VPP_SEARCH_PATH_LIST} - PATH_SUFFIXES lib lib64 - DOC "Find the Vpp vlib library" -) - -set(VPP_LIBRARIES ${VPP_LIBRARY_MEMORYCLIENT} ${VPP_LIBRARY_SVM} ${VPP_LIBRARY_INFRA} ${VPP_LIBRARY_VATPLUGIN} ${VPP_LIBRARY_VLIB}) -set(VPP_INCLUDE_DIRS ${VPP_INCLUDE_DIR} ${VPP_INCLUDE_DIR}/vpp_plugins) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Vpp DEFAULT_MSG VPP_LIBRARIES VPP_INCLUDE_DIRS) diff --git a/cmake/misc.cmake b/cmake/misc.cmake new file mode 100644 index 0000000..14c7d49 --- /dev/null +++ b/cmake/misc.cmake @@ -0,0 +1,69 @@ +# Copyright (c) 2018 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +############################################################################## +# Highlight WARNING and ERROR messages +############################################################################## +function(message) + list(GET ARGV 0 type) + if("$ENV{TERM}" STREQUAL "xterm-256color") + string(ASCII 27 esc) + set(red "${esc}[1;31m") + set(yellow "${esc}[1;33m") + set(reset "${esc}[m") + endif() + if(type STREQUAL FATAL_ERROR OR type STREQUAL SEND_ERROR) + list(REMOVE_AT ARGV 0) + _message(${type} "${red}${ARGV}${reset}") + elseif(type STREQUAL WARNING) + list(REMOVE_AT ARGV 0) + _message(STATUS "${yellow}${ARGV}${reset}") + elseif(type STREQUAL STATUS) + list(REMOVE_AT ARGV 0) + _message(STATUS "${ARGV}") + else() + _message(${ARGV}) + endif() +endfunction() + +############################################################################## +# aligned config output +############################################################################## +function(pr desc) + # CMake 3.12+: list(JOIN ARGN " " val) + string(REPLACE ";" " " val "${ARGN}") + if("$ENV{TERM}" STREQUAL "xterm-256color") + string(ASCII 27 esc) + set(reset "${esc}[m") + set(cyan "${esc}[36m") + endif() + string(LENGTH ${desc} len) + while (len LESS 20) + set (desc "${desc} ") + string(LENGTH ${desc} len) + endwhile() + _message("${cyan}${desc}${reset}: ${val}") +endfunction() + +############################################################################## +# string append +############################################################################## + +macro(string_append var str) + if (NOT ${var}) + set(${var} "${str}") + else() + set(${var} "${${var}} ${str}") + endif() +endmacro() + diff --git a/hack/build-internal.sh b/hack/build-internal.sh index 72ed0e1..c7731a3 100755 --- a/hack/build-internal.sh +++ b/hack/build-internal.sh @@ -22,6 +22,6 @@ case "${BUILD_TYPE}" in ;; esac -cmake -DCMAKE_BUILD_TYPE="${btype}" -DCMAKE_INSTALL_PREFIX=/usr /src +cmake -GNinja -DCMAKE_BUILD_TYPE="${btype}" -DCMAKE_INSTALL_PREFIX=/usr /src -make -C /src/build-root "$@" +ninja -C /src/build-root "$@" diff --git a/upf/CMakeLists.txt b/upf/CMakeLists.txt new file mode 100644 index 0000000..52a5ff8 --- /dev/null +++ b/upf/CMakeLists.txt @@ -0,0 +1,108 @@ +# TBD: license (udpi etc.) + +include_directories(${CMAKE_SOURCE_DIR}) + +# for generated API headers: +include_directories(${CMAKE_BINARY_DIR}) + +# Dependencies + +message(STATUS "Looking for hyperscan") +find_package(PkgConfig REQUIRED) +pkg_check_modules(HS libhs) + +if(HS_FOUND) + include_directories(${HS_INCLUDE_DIRS}) + message(STATUS "Found Hyperscan in ${HYPERSCAN_INCLUDE_DIRS}") +else() + message(WARNING "-- Hyperscan not found") +endif() + +message(STATUS "Looking for Hyperscan") +find_path(HYPERSCAN_INCLUDE_DIR NAMES hs/hs.h) +find_library(HYPERSCAN_LIB1 NAMES hs) +find_library(HYPERSCAN_LIB2 NAMES hs_runtime) +set (HYPERSCAN_LIB ${HYPERSCAN_LIB1} ${HYPERSCAN_LIB2}) +if(HYPERSCAN_INCLUDE_DIR AND HYPERSCAN_LIB) + include_directories(${HYPERSCAN_INCLUDE_DIR}) + message(STATUS "Found Hyperscan in ${HYPERSCAN_INCLUDE_DIR}") +else() + message(WARNING "-- Hyperscan not found") +endif() + +add_vpp_plugin(upf + SOURCES + upf.c + upf_api.c + upf_cli.c + upf_gtpu_encap.c + upf_gtpu_decap.c + upf_flow_node.c + upf_classify.c + upf_adf.c + upf_input.c + upf_forward.c + upf_session_dpo.c + pfcp.c + upf_pfcp.c + upf_pfcp_api.c + upf_pfcp_server.c + upf_pfcp_session_server.c + upf_proxy_accept.c + upf_proxy_input.c + upf_proxy_output.c + upf_tcp_forward.c + upf_proxy.c + upf_app_db.c + upf_ipfilter.c + upf_app_dpo.c + upf_ipfix.c + upf_ipfix_templates.c + upf_tw_timer_1t_3w_1024sl_ov.c + upf_tw_timer_2t_1w_2048sl.c + flowtable_init.c + flowtable.c + unittest.c + + MULTIARCH_SOURCES + upf_gtpu_encap.c + upf_gtpu_decap.c + upf_flow_node.c + upf_classify.c + upf_proxy_accept.c + upf_proxy_input.c + upf_proxy_output.c + upf_tcp_forward.c + upf_input.c + upf_forward.c + upf_session_dpo.c + + INSTALL_HEADERS + upf.h + pfcp.h + upf_pfcp.h + upf_pfcp_api.h + upf_pfcp_server.h + upf_proxy.h + upf_app_db.h + upf_ipfilter.h + upf_app_dpo.h + upf_app_db.h + flowtable.h + flowtable_tcp.h + upf_ipfix.h + upf_ipfix_templates.h + upf_tw_timer_1t_3w_1024sl_ov.h + upf_tw_timer_2t_1w_2048sl.h + upf_tw_timer_template.h + upf_gtpu_error.def + version.h + + API_FILES + upf.api + + LINK_LIBRARIES + ${HYPERSCAN_LIB} + + COMPONENT upf-plugin +) diff --git a/upf/upf_gtpu_encap.c b/upf/upf_gtpu_encap.c index 206ff3a..842707c 100644 --- a/upf/upf_gtpu_encap.c +++ b/upf/upf_gtpu_encap.c @@ -57,6 +57,7 @@ typedef enum UPF_ENCAP_N_NEXT, } upf_encap_next_t; +#ifndef CLIB_MARCH_VARIANT static u16 encode_ext_header_udp_port (vlib_buffer_t * b, u16 udp_port) { @@ -324,7 +325,6 @@ upf_gtpu_error_ind (vlib_buffer_t * b0, int is_ip4) } } -#ifndef CLIB_MARCH_VARIANT u32 upf_gtpu_end_marker (u32 fib_index, u32 dpoi_index, u8 * rewrite, int is_ip4) { diff --git a/upf/upf_proxy_accept.c b/upf/upf_proxy_accept.c index be528b3..d2e1016 100644 --- a/upf/upf_proxy_accept.c +++ b/upf/upf_proxy_accept.c @@ -142,6 +142,7 @@ proxy_session_stream_accept_notify (transport_connection_t * tc, u32 flow_id) return 0; } +#ifndef CLIB_MARCH_VARIANT /** * Lookup transport connection */ @@ -204,6 +205,7 @@ upf_tcp_lookup_connection (u32 fib_index, vlib_buffer_t * b, u8 thread_index, } return tc; } +#endif static_always_inline uword upf_proxy_accept_inline (vlib_main_t * vm, vlib_node_runtime_t * node, diff --git a/upf/upf_proxy_input.c b/upf/upf_proxy_input.c index 8295c77..4ba3d93 100644 --- a/upf/upf_proxy_input.c +++ b/upf/upf_proxy_input.c @@ -112,6 +112,7 @@ tcp_flow_is_valid (tcp_connection_t * tc, flow_entry_t * f, (f->key.port[reverse] == tc->connection.lcl_port); } +#ifndef CLIB_MARCH_VARIANT void upf_kill_connection_hard (tcp_connection_t * tc) { @@ -121,6 +122,7 @@ upf_kill_connection_hard (tcp_connection_t * tc) /* this calls session_cleanup_callback for the proxy connection */ tcp_connection_del (tc); } +#endif static_always_inline u32 splice_tcp_connection (upf_main_t * gtm, flow_entry_t * flow,