Support for EtherType other than ETH_P_8021Q for VLAN header introduced
with commit
86a9bad3ab6b ("net: vlan: add protocol argument to packet
tagging functions") in upstream kernel since v3.10.
To support build on older kernels check for ->vlan_proto presence in
@struct sk_buff and return htons(ETH_P_8021Q) when it is missing.
Signed-off-by: Serhey Popovych <serhe.popovych@gmail.com>
Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org>
else
AC_MSG_RESULT(no)
AC_SUBST(HAVE_TC_SKB_PROTOCOL, undef)
+
+ AC_MSG_CHECKING([kernel source for vlan_proto in struct sk_buff])
+ if test -f $ksourcedir/include/linux/skbuff.h && \
+ $AWK '/^struct sk_buff {/,/^};$/' $ksourcedir/include/linux/skbuff.h | \
+ $GREP -q 'vlan_proto'; then
+ AC_MSG_RESULT(yes)
+ AC_SUBST(HAVE_VLAN_PROTO_IN_SK_BUFF, define)
+ else
+ AC_MSG_RESULT(no)
+ AC_SUBST(HAVE_VLAN_PROTO_IN_SK_BUFF, undef)
+ fi
fi
AC_MSG_CHECKING([kernel source for struct net in struct xt_action_param])
static inline __be16 tc_skb_protocol(const struct sk_buff *skb)
{
if (vlan_tx_tag_present(skb))
+#ifdef HAVE_VLAN_PROTO_IN_SK_BUFF
return skb->vlan_proto;
+#else
+ return htons(ETH_P_8021Q);
+#endif
return skb->protocol;
}
#endif