diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 745980622c0d1f7be23193de92b546a315037776..b1428e24b512393d1f3988c9cd5eb52dc2cbd49d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,8 +1,11 @@ #This file is quite deprecated, but we keep it there in case someone has an internal GitLab CI pipeline and wants to reuse this + +default: + image: ubuntu:22.04 + variables: - DPDK_VERSION: "17.08" NETMAP_VERSION: "11.1" - CONFIG: "--enable-gtp --enable-json" + CONFIG: "--enable-all-elements --disable-verbose-batch --enable-simtime" batch: script: @@ -10,20 +13,43 @@ batch: autobatch: script: - ./configure CXXFLAGS="-std=gnu++11" --enable-batch $CONFIG --disable-verbose-batch --enable-auto-batch=port && make && make check - ip6: script: - ./configure CXXFLAGS="-std=gnu++11" --enable-ip6 --enable-json $CONFIG --disable-batch && make && make check mt: script: - ./configure CXXFLAGS="-std=gnu++11" --enable-user-multithread $CONFIG --disable-batch && make && make check -dpdk-batch: - script: - - ./configure CXXFLAGS="-std=gnu++11" --enable-user-multithread --without-netmap --enable-dpdk $CONFIG --enable-batch --disable-verbose-batch RTE_SDK=$RTE_SDK RTE_TARGET=$RTE_TARGET && make -dpdk-nobatch: +noclone: script: - - ./configure CXXFLAGS="-std=gnu++11" --enable-user-multithread --without-netmap --enable-dpdk $CONFIG --disable--batch RTE_SDK=$RTE_SDK RTE_TARGET=$RTE_TARGET && make + - ./configure CXXFLAGS="-std=gnu++11" --enable-user-multithread $CONFIG --disable-clone && make && make check + +dpdk: + parallel: + matrix: + - DPDK_VERSION: ["20.11", "23.03"] + DPDK_CONFIG: ["--enable-dpdk-packet --enable-batch", "--enable-batch", "--disable-batch", "--enable-dpdk-pool"] + before_script: + - echo "Running global pre-install..." + - !reference [before_script] + - echo "Running local pre-install..." + - export RTE_SDK=`pwd`/dpdk-$DPDK_VERSION; + export RTE_TARGET=x86_64-native-linuxapp-gcc; + export PKG_CONFIG_PATH=${RTE_SDK}/install/lib/x86_64-linux-gnu/pkgconfig/; + export LD_LIBRARY_PATH=${RTE_SDK}/install/lib/x86_64-linux-gnu/:${RTE_SDK}/install/lib/:$LD_LIBRARY_PATH; + if [ ! -e "$RTE_SDK/$RTE_TARGET/include/rte_version.h" ]; then + wget http://dpdk.org/browse/dpdk/snapshot/dpdk-$DPDK_VERSION.tar.gz && + tar -zxf dpdk-$DPDK_VERSION.tar.gz && + cd dpdk-$DPDK_VERSION ; + pip3 install meson ninja && + meson -Dprefix=$(pwd)/install/ -Dmachine=default build && + cd build && ( ninja && ninja install ) ; cd .. ; cd .. ; + fi; + ldconfig + script: + - ls $PKG_CONFIG_PATH + - echo $LD_LIBRARY_PATH + - ./configure CXXFLAGS="-std=gnu++11" --enable-user-multithread --without-netmap --enable-dpdk ${DPDK_CONFIG} $CONFIG RTE_SDK=$RTE_SDK RTE_TARGET=$RTE_TARGET && make && make check netmap_single: script: @@ -46,24 +72,16 @@ fnetmap: cache: paths: - - dpdk-$DPDK_VERSION + - dpdk-* - netmap-$NETMAP_VERSION before_script: - - if ! ( gcc -v &> /dev/null ) ; then - apt-get install -yqq build-essential - fi - - gcc -v - - export RTE_SDK=`pwd`/dpdk-$DPDK_VERSION; - export RTE_TARGET=x86_64-native-linuxapp-gcc; - if [ ! -e "$RTE_SDK/$RTE_TARGET/include/rte_version.h" ]; then - wget http://dpdk.org/browse/dpdk/snapshot/dpdk-$DPDK_VERSION.tar.gz && - tar -zxf dpdk-$DPDK_VERSION.tar.gz && - cd dpdk-$DPDK_VERSION ; - make config T=$RTE_TARGET && - make install T=$RTE_TARGET ; - cd ..; + - if ( command -v apt-get &> /dev/null ) ; then + echo "Installing dependencies..." ; + apt-get update -yqq && apt-get install -yqq build-essential sudo wget libelf-dev pkg-config zlib1g-dev libnuma-dev python3-pyelftools ninja-build meson linux-headers-$(uname -r) python3-pip ; + fi; - - if [ ! -e "netmap-$NETMAP_VERSION/sys/net/netmap.h" ] ; then wget https://github.com/luigirizzo/netmap/archive/v$NETMAP_VERSION.tar.gz && tar -xvf v$NETMAP_VERSION.tar.gz && cd netmap-$NETMAP_VERSION && cd LINUX && ./configure --no-drivers && cd .. && cd .. ; fi + - gcc -v + - if [ ! -e "netmap-$NETMAP_VERSION/sys/net/netmap.h" ] ; then wget https://github.com/luigirizzo/netmap/archive/v$NETMAP_VERSION.tar.gz && tar -xvf v$NETMAP_VERSION.tar.gz && ( cd netmap-$NETMAP_VERSION && cd LINUX && ./configure --no-drivers ; cd .. && cd .. ) ; fi - ls -al - if [ `sudo -n whoami` = "root" ] ; then sudo insmod netmap-$NETMAP_VERSION/LINUX/netmap.ko && sudo chmod 666 /dev/netmap ; fi - export CONFIG_NETMAP="--with-netmap=`pwd`/netmap-$NETMAP_VERSION/sys/" diff --git a/configure b/configure index a6af550a511f6c5ff5f4ee3bbee7eb3322578cf9..3b322e5162c0ba917d9c1940b3399dd2e7f8e4e3 100755 --- a/configure +++ b/configure @@ -1671,6 +1671,7 @@ Optional Features: --enable-user-timestamp enable support for user-provided clock system --enable-bound-port-transfer enable port transfer function ptr optimization + Optional features about flow and context: --disable-ctx-global-timeout disable sloppy CTX timeouts. Enabled if CTX is enabled by default. @@ -4023,7 +4024,6 @@ test -n "$target_alias" && NONENONEs,x,x, && program_prefix=${target_alias}- - if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 @@ -9883,10 +9883,10 @@ then : else $as_nop enable_flow=NO fi -test "x$enable_all_elements" = xyes -a \( "x$enable_flow" = xNO -o "x$enable_flow" = x \) && enable_flow=yes +test "x$enable_all_elements" = xyes -a \( "x$enable_flow" = xNO -o "x$enable_flow" = x \) -a "x$enable_batch" = xyes && enable_flow=yes if test "x$enable_flow" = xyes; then : - + enable_flow=yes fi # Check whether --enable-ctx was given. if test ${enable_ctx+y} @@ -10102,7 +10102,7 @@ fi all_element_groups= for i in `(cd $srcdir/elements; ls | sed '/^CVS$/d;/^\.git/d;/^bsdmodule$/d;/^linuxmodule$/d;/^ns$/d;/^userlevel$/d;/^minios$/d')`; do enableval=`eval 'echo $'"enable_$i"` - test "x$enable_all_elements" = xyes -a "x$enableval" '!=' xno && enableval=yes + test "x$enable_all_elements" = xyes -a "x$enableval" '=' xyes && enableval=yes test -d "$srcdir/elements/$i" -a "$enableval" = "yes" && element_groups="$element_groups $i" test -d "$srcdir/elements/$i" && all_element_groups="$all_element_groups$i " done @@ -14589,6 +14589,7 @@ if test "x$have_aligned_new" = xyes; then CXXFLAGS="$CXXFLAGS -faligned-new" fi + if test "x$enable_flow" = xyes; then if test "x$enable_batch" != xyes; then as_fn_error $? "--enable-flow needs --enable-batch! Flow subsystem will be disabled." "$LINENO" 5 @@ -14609,6 +14610,8 @@ else enable_ctx="no" fi + + # Check whether --enable-ctx-global-timeout was given. if test ${enable_ctx_global_timeout+y} then : diff --git a/configure.in b/configure.in index 1cede6239c6bd4fe61ab6bf1914c352cc692da2c..7fea8a0183817b36cf21d6822a1f2527aba81e3d 100644 --- a/configure.in +++ b/configure.in @@ -11,8 +11,8 @@ dnl The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This dnl notice is a summary of the Click LICENSE file; the license in that file is dnl legally binding. -AC_INIT([click], [2.1]) -AC_PREREQ(2.60) +AC_INIT([click],[2.1]) +AC_PREREQ([2.71]) AC_CONFIG_HEADERS([include/click/config.h:config.h.in], [echo > stamp-h]) AC_CONFIG_HEADERS([include/click/pathvars.h:pathvars.h.in]) AC_CONFIG_HEADERS([include/click/config-bsdmodule.h:config-bsdmodule.h.in include/click/config-linuxmodule.h:config-linuxmodule.h.in include/click/config-ns.h:config-ns.h.in include/click/config-userlevel.h:config-userlevel.h.in include/click/config-minios.h:config-minios.h.in]) @@ -39,7 +39,7 @@ AC_DEFINE_UNQUOTED([CLICK_VERSION_CODE], [CLICK_MAKE_VERSION_CODE($click_version CLICK_INIT('$(top_srcdir)') dnl support for cross compiling -AC_CANONICAL_SYSTEM +AC_CANONICAL_TARGET dnl This is wrong!! AC_CHECK_TOOL(CC, gcc) @@ -66,14 +66,14 @@ esac -AC_TRY_RUN([#include <new> +AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <new> int main() { std::size_t sz = 8; std::align_val_t al{64}; void* a = operator new(sz,al); return (a == nullptr?1:0); -}],AC_DEFINE([HAVE_ALIGNED_NEW])) +}]])],[AC_DEFINE(HAVE_ALIGNED_NEW)],[],[]) CLICK_PROG_KERNEL_CC CLICK_PROG_KERNEL_CXX @@ -693,7 +693,7 @@ ELEMENTS_ARG_ENABLE(app, [include application-level elements], yes) ELEMENTS_ARG_ENABLE(aqm, [include active queue management elements], yes) ELEMENTS_ARG_ENABLE(ethernet, [include Ethernet elements], yes) ELEMENTS_ARG_ENABLE(etherswitch, [include Ethernet switch elements], NO) -ELEMENTS_ARG_ENABLE(flow, [include Enable flow system and elements], NO) +ELEMENTS_ARG_ENABLE(flow, [include Enable flow system and elements], NO, enable_flow=yes, [ -a "x$enable_batch" = xyes ] ) ELEMENTS_ARG_ENABLE(ctx, [include Context-based elements], NO, enable_ctx=yes , [ -a "x$enable_flow" = xyes ] ) ELEMENTS_ARG_ENABLE(grid, [include Grid elements (see FAQ)], NO) ELEMENTS_ARG_ENABLE(icmp, [include ICMP elements], yes) @@ -717,7 +717,7 @@ AC_ARG_ENABLE(skip-elements, [AS_HELP_STRING([--enable-skip-elements=ELTS], [dis all_element_groups= for i in `(cd $srcdir/elements; ls | sed '/^CVS$/d;/^\.git/d;/^bsdmodule$/d;/^linuxmodule$/d;/^ns$/d;/^userlevel$/d;/^minios$/d')`; do enableval=`eval 'echo $'"enable_$i"` - test "x$enable_all_elements" = xyes -a "x$enableval" '!=' xno && enableval=yes + test "x$enable_all_elements" = xyes -a "x$enableval" '=' xyes && enableval=yes test -d "$srcdir/elements/$i" -a "$enableval" = "yes" && element_groups="$element_groups $i" test -d "$srcdir/elements/$i" && all_element_groups="$all_element_groups$i " done @@ -801,10 +801,10 @@ dnl dnl functions dnl -AC_LANG_C +AC_LANG([C]) AC_REPLACE_FUNCS(strerror) AC_CHECK_FUNCS(random snprintf strnlen strtof strtold strtoul tcgetpgrp vsnprintf aligned_alloc) -AC_LANG_CPLUSPLUS +AC_LANG([C++]) dnl @@ -908,6 +908,7 @@ if test "x$have_aligned_new" = xyes; then CXXFLAGS="$CXXFLAGS -faligned-new" fi + if test "x$enable_flow" = xyes; then if test "x$enable_batch" != xyes; then AC_MSG_ERROR([--enable-flow needs --enable-batch! Flow subsystem will be disabled.]) @@ -924,6 +925,8 @@ else enable_ctx="no" fi +m4_divert_once([HELP_ENABLE], [[ Optional features about flow and context:]]) + AC_ARG_ENABLE([ctx-global-timeout], [AS_HELP_STRING([ --disable-ctx-global-timeout], [disable sloppy CTX timeouts. Enabled if CTX is enabled by default.])], [:], [enable_ctx_global_timeout=$enable_ctx]) @@ -971,7 +974,7 @@ else fi AC_ARG_ENABLE(tools, - [AC_HELP_STRING([--enable-tools=WHERE], [enable tools (host/build/mixed/no) [[mixed]]])], + [AS_HELP_STRING([--enable-tools=WHERE],[enable tools (host/build/mixed/no) [[mixed]]])], :, enable_tools=mixed) if test "$enable_tools" != mixed -a "$enable_tools" != host -a "$enable_tools" != build -a "$enable_tools" != no; then @@ -1034,7 +1037,7 @@ dnl dnl sockets dnl -AC_LANG_C +AC_LANG([C]) SOCKET_LIBS= if test "$enable_userlevel" = yes; then savelibs="$LIBS"; LIBS= @@ -1052,7 +1055,7 @@ if test "$enable_userlevel" = yes; then fi fi AC_SUBST(SOCKET_LIBS) -AC_LANG_CPLUSPLUS +AC_LANG([C++]) dnl @@ -1066,10 +1069,10 @@ dnl dnl mmap dnl -AC_LANG_C +AC_LANG([C]) AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_FUNC_MMAP -AC_LANG_CPLUSPLUS +AC_LANG([C++]) AC_CHECK_FUNCS(madvise) AC_CHECK_DECLS(madvise, [], [], [#if HAVE_SYS_MMAN_H #include <sys/types.h> @@ -1870,11 +1873,11 @@ if test "$properprefix" != no; then AC_CHECK_HEADER(prop.h, have_prop_h=yes, have_prop_h=no) CPPFLAGS="$saveflags" - AC_LANG_C + AC_LANG([C]) saveflags="$LDFLAGS"; test -n "$properprefix" && LDFLAGS="$LDFLAGS -L$properprefix/lib" AC_CHECK_LIB(proper, prop_open, have_libproper=yes, have_libproper=no) LDFLAGS="$saveflags" - AC_LANG_CPLUSPLUS + AC_LANG([C++]) if test $have_prop_h = yes -a $have_libproper = yes; then AC_DEFINE(HAVE_PROPER) @@ -1909,7 +1912,7 @@ if test "$expatprefix" != no; then AC_CHECK_HEADER(expat.h, have_expat_h=yes, have_expat_h=no) CPPFLAGS="$saveflags" - AC_LANG_C + AC_LANG([C]) saveflags="$LDFLAGS"; test -n "$expatprefix" && LDFLAGS="$LDFLAGS -L$expatprefix/lib" AC_CHECK_LIB(expat, XML_ParserCreateNS, have_libexpat=yes, have_libexpat=no) LDFLAGS="$saveflags" @@ -2055,7 +2058,7 @@ $linux_autoconf_include AC_CACHE_CHECK([for C++-includable kernel header files], [ac_cv_cxx_aware_system], - [AC_LANG_CPLUSPLUS + [AC_LANG([C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ #include <linux/signal.h> #include <linux/skbuff.h> @@ -2160,7 +2163,7 @@ void f1(int64_t) { // will fail if long long and int64_t are the same type fi AC_CACHE_CHECK([for <asm/alternative.h>], [ac_cv_linux_asm_alternative_h], - [AC_LANG_C + [AC_LANG([C]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ #include <asm/alternative.h>]], [[]])], @@ -2170,7 +2173,7 @@ void f1(int64_t) { // will fail if long long and int64_t are the same type fi AC_CACHE_CHECK([for <asm/scatterlist.h>], [ac_cv_linux_asm_scatterlist_h], - [AC_LANG_C + [AC_LANG([C]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ #include <asm/scatterlist.h>]], [[]])], @@ -2180,7 +2183,7 @@ void f1(int64_t) { // will fail if long long and int64_t are the same type fi AC_CACHE_CHECK([for <asm/system.h>], [ac_cv_linux_asm_system_h], - [AC_LANG_C + [AC_LANG([C]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ #include <asm/system.h>]], [[]])], @@ -2198,7 +2201,7 @@ void f1(int64_t) { // will fail if long long and int64_t are the same type dnl Linux kernel network configuration - AC_LANG_CPLUSPLUS + AC_LANG([C++]) AC_CACHE_CHECK([whether struct sk_buff has a security member], [ac_cv_linuxmodule_skbuff_security], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ #include <linux/skbuff.h>]], @@ -2408,7 +2411,7 @@ CFLAGS="$save_cflags" dnl Linux kernel file system configuration AC_CACHE_CHECK([whether struct super_block has an s_d_op member], [ac_cv_linuxmodule_super_block_s_d_op], - [AC_LANG_C + [AC_LANG([C]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ #include <linux/fs.h>]], [[extern struct super_block *sb; sb->s_d_op = 0;]])], @@ -2425,7 +2428,7 @@ CFLAGS="$save_cflags" fi AC_CACHE_CHECK([whether struct dentry has a d_child member], [ac_cv_linuxmodule_dentry_d_child], - [AC_LANG_C + [AC_LANG([C]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ #include <linux/fs.h> #include <linux/dcache.h>]], diff --git a/elements/research/flowipmanager.cc b/elements/research/flowipmanager.cc index 46883162badc9827ae5e8be068e59e6a5718b211..231e9372246f60cc4265f7c83e0c57bae472a0ac 100755 --- a/elements/research/flowipmanager.cc +++ b/elements/research/flowipmanager.cc @@ -314,6 +314,6 @@ void FlowIPManager::add_handlers() CLICK_ENDDECLS -ELEMENT_REQUIRES(dpdk dpdk19) +ELEMENT_REQUIRES(dpdk dpdk19 flow) EXPORT_ELEMENT(FlowIPManager) ELEMENT_MT_SAFE(FlowIPManager) diff --git a/lib/dpdkdevice.cc b/lib/dpdkdevice.cc index 1217a8b1c3a9fe471bec3e1d282e1d8f71a08092..773db76a8548a4619cbfbb277b4735715b70a6d2 100644 --- a/lib/dpdkdevice.cc +++ b/lib/dpdkdevice.cc @@ -68,7 +68,9 @@ extern "C" { #define DEV_TX_OFFLOAD_TCP_CKSUM RTE_ETH_TX_OFFLOAD_TCP_CKSUM #define DEV_TX_OFFLOAD_TCP_TSO RTE_ETH_TX_OFFLOAD_TCP_TSO #define DEV_TX_OFFLOAD_MULTI_SEGS RTE_ETH_TX_OFFLOAD_MULTI_SEGS -#define RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE +#ifndef RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE +# define RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE +#endif //#define DEF_DEV_RXDESC DEF_RTE_ETH_RXDESC //#define DEF_DEV_TXDESC DEF_RTE_ETH_TXDESC diff --git a/lib/fromfile.cc b/lib/fromfile.cc index 1af5d8f37bdec9ebfb7084a321e41ea1b39c113a..6fa1e46ee47da818016dc0020aac0bedb442630c 100644 --- a/lib/fromfile.cc +++ b/lib/fromfile.cc @@ -577,12 +577,20 @@ FromFile::get_packet(size_t size, uint32_t sec, uint32_t subsec, ErrorHandler *e #else if (_pos + size <= _len) { +#ifndef CLICK_NOINDIRECT if (Packet *p = _data_packet->clone()) { p->shrink_data(_buffer + _pos, size); p->timestamp_anno().assign(sec, subsec); _pos += size; return p; } +#else + if (Packet *p = Packet::make(_buffer + _pos, size)) { + p->timestamp_anno().assign(sec, subsec); + _pos += size; + return p; + } +#endif } else #endif {