diff options
Diffstat (limited to 'net/ipv6/mcast.c')
-rw-r--r-- | net/ipv6/mcast.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 86d908b1caea..8668ab3af32e 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
@@ -1438,17 +1438,12 @@ static struct sk_buff *mld_newpack(struct net_device *dev, int size) | |||
1438 | static inline int mld_dev_queue_xmit2(struct sk_buff *skb) | 1438 | static inline int mld_dev_queue_xmit2(struct sk_buff *skb) |
1439 | { | 1439 | { |
1440 | struct net_device *dev = skb->dev; | 1440 | struct net_device *dev = skb->dev; |
1441 | unsigned char ha[MAX_ADDR_LEN]; | ||
1441 | 1442 | ||
1442 | if (dev->hard_header) { | 1443 | ndisc_mc_map(&ipv6_hdr(skb)->daddr, ha, dev, 1); |
1443 | unsigned char ha[MAX_ADDR_LEN]; | 1444 | if (dev_hard_header(skb, dev, ETH_P_IPV6, ha, NULL, skb->len) < 0) { |
1444 | int err; | 1445 | kfree_skb(skb); |
1445 | 1446 | return -EINVAL; | |
1446 | ndisc_mc_map(&ipv6_hdr(skb)->daddr, ha, dev, 1); | ||
1447 | err = dev->hard_header(skb, dev, ETH_P_IPV6, ha, NULL, skb->len); | ||
1448 | if (err < 0) { | ||
1449 | kfree_skb(skb); | ||
1450 | return err; | ||
1451 | } | ||
1452 | } | 1447 | } |
1453 | return dev_queue_xmit(skb); | 1448 | return dev_queue_xmit(skb); |
1454 | } | 1449 | } |