On Thu, 2015-03-26 at 14:01 +0900, Toshiaki Makita wrote: > Separate the two checks for single vlan and multiple vlans in > netif_skb_features(). This allows us to move the check for multiple > vlans to another function later. > > Signed-off-by: Toshiaki Makita <makita.toshi...@lab.ntt.co.jp> > --- > include/linux/if_vlan.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ > net/core/dev.c | 24 ++++++++---------------- > 2 files changed, 53 insertions(+), 16 deletions(-) > > diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h > index b11b28a..bc649dd 100644 > --- a/include/linux/if_vlan.h > +++ b/include/linux/if_vlan.h > @@ -561,4 +561,49 @@ static inline void vlan_set_encap_proto(struct sk_buff > *skb, > skb->protocol = htons(ETH_P_802_2); > } > > +/** > + * skb_vlan_tagged - check if skb is vlan tagged. > + * @skb: skbuff to query > + * > + * Returns true if the skb is tagged, regardless of whether it is hardware > + * accelerated or not. > + */ > +static inline bool skb_vlan_tagged(struct sk_buff *skb)
const struct sk_buff *skb > +{ > + if (!skb_vlan_tag_present(skb) && > + likely(skb->protocol != htons(ETH_P_8021Q) && > + skb->protocol != htons(ETH_P_8021AD))) > + return false; > + > + return true; > +} > + > +/** > + * skb_vlan_tagged_multi - check if skb is vlan tagged with multiple headers. > + * @skb: skbuff to query > + * > + * Returns true if the skb is tagged with multiple vlan headers, regardless > + * of whether it is hardware accelerated or not. > + */ > +static inline bool skb_vlan_tagged_multi(struct sk_buff *skb) const struct sk_buff *skb > +{ > + __be16 protocol = skb->protocol; > + > + if (!skb_vlan_tag_present(skb)) { > + struct vlan_ethhdr *veh; > + > + if (likely(protocol != htons(ETH_P_8021Q) && > + protocol != htons(ETH_P_8021AD))) > + return false; > + > + veh = (struct vlan_ethhdr *)skb->data; > + protocol = veh->h_vlan_encapsulated_proto; > + } > + > + if (protocol != htons(ETH_P_8021Q) && protocol != htons(ETH_P_8021AD)) > + return false; > + > + return true; > +} > + ------------------------------------------------------------------------------ Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ E1000-devel mailing list E1000-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired