# -*- autoconf -*-
-# Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Nicira, Inc.
+# Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 Nicira, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
else
FLAKE8_WERROR=-
fi
- AC_SUBST([FLAKE8_WERROR])])
+ AC_SUBST([FLAKE8_WERROR])
+
+ # If --enable-Werror is specified, fail the build on sparse warnings.
+ if test "X$enable_Werror" = Xyes; then
+ SPARSE_WERROR=-Wsparse-error
+ else
+ SPARSE_WERROR=
+ fi
+ AC_SUBST([SPARSE_WERROR])])
dnl OVS_CHECK_LINUX
dnl
fi
AC_MSG_RESULT([$kversion])
- if test "$version" -ge 4; then
- if test "$version" = 4 && test "$patchlevel" -le 12; then
- : # Linux 4.x
+ if test "$version" -ge 5; then
+ if test "$version" = 5 && test "$patchlevel" -le 0; then
+ : # Linux 5.x
else
- AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.11.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.0.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_IP_TTL_MASK;
+ int x = TCA_ACT_FLAGS;
])],
- [AC_DEFINE([HAVE_TCA_FLOWER_KEY_IP_TTL_MASK], [1],
- [Define to 1 if TCA_FLOWER_KEY_IP_TTL_MASK is avaiable.])])
+ [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>], [
int x = TCA_VLAN_PUSH_VLAN_PRIORITY;
])],
[AC_DEFINE([HAVE_TCA_VLAN_PUSH_VLAN_PRIORITY], [1],
- [Define to 1 if TCA_VLAN_PUSH_VLAN_PRIORITY is avaiable.])])
+ [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_DST_PORT;
+ int x = TCA_TUNNEL_KEY_ENC_TTL;
+ ])],
+ [AC_DEFINE([HAVE_TCA_TUNNEL_KEY_ENC_TTL], [1],
+ [Define to 1 if TCA_TUNNEL_KEY_ENC_TTL is available.])])
+
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([#include <linux/tc_act/tc_pedit.h>], [
+ int x = TCA_PEDIT_KEY_EX_HDR_TYPE_UDP;
+ ])],
+ [AC_DEFINE([HAVE_TCA_PEDIT_KEY_EX_HDR_TYPE_UDP], [1],
+ [Define to 1 if TCA_PEDIT_KEY_EX_HDR_TYPE_UDP is available.])])
+
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([#include <linux/tc_act/tc_skbedit.h>], [
+ int x = TCA_SKBEDIT_FLAGS;
])],
- [AC_DEFINE([HAVE_TCA_TUNNEL_KEY_ENC_DST_PORT], [1],
- [Define to 1 if TCA_TUNNEL_KEY_ENC_DST_PORT is avaiable.])])
+ [AC_DEFINE([HAVE_TCA_SKBEDIT_FLAGS], [1],
+ [Define to 1 if TCA_SKBEDIT_FLAGS is available.])])
+])
+
+dnl OVS_CHECK_LINUX_SCTP_CT
+dnl
+dnl Checks for kernels which need additional SCTP state
+AC_DEFUN([OVS_CHECK_LINUX_SCTP_CT], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([#include <linux/netfilter/nfnetlink.h>
+#include <linux/netfilter/nfnetlink_conntrack.h>
+#include <linux/netfilter/nf_conntrack_common.h>
+#include <linux/netfilter/nf_conntrack_sctp.h>], [
+ int x = SCTP_CONNTRACK_HEARTBEAT_SENT;
+ ])],
+ [AC_DEFINE([HAVE_SCTP_CONNTRACK_HEARTBEATS], [1],
+ [Define to 1 if SCTP_CONNTRACK_HEARTBEAT_SENT is available.])])
+])
+
+dnl OVS_FIND_DEPENDENCY(FUNCTION, SEARCH_LIBS, NAME_TO_PRINT)
+dnl
+dnl Check for a function in a library list.
+AC_DEFUN([OVS_FIND_DEPENDENCY], [
+ AC_SEARCH_LIBS([$1], [$2], [], [
+ AC_MSG_ERROR([unable to find $3, install the dependency package])
+ ])
+])
+
+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])])
+
+ 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
[Specify the DPDK build directory])],
[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
case "$with_dpdk" in
yes)
DPDK_AUTO_DISCOVER="true"
- PKG_CHECK_MODULES([DPDK], [libdpdk],
- [DPDK_INCLUDE="$DPDK_CFLAGS"],
- [DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"])
+ 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="-I$DPDK_INCLUDE_PATH/dpdk"
fi
DPDK_LIB_DIR="$with_dpdk/lib"
+ DPDK_LIB="-ldpdk"
;;
esac
- DPDK_LIB="-ldpdk"
- DPDK_EXTRA_LIB=""
-
ovs_save_CFLAGS="$CFLAGS"
ovs_save_LDFLAGS="$LDFLAGS"
CFLAGS="$CFLAGS $DPDK_INCLUDE"
LDFLAGS="$LDFLAGS -L${DPDK_LIB_DIR}"
fi
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM(
- [
- #include <rte_config.h>
-#if RTE_LIBRTE_VHOST_NUMA
-#error
-#endif
- ], [])
- ], [],
- [AC_SEARCH_LIBS([get_mempolicy],[numa],[],[AC_MSG_ERROR([unable to find libnuma, install the dependency package])])
- DPDK_EXTRA_LIB="-lnuma"
- AC_DEFINE([VHOST_NUMA], [1], [NUMA Aware vHost support detected in DPDK.])])
-
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM(
- [
- #include <rte_config.h>
-#if RTE_LIBRTE_PMD_PCAP
-#error
-#endif
- ], [])
- ], [],
- [AC_SEARCH_LIBS([pcap_dump],[pcap],[],[AC_MSG_ERROR([unable to find libpcap, install the dependency package])])
- DPDK_EXTRA_LIB="-lpcap"
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM(
- [
- #include <rte_config.h>
-#if RTE_LIBRTE_PDUMP
-#error
-#endif
- ], [])
- ], [],
- [AC_DEFINE([DPDK_PDUMP], [1], [DPDK pdump enabled in OVS.])])
- ])
-
- # On some systems we have to add -ldl to link with dpdk
- #
- # This code, at first, tries to link without -ldl (""),
- # then adds it and tries again.
- # Before each attempt the search cache must be unset,
- # otherwise autoconf will stick with the old result
+ AC_CHECK_HEADERS([rte_config.h], [], [
+ AC_MSG_ERROR([unable to find rte_config.h in $with_dpdk])
+ ], [AC_INCLUDES_DEFAULT])
+
+ AC_CHECK_DECLS([RTE_LIBRTE_VHOST_NUMA, RTE_EAL_NUMA_AWARE_HUGEPAGES], [
+ 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.])
+ ], [], [[#include <rte_config.h>]])
+
+ AC_MSG_CHECKING([whether DPDK pdump support is enabled])
+ AC_ARG_ENABLE(
+ [dpdk-pdump],
+ [AC_HELP_STRING([--enable-dpdk-pdump],
+ [Enable DPDK pdump packet capture support])],
+ [AC_MSG_RESULT([yes])
+ AC_MSG_WARN([DPDK pdump is deprecated, consider using ovs-tcpdump instead])
+ 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.])
+ ], [
+ AC_MSG_ERROR([RTE_LIBRTE_PDUMP is not defined in rte_config.h])
+ ], [[#include <rte_config.h>]])
+ ], [
+ AC_MSG_ERROR([RTE_LIBRTE_PMD_PCAP is not defined in rte_config.h])
+ ], [[#include <rte_config.h>]])],
+ [AC_MSG_RESULT([no])])
+
+ 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
+ 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
+ OVS_FIND_DEPENDENCY([mlx4dv_init_obj], [mlx4], [libmlx4])
+ OVS_FIND_DEPENDENCY([verbs_init_cq], [ibverbs], [libibverbs])
+ ], [[#include <rte_config.h>]])
+ ], [], [[#include <rte_config.h>]])
+
+ # DPDK uses dlopen to load plugins.
+ OVS_FIND_DEPENDENCY([dlopen], [dl], [libdl])
+
+ AC_MSG_CHECKING([whether linking with dpdk works])
+ LIBS="$DPDK_LIB $LIBS"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <rte_config.h>
+ #include <rte_eal.h>],
+ [int rte_argc; char ** rte_argv;
+ rte_eal_init(rte_argc, rte_argv);])],
+ [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
+ ])
- DPDKLIB_FOUND=false
- save_LIBS=$LIBS
- for extras in "" "-ldl"; do
- LIBS="$DPDK_LIB $extras $save_LIBS $DPDK_EXTRA_LIB"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([#include <rte_config.h>
- #include <rte_eal.h>],
- [int rte_argc; char ** rte_argv;
- rte_eal_init(rte_argc, rte_argv);])],
- [DPDKLIB_FOUND=true])
- if $DPDKLIB_FOUND; then
- break
- fi
- done
-
- # If linking unsuccessful
- if test "$DPDKLIB_FOUND" = "false" ; then
- if $DPDK_AUTO_DISCOVER; then
- AC_MSG_ERROR([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
- fi
CFLAGS="$ovs_save_CFLAGS"
LDFLAGS="$ovs_save_LDFLAGS"
if test "$DPDK_AUTO_DISCOVER" = "false"; then
#
# These options are specified inside a single -Wl directive to prevent
# autotools from reordering them.
- DPDK_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-whole-archive
+ #
+ # 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
AC_SUBST([DPDK_vswitchd_LDFLAGS])
AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.])
fi
OVS_GREP_IFELSE([$KSRC/arch/x86/include/asm/checksum_32.h], [src_err,],
[OVS_DEFINE([HAVE_CSUM_COPY_DBG])])
+ OVS_GREP_IFELSE([$KSRC/include/net/ip6_fib.h], [rt6_get_cookie],
+ [OVS_DEFINE([HAVE_RT6_GET_COOKIE])])
+
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_stub])
OVS_GREP_IFELSE([$KSRC/include/linux/err.h], [IS_ERR_OR_NULL])
OVS_GREP_IFELSE([$KSRC/include/linux/err.h], [PTR_ERR_OR_ZERO])
+ OVS_GREP_IFELSE([$KSRC/include/linux/jump_label.h], [static_branch_unlikely(],
+ [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/etherdevice.h], [eth_hw_addr_random])
OVS_GREP_IFELSE([$KSRC/include/linux/etherdevice.h], [ether_addr_copy])
OVS_GREP_IFELSE([$KSRC/include/linux/if_link.h], [rtnl_link_stats64])
OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_set_encap_proto])
OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_hwaccel_push_inside])
+ OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [__vlan_hwaccel_clear_tag])
OVS_GREP_IFELSE([$KSRC/include/linux/in.h], [ipv4_is_multicast])
OVS_GREP_IFELSE([$KSRC/include/linux/in.h], [proto_ports_offset])
[OVS_GREP_IFELSE([$KSRC/include/net/ip_tunnels.h],
[iptunnel_pull_offloads],
[OVS_GREP_IFELSE([$KSRC/include/net/dst_cache.h], [dst_cache],
- [OVS_DEFINE([USE_UPSTREAM_TUNNEL])])])])
+ [OVS_GREP_IFELSE([$KSRC/include/net/erspan.h], [erspan_md2],
+ [OVS_DEFINE([USE_UPSTREAM_TUNNEL])])])])])
+ OVS_GREP_IFELSE([$KSRC/include/net/dst_cache.h], [dst_cache],
+ [OVS_DEFINE([USE_BUILTIN_DST_CACHE])])
OVS_GREP_IFELSE([$KSRC/include/net/mpls.h], [mpls_hdr],
[OVS_DEFINE([MPLS_HEADER_IS_L3])])
OVS_GREP_IFELSE([$KSRC/include/linux/net.h], [sock_create_kern.*net],
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [dev_get_by_index_rcu])
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [dev_recursion_level])
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [__skb_gso_segment])
+ OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [skb_gso_error_unwind])
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [can_checksum_protocol])
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [ndo_get_iflink])
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [ndo_features_check],
[OVS_DEFINE([USE_UPSTREAM_TUNNEL_GSO])])
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [ndo_add_vxlan_port])
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [ndo_add_geneve_port])
+ OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [ndo_udp_tunnel_add])
OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [netdev_features_t])
dnl Ubuntu kernel 3.13 has defined this struct but not used for netdev->tstats.
dnl So check type of tstats.
OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netdevice.h], [net_device],
[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],
+ [struct net ], [OVS_DEFINE([HAVE_NF_HOOK_STATE_NET])])
OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_register_net_hook])
OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hookfn.*nf_hook_ops],
[OVS_DEFINE([HAVE_NF_HOOKFN_ARG_OPS])])
[OVS_DEFINE([HAVE_NF_HOOKFN_ARG_PRIV])])
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],
[fragment.*sock], [OVS_DEFINE([HAVE_NF_IPV6_OPS_FRAGMENT])])
[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],
+ [net_ns_get])
OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_labels.h],
[nf_connlabels_get])
OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_labels.h],
[nf_conn_labels], [words])
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/linux/random.h], [prandom_u32])
+ OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_count.h], [nf_conncount_gc_list],
+ [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/net/rtnetlink.h], [get_link_net])
[OVS_GREP_IFELSE([$KSRC/include/linux/rtnetlink.h],
[rcu_read_lock_held])])
OVS_GREP_IFELSE([$KSRC/include/linux/rtnetlink.h], [lockdep_rtnl_is_held])
+ OVS_GREP_IFELSE([$KSRC/include/linux/rtnetlink.h], [net_rwsem])
+ 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/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/netfilter/nf_conntrack_helper.h],
[nf_conntrack_helper_put],
[OVS_DEFINE(HAVE_NF_CONNTRACK_HELPER_PUT)])
- OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],[SKB_GSO_UDP],
+ 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_DEFINE([HAVE_DST_NOCACHE])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/net/rtnetlink.h], [rtnl_link_ops],
+ [extack],
+ [OVS_DEFINE([HAVE_EXT_ACK_IN_RTNL_LINKOPS])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hook_ops],
+ [list],
+ [OVS_DEFINE([HAVE_LIST_IN_NF_HOOK_OPS])])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/netfilter/nf_conntrack_common.h],
+ [IP_CT_UNTRACKED])
+ OVS_FIND_PARAM_IFELSE([$KSRC/include/linux/netdevice.h],
+ [netdev_master_upper_dev_link], [extack],
+ [OVS_DEFINE([HAVE_UPPER_DEV_LINK_EXTACK])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/compiler_types.h],
+ [__LINUX_COMPILER_TYPES_H],
+ [OVS_DEFINE([HAVE_LINUX_COMPILER_TYPES_H])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/timekeeping.h],
+ [ktime_get_ts64],
+ [OVS_DEFINE([HAVE_KTIME_GET_TS64])])
+ OVS_GREP_IFELSE([$KSRC/include/net/net_namespace.h],
+ [EXPORT_SYMBOL_GPL(peernet2id_alloc)],
+ [OVS_DEFINE([HAVE_PEERNET2ID_ALLOC])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/timekeeping.h],
+ [ktime_get_ns],
+ [OVS_DEFINE([HAVE_KTIME_GET_NS])])
+ OVS_GREP_IFELSE([$KSRC/include/net/inet_frag.h],
+ frag_percpu_counter_batch[],
+ [OVS_DEFINE([HAVE_FRAG_PERCPU_COUNTER_BATCH])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+ [null_compute_pseudo],
+ [OVS_DEFINE([HAVE_NULL_COMPUTE_PSEUDO])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+ [__skb_checksum_convert],
+ [OVS_DEFINE([HAVE_SKB_CHECKSUM_CONVERT])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netdevice.h], [net_device],
+ [max_mtu],
+ [OVS_DEFINE([HAVE_NET_DEVICE_MAX_MTU])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/net/ip6_tunnel.h], [__ip6_tnl_parm],
+ [erspan_ver],
+ [OVS_DEFINE([HAVE_IP6_TNL_PARM_ERSPAN_VER])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+ [SKB_GSO_IPXIP6],
+ [OVS_DEFINE([HAVE_SKB_GSO_IPXIP6])])
+ OVS_FIND_PARAM_IFELSE([$KSRC/include/net/ipv6.h],
+ [ip6_make_flowlabel], [fl6],
+ [OVS_DEFINE([HAVE_IP6_MAKE_FLOWLABEL_FL6])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/net/ipv6.h], [netns_sysctl_ipv6],
+ [auto_flowlabels],
+ [OVS_DEFINE([HAVE_NETNS_SYSCTL_IPV6_AUTO_FLOWLABELS])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h],
+ [netif_keep_dst],
+ [OVS_DEFINE([HAVE_NETIF_KEEP_DST])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netdevice.h], [net_device_ops],
+ [ndo_get_iflink],
+ [OVS_DEFINE([HAVE_NDO_GET_IFLINK])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+ [skb_set_inner_ipproto],
+ [OVS_DEFINE([HAVE_SKB_SET_INNER_IPPROTO])])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [tunnel_encap_types],
+ [OVS_DEFINE([HAVE_TUNNEL_ENCAP_TYPES])])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_IPTUN_ENCAP_TYPE],
+ [OVS_DEFINE([HAVE_IFLA_IPTUN_ENCAP_TYPE])])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_IPTUN_COLLECT_METADATA],
+ [OVS_DEFINE([HAVE_IFLA_IPTUN_COLLECT_METADATA])])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_GRE_ENCAP_DPORT])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_GRE_COLLECT_METADATA])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_GRE_IGNORE_DF])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_GRE_FWMARK])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_GRE_ERSPAN_INDEX])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_GRE_ERSPAN_HWID])
+ OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
+ [IFLA_IPTUN_FWMARK])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/skbuff.h], [sk_buff],
+ [csum_valid],
+ [OVS_DEFINE([HAVE_SKBUFF_CSUM_VALID])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/skbuff.h], [sk_buff],
+ [vlan_present],
+ [OVS_DEFINE([HAVE_SKBUFF_VLAN_PRESENT])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+ [skb_checksum_simple_validate])
+ OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h],
+ [void.*ndo_get_stats64],
+ [OVS_DEFINE([HAVE_VOID_NDO_GET_STATS64])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/timer.h], [init_timer_deferrable],
+ [OVS_DEFINE([HAVE_INIT_TIMER_DEFERRABLE])])
+ OVS_FIND_PARAM_IFELSE([$KSRC/include/net/ip_tunnels.h],
+ [ip_tunnel_info_opts_set], [flags],
+ [OVS_DEFINE([HAVE_IP_TUNNEL_INFO_OPTS_SET_FLAGS])])
+ OVS_FIND_FIELD_IFELSE([$KSRC/include/net/inet_frag.h], [inet_frags],
+ [rnd],
+ [OVS_DEFINE([HAVE_INET_FRAGS_RND])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/overflow.h], [__LINUX_OVERFLOW_H],
+ [OVS_DEFINE([HAVE_OVERFLOW_H])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/overflow.h], [struct_size],
+ [OVS_DEFINE([HAVE_STRUCT_SIZE])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/mm.h], [kvmalloc_array],
+ [OVS_DEFINE([HAVE_KVMALLOC_ARRAY])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/mm.h], [kvmalloc_node],
+ [OVS_DEFINE([HAVE_KVMALLOC_NODE])])
+ OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_l3proto.h],
+ [nf_conntrack_l3proto],
+ [OVS_DEFINE([HAVE_NF_CONNTRACK_L3PROATO_H])])
+ OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_core.h],
+ [nf_conntrack_in], [nf_hook_state],
+ [OVS_DEFINE([HAVE_NF_CONNTRACK_IN_TAKES_NF_HOOK_STATE])])
+ OVS_GREP_IFELSE([$KSRC/include/net/ipv6_frag.h], [IP6_DEFRAG_CONNTRACK_IN],
+ [OVS_DEFINE([HAVE_IPV6_FRAG_H])])
+ 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])])
if cmp -s datapath/linux/kcompat.h.new \
datapath/linux/kcompat.h >/dev/null 2>&1; then
fi
])
-dnl Checks for net/if_packet.h.
-AC_DEFUN([OVS_CHECK_IF_PACKET],
- [AC_CHECK_HEADER([net/if_packet.h],
- [HAVE_IF_PACKET=yes],
- [HAVE_IF_PACKET=no])
- AM_CONDITIONAL([HAVE_IF_PACKET], [test "$HAVE_IF_PACKET" = yes])
- if test "$HAVE_IF_PACKET" = yes; then
- AC_DEFINE([HAVE_IF_PACKET], [1],
- [Define to 1 if net/if_packet.h is available.])
- fi])
-
dnl Checks for net/if_dl.h.
dnl
dnl (We use this as a proxy for checking whether we're building on FreeBSD
dnl gcc: unrecognized option '-Qunused-arguments'
dnl 0
dnl %
- CFLAGS="$CFLAGS $WERROR $1"
+ dnl
+ dnl In addition, GCC does not complain about a -Wno-<foo> option that
+ dnl it does not understand, unless it has another error to report, so
+ dnl instead of testing for -Wno-<foo>, test for the positive version.
+ CFLAGS="$CFLAGS $WERROR m4_bpatsubst([$1], [-Wno-], [-W])"
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([int x;])],
[if test -s conftest.err && grep "unrecognized option" conftest.err
[x86_64-*], [ac_cv_sparse_target=x86_64],
[ac_cv_sparse_target=other])])
AS_CASE([$ac_cv_sparse_target],
- [x86], [SPARSEFLAGS= CGCCFLAGS=-target=i86],
- [x86_64], [SPARSEFLAGS=-m64 CGCCFLAGS=-target=x86_64],
+ [x86], [SPARSEFLAGS= CGCCFLAGS="-target=i86 -target=host_os_specs"],
+ [x86_64], [SPARSEFLAGS=-m64 CGCCFLAGS="-target=x86_64 -target=host_os_specs"],
[SPARSEFLAGS= CGCCFLAGS=])
+
+ 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])
+ VECTOR=$($CC -dM -E - < /dev/null | grep -E "MMX|SSE|AVX" | \
+ cut -c 9- | sed 's/ /=/' | sed 's/^/-D/' | tr '\n' ' ')
+ AC_MSG_RESULT([$VECTOR])
+ CGCCFLAGS="$CGCCFLAGS $VECTOR"
+
AC_SUBST([SPARSEFLAGS])
AC_SUBST([CGCCFLAGS])])
: ${SPARSE=sparse}
AC_SUBST([SPARSE])
AC_CONFIG_COMMANDS_PRE(
- [CC='$(if $(C),env REAL_CC="'"$CC"'" CHECK="$(SPARSE) -I $(top_srcdir)/include/sparse $(SPARSEFLAGS) $(SPARSE_EXTRA_INCLUDES) " cgcc $(CGCCFLAGS),'"$CC"')'])])
+ [CC='$(if $(C:0=),env REAL_CC="'"$CC"'" CHECK="$(SPARSE) $(SPARSE_WERROR) -I $(top_srcdir)/include/sparse $(SPARSEFLAGS) $(SPARSE_EXTRA_INCLUDES) " cgcc $(CGCCFLAGS),'"$CC"')'])
+
+ AC_ARG_ENABLE(
+ [sparse],
+ [AC_HELP_STRING([--enable-sparse], [Run "sparse" by default])],
+ [], [enable_sparse=no])
+ AM_CONDITIONAL([ENABLE_SPARSE_BY_DEFAULT], [test $enable_sparse = yes])])
dnl OVS_CTAGS_IDENTIFIERS
dnl