usbnet: allow mini-drivers to consume L2 headers
authorBjørn Mork <bjorn@mork.no>
Thu, 3 Dec 2015 18:24:20 +0000 (19:24 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 4 Dec 2015 21:56:23 +0000 (16:56 -0500)
Assume the minidriver has taken care of all L2 header parsing
if it sets skb->protocol.  This allows the minidriver to
support non-ethernet L2 headers, and even operate without
any L2 header at all.

Signed-off-by: Bjørn Mork <bjorn@mork.no>
Acked-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/usbnet.c

index 0744bf2ef2d6e42044c6c31f7c74b0ec120e07d3..0b0ba7ef14e4e9054adeb1251c29cddba08c5187 100644 (file)
@@ -324,7 +324,10 @@ void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
                return;
        }
 
-       skb->protocol = eth_type_trans (skb, dev->net);
+       /* only update if unset to allow minidriver rx_fixup override */
+       if (skb->protocol == 0)
+               skb->protocol = eth_type_trans (skb, dev->net);
+
        dev->net->stats.rx_packets++;
        dev->net->stats.rx_bytes += skb->len;