# See the License for the specific language governing permissions and
# limitations under the License.
+dnl Set OVS DPCLS Autovalidator as default subtable search at compile time?
+dnl This enables automatically running all unit tests with all DPCLS
+dnl implementations.
+AC_DEFUN([OVS_CHECK_DPCLS_AUTOVALIDATOR], [
+ AC_ARG_ENABLE([autovalidator],
+ [AC_HELP_STRING([--enable-autovalidator], [Enable DPCLS autovalidator as default subtable search implementation.])],
+ [autovalidator=yes],[autovalidator=no])
+ AC_MSG_CHECKING([whether DPCLS Autovalidator is default implementation])
+ if test "$autovalidator" != yes; then
+ AC_MSG_RESULT([no])
+ else
+ OVS_CFLAGS="$OVS_CFLAGS -DDPCLS_AUTOVALIDATOR_DEFAULT"
+ AC_MSG_RESULT([yes])
+ fi
+])
+
dnl OVS_ENABLE_WERROR
AC_DEFUN([OVS_ENABLE_WERROR],
[AC_ARG_ENABLE(
if test X"$with_linux" != X; then
KBUILD=$with_linux
+ AC_MSG_WARN([--with-linux is deprecated and kernel support is limited to 5.8 and below])
elif test X"$with_l26" != X; then
KBUILD=$with_l26
AC_MSG_WARN([--with-l26 is deprecated, please use --with-linux instead])
fi
AC_MSG_RESULT([$kversion])
- if test "$version" -ge 4; then
- if test "$version" = 4 && test "$patchlevel" -le 20; then
- : # Linux 4.x
+ if test "$version" -ge 5; then
+ if test "$version" = 5 && test "$patchlevel" -le 8; then
+ : # Linux 5.x
else
- AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.20.x is not supported (please refer to the FAQ for advice)])
+ AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 5.8.x is not supported (please refer to the FAQ for advice)])
fi
+ elif test "$version" = 4; then
+ : # Linux 4.x
elif test "$version" = 3 && test "$patchlevel" -ge 10; then
: # Linux 3.x
else
AM_CONDITIONAL(LINUX_ENABLED, test -n "$KBUILD")
])
+dnl OVS_CHECK_LINUX_NETLINK
+dnl
+dnl Configure Linux netlink compat.
+AC_DEFUN([OVS_CHECK_LINUX_NETLINK], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([#include <linux/netlink.h>], [
+ struct nla_bitfield32 x = { 0 };
+ ])],
+ [AC_DEFINE([HAVE_NLA_BITFIELD32], [1],
+ [Define to 1 if struct nla_bitfield32 is available.])])
+])
+
dnl OVS_CHECK_LINUX_TC
dnl
dnl Configure Linux tc compat.
AC_DEFUN([OVS_CHECK_LINUX_TC], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([#include <linux/pkt_cls.h>], [
- int x = TCA_FLOWER_KEY_ENC_IP_TTL_MASK;
+ int x = TCA_ACT_FLAGS;
])],
- [AC_DEFINE([HAVE_TCA_FLOWER_KEY_ENC_IP_TTL_MASK], [1],
- [Define to 1 if TCA_FLOWER_KEY_ENC_IP_TTL_MASK is available.])])
+ [AC_DEFINE([HAVE_TCA_ACT_FLAGS], [1],
+ [Define to 1 if TCA_ACT_FLAGS is available.])])
+
+ AC_CHECK_MEMBERS([struct tcf_t.firstuse], [], [], [#include <linux/pkt_cls.h>])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([#include <linux/tc_act/tc_vlan.h>], [
[AC_DEFINE([HAVE_TCA_VLAN_PUSH_VLAN_PRIORITY], [1],
[Define to 1 if TCA_VLAN_PUSH_VLAN_PRIORITY is available.])])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([#include <linux/tc_act/tc_mpls.h>], [
+ int x = TCA_MPLS_TTL;
+ ])],
+ [AC_DEFINE([HAVE_TCA_MPLS_TTL], [1],
+ [Define to 1 if HAVE_TCA_MPLS_TTL is available.])])
+
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([#include <linux/tc_act/tc_tunnel_key.h>], [
int x = TCA_TUNNEL_KEY_ENC_TTL;
[Define to 1 if SCTP_CONNTRACK_HEARTBEAT_SENT is available.])])
])
+dnl OVS_CHECK_LINUX_VIRTIO_TYPES
+dnl
+dnl Checks for kernels that need virtio_types definition.
+AC_DEFUN([OVS_CHECK_LINUX_VIRTIO_TYPES], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([#include <linux/virtio_types.h>], [
+ __virtio16 x = 0;
+ ])],
+ [AC_DEFINE([HAVE_VIRTIO_TYPES], [1],
+ [Define to 1 if __virtio16 is available.])])
+])
+
dnl OVS_FIND_DEPENDENCY(FUNCTION, SEARCH_LIBS, NAME_TO_PRINT)
dnl
dnl Check for a function in a library list.
])
])
+dnl OVS_CHECK_LINUX_AF_XDP
+dnl
+dnl Check both Linux kernel AF_XDP and libbpf support
+AC_DEFUN([OVS_CHECK_LINUX_AF_XDP], [
+ AC_ARG_ENABLE([afxdp],
+ [AC_HELP_STRING([--enable-afxdp], [Enable AF-XDP support])],
+ [], [enable_afxdp=no])
+ AC_MSG_CHECKING([whether AF_XDP is enabled])
+ if test "$enable_afxdp" != yes; then
+ AC_MSG_RESULT([no])
+ AF_XDP_ENABLE=false
+ else
+ AC_MSG_RESULT([yes])
+ AF_XDP_ENABLE=true
+
+ AC_CHECK_HEADER([bpf/libbpf.h], [],
+ [AC_MSG_ERROR([unable to find bpf/libbpf.h for AF_XDP support])])
+
+ AC_CHECK_HEADER([linux/if_xdp.h], [],
+ [AC_MSG_ERROR([unable to find linux/if_xdp.h for AF_XDP support])])
+
+ AC_CHECK_HEADER([bpf/xsk.h], [],
+ [AC_MSG_ERROR([unable to find bpf/xsk.h for AF_XDP support])])
+
+ AC_CHECK_FUNCS([pthread_spin_lock], [],
+ [AC_MSG_ERROR([unable to find pthread_spin_lock for AF_XDP support])])
+
+ OVS_FIND_DEPENDENCY([numa_alloc_onnode], [numa], [libnuma])
+
+ AC_DEFINE([HAVE_AF_XDP], [1],
+ [Define to 1 if AF_XDP support is available and enabled.])
+ LIBBPF_LDADD=" -lbpf -lelf"
+ AC_SUBST([LIBBPF_LDADD])
+
+ AC_CHECK_DECL([xsk_ring_prod__needs_wakeup], [
+ AC_DEFINE([HAVE_XDP_NEED_WAKEUP], [1],
+ [XDP need wakeup support detected in xsk.h.])
+ ], [], [[#include <bpf/xsk.h>]])
+ fi
+ AM_CONDITIONAL([HAVE_AF_XDP], test "$AF_XDP_ENABLE" = true)
+])
+
dnl OVS_CHECK_DPDK
dnl
dnl Configure DPDK source tree
AC_DEFUN([OVS_CHECK_DPDK], [
AC_ARG_WITH([dpdk],
- [AC_HELP_STRING([--with-dpdk=/path/to/dpdk],
- [Specify the DPDK build directory])],
+ [AC_HELP_STRING([--with-dpdk=static|shared|yes],
+ [Specify "static" or "shared" depending on the
+ DPDK libraries to use])],
[have_dpdk=true])
- AC_MSG_CHECKING([whether dpdk datapath is enabled])
+ AC_MSG_CHECKING([whether dpdk is enabled])
if test "$have_dpdk" != true || test "$with_dpdk" = no; then
AC_MSG_RESULT([no])
DPDKLIB_FOUND=false
else
AC_MSG_RESULT([yes])
case "$with_dpdk" in
- yes)
- DPDK_AUTO_DISCOVER="true"
- PKG_CHECK_MODULES_STATIC([DPDK], [libdpdk], [
- DPDK_INCLUDE="$DPDK_CFLAGS"
- DPDK_LIB="$DPDK_LIBS"], [
- DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"
- DPDK_LIB="-ldpdk"])
- ;;
- *)
- DPDK_AUTO_DISCOVER="false"
- DPDK_INCLUDE_PATH="$with_dpdk/include"
- # If 'with_dpdk' is passed install directory, point to headers
- # installed in $DESTDIR/$prefix/include/dpdk
- if test -e "$DPDK_INCLUDE_PATH/rte_config.h"; then
- DPDK_INCLUDE="-I$DPDK_INCLUDE_PATH"
- elif test -e "$DPDK_INCLUDE_PATH/dpdk/rte_config.h"; then
- DPDK_INCLUDE="-I$DPDK_INCLUDE_PATH/dpdk"
- fi
- DPDK_LIB_DIR="$with_dpdk/lib"
- DPDK_LIB="-ldpdk"
- ;;
+ "shared")
+ PKG_CHECK_MODULES([DPDK], [libdpdk], [
+ DPDK_INCLUDE="$DPDK_CFLAGS"
+ DPDK_LIB="$DPDK_LIBS"])
+ ;;
+ "static" | "yes")
+ PKG_CHECK_MODULES_STATIC([DPDK], [libdpdk], [
+ DPDK_INCLUDE="$DPDK_CFLAGS"
+ DPDK_LIB="$DPDK_LIBS"])
+
+ dnl Statically linked private DPDK objects of form
+ dnl -l:file.a must be positioned between
+ dnl --whole-archive ... --no-whole-archive linker parameters.
+ dnl Old pkg-config versions misplace --no-whole-archive parameter
+ dnl and put it next to --whole-archive.
+ AC_MSG_CHECKING([for faulty pkg-config version])
+ echo "$DPDK_LIB" | grep -q 'whole-archive.*l:lib.*no-whole-archive'
+ status=$?
+ case $status in
+ 0)
+ AC_MSG_RESULT([no])
+ ;;
+ 1)
+ AC_MSG_RESULT([yes])
+ AC_MSG_ERROR([Please upgrade pkg-config])
+ ;;
+ *)
+ AC_MSG_ERROR([grep exited with status $status])
+ ;;
+ esac
esac
ovs_save_CFLAGS="$CFLAGS"
ovs_save_LDFLAGS="$LDFLAGS"
CFLAGS="$CFLAGS $DPDK_INCLUDE"
- if test "$DPDK_AUTO_DISCOVER" = "false"; then
- LDFLAGS="$LDFLAGS -L${DPDK_LIB_DIR}"
- fi
AC_CHECK_HEADERS([rte_config.h], [], [
AC_MSG_ERROR([unable to find rte_config.h in $with_dpdk])
OVS_FIND_DEPENDENCY([get_mempolicy], [numa], [libnuma])
], [], [[#include <rte_config.h>]])
- AC_CHECK_DECL([RTE_LIBRTE_VHOST_NUMA], [
- AC_DEFINE([VHOST_NUMA], [1], [NUMA Aware vHost support detected in DPDK.])
+ AC_CHECK_DECL([RTE_LIBRTE_PMD_PCAP], [
+ OVS_FIND_DEPENDENCY([pcap_dump_close], [pcap], [libpcap])
], [], [[#include <rte_config.h>]])
- AC_CHECK_DECL([RTE_LIBRTE_PMD_PCAP], [
- OVS_FIND_DEPENDENCY([pcap_dump], [pcap], [libpcap])
- AC_CHECK_DECL([RTE_LIBRTE_PDUMP], [
- AC_DEFINE([DPDK_PDUMP], [1], [DPDK pdump enabled in OVS.])
- ], [], [[#include <rte_config.h>]])
+ AC_CHECK_DECL([RTE_LIBRTE_PMD_AF_XDP], [
+ LIBBPF_LDADD="-lbpf"
+ ], [], [[#include <rte_config.h>]])
+
+ AC_CHECK_DECL([RTE_LIBRTE_VHOST_NUMA], [
+ AC_DEFINE([VHOST_NUMA], [1], [NUMA Aware vHost support detected in DPDK.])
], [], [[#include <rte_config.h>]])
AC_CHECK_DECL([RTE_LIBRTE_MLX5_PMD], [dnl found
- OVS_FIND_DEPENDENCY([mnl_attr_put], [mnl], [libmnl])
- AC_CHECK_DECL([RTE_LIBRTE_MLX5_DLOPEN_DEPS], [], [dnl not found
+ AC_CHECK_DECL([RTE_IBVERBS_LINK_DLOPEN], [], [dnl not found
OVS_FIND_DEPENDENCY([mlx5dv_create_wq], [mlx5], [libmlx5])
OVS_FIND_DEPENDENCY([verbs_init_cq], [ibverbs], [libibverbs])
], [[#include <rte_config.h>]])
], [], [[#include <rte_config.h>]])
AC_CHECK_DECL([RTE_LIBRTE_MLX4_PMD], [dnl found
- AC_CHECK_DECL([RTE_LIBRTE_MLX4_DLOPEN_DEPS], [], [dnl not found
+ AC_CHECK_DECL([RTE_IBVERBS_LINK_DLOPEN], [], [dnl not found
OVS_FIND_DEPENDENCY([mlx4dv_init_obj], [mlx4], [libmlx4])
OVS_FIND_DEPENDENCY([verbs_init_cq], [ibverbs], [libibverbs])
], [[#include <rte_config.h>]])
[AC_MSG_RESULT([yes])
DPDKLIB_FOUND=true],
[AC_MSG_RESULT([no])
- if test "$DPDK_AUTO_DISCOVER" = "true"; then
- AC_MSG_ERROR(m4_normalize([
- Could not find DPDK library in default search path, Use --with-dpdk
- to specify the DPDK library installed in non-standard location]))
- else
- AC_MSG_ERROR([Could not find DPDK libraries in $DPDK_LIB_DIR])
- fi
+ AC_MSG_ERROR(m4_normalize([
+ Could not find DPDK library in default search path, update
+ PKG_CONFIG_PATH for pkg-config to find the .pc file in
+ non-standard location]))
])
CFLAGS="$ovs_save_CFLAGS"
LDFLAGS="$ovs_save_LDFLAGS"
- if test "$DPDK_AUTO_DISCOVER" = "false"; then
- OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR"
- fi
+ # Stripping out possible instruction set specific configuration that DPDK
+ # forces in pkg-config since this could override user-specified options.
+ # It's enough to have -mssse3 to build with DPDK headers.
+ DPDK_INCLUDE=$(echo "$DPDK_INCLUDE" | sed 's/-march=[[^ ]]*//g')
+ # Also stripping out '-mno-avx512f'. Support for AVX512 will be disabled
+ # if OVS will detect that it's broken. OVS could be built with a
+ # completely different toolchain that correctly supports AVX512, flags
+ # forced by DPDK only breaks our feature detection mechanism and leads to
+ # build failures: https://github.com/openvswitch/ovs-issues/issues/201
+ DPDK_INCLUDE=$(echo "$DPDK_INCLUDE" | sed 's/-mno-avx512f//g')
OVS_CFLAGS="$OVS_CFLAGS $DPDK_INCLUDE"
OVS_ENABLE_OPTION([-mssse3])
# This happens because the rest of the DPDK code doesn't use any symbol in
# the pmd driver objects, and the drivers register themselves using an
# __attribute__((constructor)) function.
- #
- # These options are specified inside a single -Wl directive to prevent
- # autotools from reordering them.
- #
- # OTOH newer versions of dpdk pkg-config (generated with Meson)
- # will already have flagged just the right set of libs with
- # --whole-archive - in those cases do not wrap it once more.
- case "$DPDK_LIB" in
- *whole-archive*) DPDK_vswitchd_LDFLAGS=$DPDK_LIB;;
- *) DPDK_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-whole-archive
- esac
+ # Wrap the DPDK libraries inside a single -Wl directive
+ # after comma separation to prevent autotools from reordering them.
+ DPDK_vswitchd_LDFLAGS=$(echo "$DPDK_LIB"| tr -s ' ' ',' | sed 's/-Wl,//g')
+ # Replace -pthread with -lpthread for LD and remove the last extra comma.
+ DPDK_vswitchd_LDFLAGS=$(echo "$DPDK_vswitchd_LDFLAGS"| sed 's/,$//' | \
+ sed 's/-pthread/-lpthread/g')
+ # Prepend "-Wl,".
+ DPDK_vswitchd_LDFLAGS="-Wl,$DPDK_vswitchd_LDFLAGS"
+
AC_SUBST([DPDK_vswitchd_LDFLAGS])
AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.])
fi
fi
])
+dnl OVS_FIND_OP_PARAM_IFELSE(FILE, OP, REGEX, [IF-MATCH], [IF-NO-MATCH])
+dnl
+dnl Looks for OP in FILE. If it is found, greps for REGEX within the
+dnl OP definition. If this is successful, runs IF-MATCH, otherwise
+dnl IF_NO_MATCH. If IF-MATCH is empty then it defines to
+dnl OVS_DEFINE(HAVE_<OP>_WITH_<REGEX>), with <OP> and <REGEX>
+dnl translated to uppercase.
+AC_DEFUN([OVS_FIND_OP_PARAM_IFELSE], [
+ AC_MSG_CHECKING([whether $2 has member $3 in $1])
+ if test -f $1; then
+ awk '/$2[[ \t\n]]*\)\(/,/;/' $1 2>/dev/null | grep '$3' >/dev/null
+ status=$?
+ case $status in
+ 0)
+ AC_MSG_RESULT([yes])
+ m4_if([$4], [], [OVS_DEFINE([HAVE_]m4_toupper([$2])[_WITH_]m4_toupper([$3]))], [$4])
+ ;;
+ 1)
+ AC_MSG_RESULT([no])
+ $5
+ ;;
+ *)
+ AC_MSG_ERROR([grep exited with status $status])
+ ;;
+ esac
+ else
+ AC_MSG_RESULT([file not found])
+ $5
+ fi
+])
+
dnl OVS_DEFINE(NAME)
dnl
dnl Defines NAME to 1 in kcompat.h.
OVS_GREP_IFELSE([$KSRC/include/net/ip6_fib.h], [rt6_get_cookie],
[OVS_DEFINE([HAVE_RT6_GET_COOKIE])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/net/addrconf.h], [ipv6_stub],
+ [dst_entry])
OVS_GREP_IFELSE([$KSRC/include/net/addrconf.h], [ipv6_dst_lookup.*net],
[OVS_DEFINE([HAVE_IPV6_DST_LOOKUP_NET])])
+ OVS_GREP_IFELSE([$KSRC/include/net/addrconf.h], [ipv6_dst_lookup_flow.*net],
+ [OVS_DEFINE([HAVE_IPV6_DST_LOOKUP_FLOW_NET])])
OVS_GREP_IFELSE([$KSRC/include/net/addrconf.h], [ipv6_stub])
+ OVS_GREP_IFELSE([$KSRC/include/net/addrconf.h], [ipv6_dst_lookup_flow])
OVS_GREP_IFELSE([$KSRC/include/linux/err.h], [ERR_CAST])
OVS_GREP_IFELSE([$KSRC/include/linux/err.h], [IS_ERR_OR_NULL])
[OVS_DEFINE([HAVE_UPSTREAM_STATIC_KEY])])
OVS_GREP_IFELSE([$KSRC/include/linux/jump_label.h], [DEFINE_STATIC_KEY_FALSE],
[OVS_DEFINE([HAVE_DEFINE_STATIC_KEY])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/jump_label.h],
+ [DECLARE_STATIC_KEY_FALSE],
+ [OVS_DEFINE([HAVE_DECLARE_STATIC_KEY])])
OVS_GREP_IFELSE([$KSRC/include/linux/etherdevice.h], [eth_hw_addr_random])
OVS_GREP_IFELSE([$KSRC/include/linux/etherdevice.h], [ether_addr_copy])
[max_mtu])
OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netdevice.h], [net_device_ops_extended],
[ndo_change_mtu], [OVS_DEFINE([HAVE_RHEL7_MAX_MTU])])
+ OVS_FIND_PARAM_IFELSE([$KSRC/include/linux/netdevice.h],
+ [dev_change_flags], [extack],
+ [OVS_DEFINE([HAVE_DEV_CHANGE_FLAGS_TAKES_EXTACK])])
OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hook_state])
OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hook_state],
OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hook_ops],
[owner], [OVS_DEFINE([HAVE_NF_HOOKS_OPS_OWNER])])
OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [NFPROTO_INET])
+ OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [CONFIG_NF_NAT_NEEDED])
OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netfilter_ipv6.h], [nf_ipv6_ops],
[nf_ct_set])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h],
[nf_ct_is_untracked])
+ OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h],
+ [nf_ct_invert_tuplepr])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_zones.h],
[nf_ct_zone_init])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_l3proto.h],
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_nat.h], [nf_ct_nat_ext_add])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_nat.h], [nf_nat_alloc_null_binding])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_nat.h], [nf_nat_range2])
+ OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_nat.h], [nf_nat_packet],
+ [OVS_DEFINE([HAVE_UPSTREAM_NF_NAT])])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_seqadj.h], [nf_ct_seq_adjust])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_count.h], [nf_conncount_gc_list],
- [OVS_DEFINE([HAVE_UPSTREAM_NF_CONNCOUNT])])
-
- OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32])
+ [OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_count.h],
+ [int nf_conncount_add],
+ [], [OVS_DEFINE([HAVE_UPSTREAM_NF_CONNCOUNT])])])
+ OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_timeout.h], [nf_ct_set_timeout])
+ OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_timeout.h], [struct nf_ct_timeout],
+ [OVS_DEFINE([HAVE_NF_CT_TIMEOUT])])
+ OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_timeout.h],
+ [\(*nf_ct_timeout_find_get_hook\)], [net],
+ [OVS_DEFINE([HAVE_NF_CT_TIMEOUT_FIND_GET_HOOK_NET])])
+
+ OVS_GREP_IFELSE([$KSRC/include/linux/random.h],
+ [prandom_u32[[\(]]],
+ [OVS_DEFINE([HAVE_PRANDOM_U32])])
OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32_max])
+ OVS_GREP_IFELSE([$KSRC/include/linux/prandom.h],
+ [prandom_u32[[\(]]],
+ [OVS_DEFINE([HAVE_PRANDOM_U32])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/prandom.h], [prandom_u32_max])
OVS_GREP_IFELSE([$KSRC/include/net/rtnetlink.h], [get_link_net])
OVS_GREP_IFELSE([$KSRC/include/net/rtnetlink.h], [name_assign_type])
OVS_FIND_PARAM_IFELSE([$KSRC/include/net/rtnetlink.h],
[rtnl_create_link], [extack],
[OVS_DEFINE([HAVE_RTNL_CREATE_LINK_TAKES_EXTACK])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [nf_reset_ct])
# Check for the proto_data_valid member in struct sk_buff. The [^@]
# is necessary because some versions of this header remove the
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_clear_hash])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [int.skb_zerocopy(],
[OVS_DEFINE([HAVE_SKB_ZEROCOPY])])
- OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [u8.*l4_rxhash],
- [OVS_DEFINE([HAVE_L4_RXHASH])])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_ensure_writable])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_vlan_pop])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [__skb_vlan_pop])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_nfct])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_put_zero])
- OVS_GREP_IFELSE([$KSRC/include/linux/types.h], [bool],
- [OVS_DEFINE([HAVE_BOOL_TYPE])])
OVS_GREP_IFELSE([$KSRC/include/linux/types.h], [__wsum],
[OVS_DEFINE([HAVE_CSUM_TYPES])])
OVS_GREP_IFELSE([$KSRC/include/uapi/linux/types.h], [__wsum],
OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [genlmsg_parse])
OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [genl_notify.*family],
[OVS_DEFINE([HAVE_GENL_NOTIFY_TAKES_FAMILY])])
+ OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [genl_validate_flags])
OVS_FIND_PARAM_IFELSE([$KSRC/include/net/genetlink.h],
[genl_notify], [net],
[OVS_DEFINE([HAVE_GENL_NOTIFY_TAKES_NET])])
OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_put_in_addr])
OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_find_nested])
OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_is_last])
+ OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_nest_start_noflag])
OVS_GREP_IFELSE([$KSRC/include/linux/netlink.h], [void.*netlink_set_err],
[OVS_DEFINE([HAVE_VOID_NETLINK_SET_ERR])])
OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netlink.h],
OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum])
- OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [ADD_ALL_VLANS_CMD],
- [OVS_DEFINE([HAVE_VLAN_BUG_WORKAROUND])])
OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_insert_tag_set_proto])
OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [__vlan_insert_tag])
OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_get_protocol])
OVS_GREP_IFELSE([$KSRC/include/net/sock.h], [sk_no_check_tx])
OVS_GREP_IFELSE([$KSRC/include/linux/udp.h], [no_check6_tx])
- OVS_GREP_IFELSE([$KSRC/include/linux/utsrelease.h], [el6],
- [OVS_DEFINE([HAVE_RHEL6_PER_CPU])])
OVS_FIND_PARAM_IFELSE([$KSRC/include/net/protocol.h],
[udp_add_offload], [net],
[OVS_DEFINE([HAVE_UDP_ADD_OFFLOAD_TAKES_NET])])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_helper.h],
[nf_conntrack_helper_put],
[OVS_DEFINE(HAVE_NF_CONNTRACK_HELPER_PUT)])
+ OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_helper.h],
+ [nf_nat_helper_try_module_get])
+ OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_helper.h],
+ [nf_nat_helper_put])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],[[[[:space:]]]SKB_GSO_UDP[[[:space:]]]],
[OVS_DEFINE([HAVE_SKB_GSO_UDP])])
OVS_GREP_IFELSE([$KSRC/include/net/dst.h],[DST_NOCACHE],
OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_helper.h],
[nf_ct_helper_ext_add], [nf_conntrack_helper],
[OVS_DEFINE([HAVE_NF_CT_HELPER_EXT_ADD_TAKES_HELPER])])
+ OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [gre_calc_hlen],
+ [OVS_DEFINE([HAVE_GRE_CALC_HLEN])])
+ OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [ip_gre_calc_hlen],
+ [OVS_DEFINE([HAVE_IP_GRE_CALC_HLEN])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/rbtree.h], [rb_link_node_rcu],
+ [OVS_DEFINE([HAVE_RBTREE_RB_LINK_NODE_RCU])])
+ OVS_GREP_IFELSE([$KSRC/include/net/dst_ops.h], [bool confirm_neigh],
+ [OVS_DEFINE([HAVE_DST_OPS_CONFIRM_NEIGH])])
+ OVS_GREP_IFELSE([$KSRC/include/net/inet_frag.h], [fqdir],
+ [OVS_DEFINE([HAVE_INET_FRAG_FQDIR])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/net/genetlink.h], [genl_ops],
+ [policy],
+ [OVS_DEFINE([HAVE_GENL_OPS_POLICY])])
+ OVS_GREP_IFELSE([$KSRC/include/net/netlink.h],
+ [nla_parse_deprecated_strict],
+ [OVS_DEFINE([HAVE_NLA_PARSE_DEPRECATED_STRICT])])
+ OVS_FIND_OP_PARAM_IFELSE([$KSRC/include/net/rtnetlink.h],
+ [validate], [extack],
+ [OVS_DEFINE([HAVE_RTNLOP_VALIDATE_WITH_EXTACK])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+ [__skb_set_hash])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [sw_hash])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_get_hash_raw])
if cmp -s datapath/linux/kcompat.h.new \
datapath/linux/kcompat.h >/dev/null 2>&1; then
[x86_64], [SPARSEFLAGS=-m64 CGCCFLAGS="-target=x86_64 -target=host_os_specs"],
[SPARSEFLAGS= CGCCFLAGS=])
- dnl Get the the default defines for vector instructions from compiler to
+ dnl Get the default defines for vector instructions from compiler to
dnl allow "sparse" correctly check the same code that will be built.
dnl Required for checking DPDK headers.
AC_MSG_CHECKING([vector options for cgcc])
dnl OVS_CTAGS_IDENTIFIERS
dnl
-dnl ctags ignores symbols with extras identifiers. This builds a list of
-dnl specially handled identifiers to be ignored.
+dnl ctags ignores symbols with extras identifiers. This is a list of
+dnl specially handled identifiers to be ignored. [ctags(1) -I <list>].
AC_DEFUN([OVS_CTAGS_IDENTIFIERS],
AC_SUBST([OVS_CTAGS_IDENTIFIERS_LIST],
- [`printf %s '-I "'; sed -n 's/^#define \(OVS_[A-Z_]\+\)(\.\.\.)$/\1+/p' ${srcdir}/include/openvswitch/compiler.h | tr \\\n ' ' ; printf '"'`] ))
+ ["OVS_LOCKABLE OVS_NO_THREAD_SAFETY_ANALYSIS OVS_REQ_RDLOCK+ OVS_ACQ_RDLOCK+ OVS_REQ_WRLOCK+ OVS_ACQ_WRLOCK+ OVS_REQUIRES+ OVS_ACQUIRES+ OVS_TRY_WRLOCK+ OVS_TRY_RDLOCK+ OVS_TRY_LOCK+ OVS_GUARDED_BY+ OVS_EXCLUDED+ OVS_RELEASES+ OVS_ACQ_BEFORE+ OVS_ACQ_AFTER+"]))
dnl OVS_PTHREAD_SET_NAME
dnl