+ 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])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_dst(],
+ [OVS_DEFINE([HAVE_SKB_DST_ACCESSOR_FUNCS])])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+ [skb_copy_from_linear_data_offset])
+ 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])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_frag_page])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_has_frag_list])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [__skb_fill_page_desc])
+ 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_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_push])
+
+ 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_DEFINE([HAVE_CSUM_TYPES])])
+
+ 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])
+ OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [genlmsg_new_unicast])
+ OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [netlink_has_listeners(net->genl_sock],
+ [OVS_DEFINE([HAVE_GENL_HAS_LISTENERS_TAKES_NET])])
+ 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_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])
+
+ 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/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/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/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