X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=net%2F8021q%2Fvlan_dev.c;h=a9591ff2b678c7c93ac1717fb9d42a19ad2d9672;hb=fc0d48b8fb449ca007b2057328abf736cb516168;hp=de51c48c439382db712761747188dc72061c82b0;hpb=e2a0f813e0d53014b78aae76f0359c8a41f05eeb;p=~andy%2Flinux diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index de51c48c439..a9591ff2b67 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -538,6 +538,9 @@ static int vlan_passthru_hard_header(struct sk_buff *skb, struct net_device *dev struct vlan_dev_priv *vlan = vlan_dev_priv(dev); struct net_device *real_dev = vlan->real_dev; + if (saddr == NULL) + saddr = dev->dev_addr; + return dev_hard_header(skb, real_dev, type, daddr, saddr, len); } @@ -589,7 +592,8 @@ static int vlan_dev_init(struct net_device *dev) #endif dev->needed_headroom = real_dev->needed_headroom; - if (real_dev->features & NETIF_F_HW_VLAN_CTAG_TX) { + if (vlan_hw_offload_capable(real_dev->features, + vlan_dev_priv(dev)->vlan_proto)) { dev->header_ops = &vlan_passthru_header_ops; dev->hard_header_len = real_dev->hard_header_len; } else {