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
{