]> git.ipfire.org Git - thirdparty/ipset.git/commitdiff
Compatibility: use skb_policy() from if_vlan.h if available
authorJozsef Kadlecsik <kadlec@netfilter.org>
Thu, 19 Nov 2020 12:50:02 +0000 (13:50 +0100)
committerJozsef Kadlecsik <kadlec@netfilter.org>
Thu, 19 Nov 2020 12:50:02 +0000 (13:50 +0100)
Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org>
configure.ac
kernel/include/linux/netfilter/ipset/ip_set_compat.h.in

index 7388cdda5981b8abcddccd527022144186679133..dcb533d89476a64e3f4b64c44c2c961d369cbca2 100644 (file)
@@ -756,6 +756,16 @@ else
        AC_SUBST(HAVE_LIST_FOR_EACH_ENTRY_RCU_FOUR_ARGS, undef)
 fi
 
+AC_MSG_CHECKING([kernel source for skb_protocol() in if_vlan.h])
+if test -f $ksourcedir/include/linux/if_vlan.h && \
+   $GREP -q 'static inline __be16 skb_protocol' $ksourcedir/include/linux/if_vlan.h; then
+       AC_MSG_RESULT(yes)
+       AC_SUBST(HAVE_SKB_PROTOCOL, define)
+else
+       AC_MSG_RESULT(no)
+       AC_SUBST(HAVE_SKB_PROTOCOL, undef)
+fi
+
 AC_MSG_CHECKING([kernel source for struct net_generic])
 if test -f $ksourcedir/include/net/netns/generic.h && \
    $GREP -q 'struct net_generic' $ksourcedir/include/net/netns/generic.h; then
index 0bcff2c0e56e782ea5aeb98b329198bbe7bc0d46..cc61baf05a3b30ea5978acea82b3a64d1bbb3b07 100644 (file)
@@ -57,6 +57,7 @@
 #@HAVE_COND_RESCHED_RCU@ HAVE_COND_RESCHED_RCU
 #@HAVE_SKB_IIF@ HAVE_SKB_IIF
 #@HAVE_LIST_FOR_EACH_ENTRY_RCU_FOUR_ARGS@ HAVE_LIST_FOR_EACH_ENTRY_RCU_FOUR_ARGS
+#@HAVE_SKB_PROTOCOL@ HAVE_SKB_PROTOCOL
 
 #ifdef HAVE_EXPORT_SYMBOL_GPL_IN_MODULE_H
 #include <linux/module.h>
@@ -372,6 +373,9 @@ static inline int nla_put_in6_addr(struct sk_buff *skb, int attrtype,
 
 static inline __be16 tc_skb_protocol(const struct sk_buff *skb)
 {
+#ifdef HAVE_SKB_PROTOCOL
+       return skb_protocol(skb, true);
+#else
        if (skb_vlan_tag_present(skb))
 #ifdef HAVE_VLAN_PROTO_IN_SK_BUFF
                return skb->vlan_proto;
@@ -379,6 +383,7 @@ static inline __be16 tc_skb_protocol(const struct sk_buff *skb)
                return htons(ETH_P_8021Q);
 #endif
        return skb->protocol;
+#endif
 }
 #endif