X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=acinclude.m4;h=52d0209ab88aee33cf5e8d3762724c8dd6298bd9;hb=refs%2Fheads%2Frtnetlink;hp=5e34d92de52f5e0b3be6c76696814cc8ccfa54de;hpb=46d69d187e2eac37523efd535085cb8a29633615;p=cascardo%2Fovs.git diff --git a/acinclude.m4 b/acinclude.m4 index 5e34d92de..52d0209ab 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -134,19 +134,15 @@ AC_DEFUN([OVS_CHECK_LINUX], [ AC_MSG_RESULT([$kversion]) if test "$version" -ge 4; then - if test "$version" = 4 && test "$patchlevel" -le 0; then + if test "$version" = 4 && test "$patchlevel" -le 3; then : # Linux 4.x else - AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.0.x is not supported (please refer to the FAQ for advice)]) + AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.3.x is not supported (please refer to the FAQ for advice)]) fi - elif test "$version" = 3; then + elif test "$version" = 3 && test "$patchlevel" -ge 10; then : # Linux 3.x else - if test "$version" -le 1 || test "$patchlevel" -le 5 || test "$sublevel" -le 31; then - AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version 2.6.32 or later is required]) - else - : # Linux 2.6.x - fi + AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version 3.10 or later is required]) fi if (test ! -e "$KBUILD"/include/linux/version.h && \ test ! -e "$KBUILD"/include/generated/uapi/linux/version.h)|| \ @@ -165,28 +161,53 @@ 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])]) + [Specify the DPDK build directory])], + [have_dpdk=true]) - if test X"$with_dpdk" != X; then - RTE_SDK=$with_dpdk + AC_MSG_CHECKING([whether dpdk datapath 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" + DPDK_INCLUDE="/usr/local/include/dpdk -I/usr/include/dpdk" + ;; + *) + DPDK_AUTO_DISCOVER="false" + DPDK_INCLUDE="$with_dpdk/include" + # If 'with_dpdk' is passed install directory, point to headers + # installed in $DESTDIR/$prefix/include/dpdk + AC_CHECK_FILE([$DPDK_INCLUDE/rte_config.h], [], + [AC_CHECK_FILE([$DPDK_INCLUDE/dpdk/rte_config.h], + [DPDK_INCLUDE=$DPDK_INCLUDE/dpdk], [])]) + DPDK_LIB_DIR="$with_dpdk/lib" + ;; + esac - DPDK_INCLUDE=$RTE_SDK/include - DPDK_LIB_DIR=$RTE_SDK/lib - DPDK_LIB="-lintel_dpdk" + DPDK_LIB="-ldpdk" DPDK_EXTRA_LIB="" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([#include <$RTE_SDK/include/rte_config.h> -#if !RTE_LIBRTE_VHOST_USER -#error -#endif], [])], - [], [AC_DEFINE([VHOST_CUSE], [1], [DPDK vhost-cuse support enabled, vhost-user disabled.]) - DPDK_EXTRA_LIB="-lfuse"]) - ovs_save_CFLAGS="$CFLAGS" ovs_save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -L$DPDK_LIB_DIR" CFLAGS="$CFLAGS -I$DPDK_INCLUDE" + if test "$DPDK_AUTO_DISCOVER" = "false"; then + LDFLAGS="$LDFLAGS -L${DPDK_LIB_DIR}" + fi + + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [ + #include +#if !RTE_LIBRTE_VHOST_USER +#error +#endif + ], []) + ], [], + [AC_DEFINE([VHOST_CUSE], [1], [DPDK vhost-cuse support enabled, vhost-user disabled.]) + DPDK_EXTRA_LIB="-lfuse"]) # On some systems we have to add -ldl to link with dpdk # @@ -195,27 +216,36 @@ AC_DEFUN([OVS_CHECK_DPDK], [ # Before each attempt the search cache must be unset, # otherwise autoconf will stick with the old result - found=false + DPDKLIB_FOUND=false save_LIBS=$LIBS for extras in "" "-ldl"; do - LIBS="$DPDK_LIB $extras $save_LIBS $DPDK_EXTRA_LIB" + LIBS="$DPDK_LIB $extras $save_LIBS $DPDK_EXTRA_LIB -lnuma" AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include #include ], [int rte_argc; char ** rte_argv; rte_eal_init(rte_argc, rte_argv);])], - [found=true]) - if $found; then + [DPDKLIB_FOUND=true]) + if $DPDKLIB_FOUND; then break fi done - if $found; then :; else - AC_MSG_ERROR([cannot link with dpdk]) + + # 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" - OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR" - OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE -mssse3" + if test "$DPDK_AUTO_DISCOVER" = "false"; then + OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR" + fi + OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE" + OVS_ENABLE_OPTION([-mssse3]) # DPDK pmd drivers are not linked unless --whole-archive is used. # @@ -228,12 +258,9 @@ AC_DEFUN([OVS_CHECK_DPDK], [ DPDK_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-whole-archive AC_SUBST([DPDK_vswitchd_LDFLAGS]) AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.]) - - else - RTE_SDK= fi - AM_CONDITIONAL([DPDK_NETDEV], test -n "$RTE_SDK") + AM_CONDITIONAL([DPDK_NETDEV], test "$DPDKLIB_FOUND" = true) ]) dnl OVS_GREP_IFELSE(FILE, REGEX, [IF-MATCH], [IF-NO-MATCH]) @@ -296,6 +323,39 @@ AC_DEFUN([OVS_FIND_FIELD_IFELSE], [ fi ]) +dnl OVS_FIND_PARAM_IFELSE(FILE, FUNCTION, REGEX, [IF-MATCH], [IF-NO-MATCH]) +dnl +dnl Looks for FUNCTION in FILE. If it is found, greps for REGEX within +dnl the function signature starting from the line matching FUNCTION +dnl and ending with the line containing the closing parenthesis. If +dnl this is successful, runs IF-MATCH, otherwise IF_NO_MATCH. If +dnl IF-MATCH is empty then it defines to +dnl OVS_DEFINE(HAVE__WITH_), with and +dnl translated to uppercase. +AC_DEFUN([OVS_FIND_PARAM_IFELSE], [ + AC_MSG_CHECKING([whether $2 has parameter $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. @@ -305,42 +365,128 @@ AC_DEFUN([OVS_DEFINE], [ dnl OVS_CHECK_LINUX_COMPAT dnl -dnl Runs various Autoconf checks on the Linux 2.6 kernel source in +dnl Runs various Autoconf checks on the Linux kernel source in dnl the directory in $KBUILD. AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ rm -f datapath/linux/kcompat.h.new mkdir -p datapath/linux : > datapath/linux/kcompat.h.new + echo '#include +#ifndef RHEL_RELEASE_CODE +#define RHEL_RELEASE_CODE 0 +#define RHEL_RELEASE_VERSION(a, b) 0 +#endif' >> datapath/linux/kcompat.h.new + 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/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], [ERR_CAST]) OVS_GREP_IFELSE([$KSRC/include/linux/err.h], [IS_ERR_OR_NULL]) 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/uapi/linux/if_link.h], [IFLA_GENEVE_TOS]) + OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_link.h], [rtnl_link_stats64]) + 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/in.h], [ipv4_is_multicast]) OVS_GREP_IFELSE([$KSRC/include/linux/in.h], [proto_ports_offset]) OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [__ip_select_ident.*dst_entry], [OVS_DEFINE([HAVE_IP_SELECT_IDENT_USING_DST_ENTRY])]) + OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [__ip_select_ident.*net], + [OVS_DEFINE([HAVE_IP_SELECT_IDENT_USING_NET])]) + OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [inet_get_local_port_range.*net], [OVS_DEFINE([HAVE_INET_GET_LOCAL_PORT_RANGE_USING_NET])]) - + OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [ip_defrag.*net], + [OVS_DEFINE([HAVE_IP_DEFRAG_TAKES_NET])]) + OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [ip_do_fragment]) + OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [ip_skb_dst_mtu]) + + OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [IPSKB_FRAG_PMTU], + [OVS_DEFINE([HAVE_CORRECT_MRU_HANDLING])]) + OVS_GREP_IFELSE([$KSRC/include/net/ip_tunnels.h], [__ip_tunnel_change_mtu]) + OVS_GREP_IFELSE([$KSRC/include/net/inet_frag.h], [hashfn.*const], + [OVS_DEFINE([HAVE_INET_FRAGS_CONST])]) + OVS_GREP_IFELSE([$KSRC/include/net/inet_frag.h], [last_in], + [OVS_DEFINE([HAVE_INET_FRAGS_LAST_IN])]) + OVS_GREP_IFELSE([$KSRC/include/net/inet_frag.h], [inet_frag_evicting]) + OVS_FIND_FIELD_IFELSE([$KSRC/include/net/inet_frag.h], [inet_frags], + [frags_work]) + OVS_FIND_FIELD_IFELSE([$KSRC/include/net/inet_frag.h], [inet_frags], + [rwlock]) + OVS_FIND_FIELD_IFELSE([$KSRC/include/net/inet_frag.h], [inet_frag_queue], + [list_evictor]) + OVS_GREP_IFELSE([$KSRC/include/net/inetpeer.h], [vif], + [OVS_DEFINE([HAVE_INETPEER_VIF_SUPPORT])]) + + OVS_GREP_IFELSE([$KSRC/include/net/dst_metadata.h], [metadata_dst]) + + OVS_GREP_IFELSE([$KSRC/include/linux/net.h], [sock_create_kern.*net], + [OVS_DEFINE([HAVE_SOCK_CREATE_KERN_NET])]) OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [dev_disable_lro]) OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [dev_get_stats]) 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], [can_checksum_protocol]) + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [ndo_get_iflink]) OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [netdev_features_t]) - OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [pcpu_sw_netstats]) + dnl Ubuntu kernel 3.13 has defined this struct but not used for netdev->tstats. + dnl So check type of tstats. + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [pcpu_sw_netstats.*tstats], + [OVS_DEFINE([HAVE_PCPU_SW_NETSTATS])]) + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [netif_needs_gso.*net_device], + [OVS_DEFINE([HAVE_NETIF_NEEDS_GSO_NETDEV])]) + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [udp_offload]) + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [udp_offload.*uoff], + [OVS_DEFINE([HAVE_UDP_OFFLOAD_ARG_UOFF])]) + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [gro_remcsum]) + + OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hook_state]) + 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_FIND_FIELD_IFELSE([$KSRC/include/linux/netfilter_ipv6.h], [nf_ipv6_ops], + [fragment.*sock], [OVS_DEFINE([HAVE_NF_IPV6_OPS_FRAGMENT])]) + + OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h], + [nf_ct_tmpl_alloc], [nf_conntrack_zone], + [OVS_DEFINE([HAVE_NF_CT_TMPL_ALLOC_TAKES_STRUCT_ZONE])]) + OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h], + [nf_ct_get_tuplepr], [struct.net], + [OVS_DEFINE([HAVE_NF_CT_GET_TUPLEPR_TAKES_STRUCT_NET])]) + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_zones.h], + [nf_ct_zone_init]) + 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_connlabels_get], [int bit], + [OVS_DEFINE([HAVE_NF_CONNLABELS_GET_TAKES_BIT])]) + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/ipv6/nf_defrag_ipv6.h], + [nf_ct_frag6_consume_orig]) + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/ipv6/nf_defrag_ipv6.h], + [nf_ct_frag6_output]) + 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_conntrack_seqadj.h], [nf_ct_seq_adjust]) OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [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/net/rtnetlink.h], [name_assign_type]) + OVS_GREP_IFELSE([$KSRC/include/net/rtnetlink.h], [rtnl_create_link.*src_net], + [OVS_DEFINE([HAVE_RTNL_CREATE_LINK_SRC_NET])]) + OVS_GREP_IFELSE([$KSRC/include/net/net_namespace.h], [possible_net_t]) OVS_GREP_IFELSE([$KSRC/include/linux/rcupdate.h], [rcu_read_lock_held], [], [OVS_GREP_IFELSE([$KSRC/include/linux/rtnetlink.h], @@ -354,7 +500,13 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ # quoting rules. OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [[[^@]]proto_data_valid], [OVS_DEFINE([HAVE_PROTO_DATA_VALID])]) + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_checksum_start_offset]) + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [inner_protocol]) + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [inner_mac_header]) + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [inner_network_header]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [kfree_skb_list]) + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_scrub_packet.*xnet], + [OVS_DEFINE([HAVE_SKB_SCRUB_PACKET_XNET])]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [rxhash]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [u16.*rxhash], [OVS_DEFINE([HAVE_U16_RXHASH])]) @@ -365,10 +517,6 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_reset_tail_pointer]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_cow_head]) - OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_transport_header], - [OVS_DEFINE([HAVE_SKBUFF_HEADER_HELPERS])]) - OVS_GREP_IFELSE([$KSRC/include/linux/icmpv6.h], [icmp6_hdr], - [OVS_DEFINE([HAVE_ICMP6_HDR])]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_warn_if_lro], [OVS_DEFINE([HAVE_SKB_WARN_LRO])]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [consume_skb]) @@ -378,7 +526,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_reset_mac_len]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_unclone]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_orphan_frags]) - OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_get_hash]) + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_get_hash(], + [OVS_DEFINE([HAVE_SKB_GET_HASH])]) 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])]) @@ -398,6 +547,9 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_GREP_IFELSE([$KSRC/include/net/checksum.h], [csum_replace4]) OVS_GREP_IFELSE([$KSRC/include/net/checksum.h], [csum_unfold]) + OVS_GREP_IFELSE([$KSRC/include/net/dst.h], [dst_discard_sk]) + OVS_GREP_IFELSE([$KSRC/include/net/dst.h], [__skb_dst_copy]) + OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [genl_has_listeners]) OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [mcgrp_offset]) OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [parallel_ops]) @@ -410,15 +562,27 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_FIND_FIELD_IFELSE([$KSRC/include/net/genetlink.h], [genl_multicast_group], [id]) + OVS_GREP_IFELSE([$KSRC/include/net/geneve.h], [geneve_hdr]) OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [gre_cisco_register]) + OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [gre_handle_offloads]) OVS_GREP_IFELSE([$KSRC/include/net/ipv6.h], [IP6_FH_F_SKIP_RH]) + OVS_GREP_IFELSE([$KSRC/include/net/ipv6.h], [ip6_local_out_sk]) + OVS_GREP_IFELSE([$KSRC/include/net/ipv6.h], [__ipv6_addr_jhash]) + OVS_GREP_IFELSE([$KSRC/include/net/ip6_fib.h], [rt6i.*u.dst], + [OVS_DEFINE([HAVE_RT6INFO_DST_UNION])]) + OVS_GREP_IFELSE([$KSRC/include/net/ip6_route.h], [ip6_frag.*sock], + [OVS_DEFINE([HAVE_IP_FRAGMENT_TAKES_SOCK])]) + OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_get_be16]) OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_put_be16]) OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_put_be32]) OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_put_be64]) + 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/linux/netlink.h], [void.*netlink_set_err], + [OVS_DEFINE([HAVE_VOID_NETLINK_SET_ERR])]) OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum]) @@ -426,28 +590,30 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ [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/linux/u64_stats_sync.h], [u64_stats_fetch_begin_irq]) - OVS_GREP_IFELSE([$KSRC/include/linux/openvswitch.h], [openvswitch_handle_frame_hook], - [OVS_DEFINE([HAVE_RHEL_OVS_HOOK])]) OVS_GREP_IFELSE([$KSRC/include/net/vxlan.h], [struct vxlan_metadata], [OVS_DEFINE([HAVE_VXLAN_METADATA])]) + OVS_GREP_IFELSE([$KSRC/include/net/vxlan.h], [VXLAN_HF_RCO]) OVS_GREP_IFELSE([$KSRC/include/net/udp.h], [udp_flow_src_port], [OVS_GREP_IFELSE([$KSRC/include/net/udp.h], [inet_get_local_port_range(net], [OVS_DEFINE([HAVE_UDP_FLOW_SRC_PORT])])]) OVS_GREP_IFELSE([$KSRC/include/net/udp.h], [udp_v4_check]) OVS_GREP_IFELSE([$KSRC/include/net/udp.h], [udp_set_csum]) - OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [ignore_df:1], + OVS_GREP_IFELSE([$KSRC/include/net/udp_tunnel.h], [udp_tunnel_gro_complete]) + OVS_GREP_IFELSE([$KSRC/include/net/udp_tunnel.h], [ipv6_v6only], + [OVS_DEFINE([HAVE_UDP_TUNNEL_IPV6])]) + + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [ignore_df], [OVS_DEFINE([HAVE_IGNORE_DF_RENAME])]) - OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [SKB_GSO_GRE_CSUM], - [OVS_DEFINE([HAVE_SKB_GSO_GRE_CSUM])]) - OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [SKB_GSO_UDP_TUNNEL_CSUM], - [OVS_DEFINE([HAVE_SKB_GSO_UDP_TUNNEL_CSUM])]) OVS_GREP_IFELSE([$KSRC/include/uapi/linux/netdevice.h], [NET_NAME_UNKNOWN], [OVS_DEFINE([HAVE_NET_NAME_UNKNOWN])]) + OVS_GREP_IFELSE([$KSRC/include/linux/utsrelease.h], [el6], + [OVS_DEFINE([HAVE_RHEL6_PER_CPU])]) + if cmp -s datapath/linux/kcompat.h.new \ datapath/linux/kcompat.h >/dev/null 2>&1; then rm datapath/linux/kcompat.h.new