X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=blobdiff_plain;f=acinclude.m4;h=11c77877d46ce0f5cc893eca47b22aeb79257863;hp=45cfaf66029d80ef70c4715d849416884040304e;hb=8f79bb4d3999d993424e9578342b4130d10a556c;hpb=693e11384088643e2dcf7822e392d9a7af1f94b8 diff --git a/acinclude.m4 b/acinclude.m4 index 45cfaf660..11c77877d 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -134,10 +134,10 @@ 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 : # Linux 3.x @@ -172,11 +172,12 @@ AC_DEFUN([OVS_CHECK_DPDK], [ DPDK_INCLUDE=$RTE_SDK/include DPDK_LIB_DIR=$RTE_SDK/lib - DPDK_LIB="-lintel_dpdk" + DPDK_LIB="-ldpdk" DPDK_EXTRA_LIB="" + RTE_SDK_FULL=`readlink -f $RTE_SDK` AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([#include <$RTE_SDK/include/rte_config.h> + [AC_LANG_PROGRAM([#include <$RTE_SDK_FULL/include/rte_config.h> #if !RTE_LIBRTE_VHOST_USER #error #endif], [])], @@ -215,7 +216,8 @@ AC_DEFUN([OVS_CHECK_DPDK], [ CFLAGS="$ovs_save_CFLAGS" LDFLAGS="$ovs_save_LDFLAGS" OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR" - OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE -mssse3" + OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE" + OVS_ENABLE_OPTION([-mssse3]) # DPDK pmd drivers are not linked unless --whole-archive is used. # @@ -312,34 +314,112 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ 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_do_fragment]) + OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [ip_is_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]) + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [netdev_rx_handler_register]) + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [net_device_extended]) + OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [rx_handler_func_t.*pskb], + [OVS_DEFINE([HAVE_RX_HANDLER_PSKB])]) + 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], [OVS_DEFINE([HAVE_NF_IPV6_OPS_FRAGMENT])]) + + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h], + [tmpl_alloc.*conntrack_zone], + [OVS_DEFINE([HAVE_NF_CT_TMPL_ALLOC_TAKES_STRUCT_ZONE])]) + 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_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/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], @@ -353,7 +433,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])]) @@ -381,7 +467,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ 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], [l4_rxhash]) + 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_push]) @@ -396,6 +483,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]) @@ -408,15 +498,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]) @@ -424,7 +526,7 @@ 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]) @@ -432,20 +534,33 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ [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])]) + + dnl Conntrack support, and therefore, IP fragment handling backport, should + dnl only be enabled on kernels 3.10+. In future when OVS drops support for + dnl kernels older than 3.10, this macro could be removed from the codebase. + if test "$version" = 4; then + OVS_DEFINE([OVS_FRAGMENT_BACKPORT]) + elif test "$version" = 3 && test "$patchlevel" -ge 10; then + OVS_DEFINE([OVS_FRAGMENT_BACKPORT]) + fi + if cmp -s datapath/linux/kcompat.h.new \ datapath/linux/kcompat.h >/dev/null 2>&1; then rm datapath/linux/kcompat.h.new