[NET]: Wrap netdevice hardware header creation.
Add inline for common usage of hardware header creation, and fix bug in IPV6 mcast where the assumption about negative return is an errno. Negative return from hard_header means not enough space was available,(ie -N bytes). Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
4c94f8c0c9
commit
0c4e85813d
@@ -1125,9 +1125,8 @@ int neigh_compat_output(struct sk_buff *skb)
|
||||
|
||||
__skb_pull(skb, skb_network_offset(skb));
|
||||
|
||||
if (dev->hard_header &&
|
||||
dev->hard_header(skb, dev, ntohs(skb->protocol), NULL, NULL,
|
||||
skb->len) < 0 &&
|
||||
if (dev_hard_header(skb, dev, ntohs(skb->protocol), NULL, NULL,
|
||||
skb->len) < 0 &&
|
||||
dev->rebuild_header(skb))
|
||||
return 0;
|
||||
|
||||
@@ -1154,13 +1153,13 @@ int neigh_resolve_output(struct sk_buff *skb)
|
||||
write_lock_bh(&neigh->lock);
|
||||
if (!dst->hh)
|
||||
neigh_hh_init(neigh, dst, dst->ops->protocol);
|
||||
err = dev->hard_header(skb, dev, ntohs(skb->protocol),
|
||||
neigh->ha, NULL, skb->len);
|
||||
err = dev_hard_header(skb, dev, ntohs(skb->protocol),
|
||||
neigh->ha, NULL, skb->len);
|
||||
write_unlock_bh(&neigh->lock);
|
||||
} else {
|
||||
read_lock_bh(&neigh->lock);
|
||||
err = dev->hard_header(skb, dev, ntohs(skb->protocol),
|
||||
neigh->ha, NULL, skb->len);
|
||||
err = dev_hard_header(skb, dev, ntohs(skb->protocol),
|
||||
neigh->ha, NULL, skb->len);
|
||||
read_unlock_bh(&neigh->lock);
|
||||
}
|
||||
if (err >= 0)
|
||||
@@ -1191,8 +1190,8 @@ int neigh_connected_output(struct sk_buff *skb)
|
||||
__skb_pull(skb, skb_network_offset(skb));
|
||||
|
||||
read_lock_bh(&neigh->lock);
|
||||
err = dev->hard_header(skb, dev, ntohs(skb->protocol),
|
||||
neigh->ha, NULL, skb->len);
|
||||
err = dev_hard_header(skb, dev, ntohs(skb->protocol),
|
||||
neigh->ha, NULL, skb->len);
|
||||
read_unlock_bh(&neigh->lock);
|
||||
if (err >= 0)
|
||||
err = neigh->ops->queue_xmit(skb);
|
||||
|
@@ -415,11 +415,9 @@ static void arp_reply(struct sk_buff *skb)
|
||||
send_skb->protocol = htons(ETH_P_ARP);
|
||||
|
||||
/* Fill the device header for the ARP frame */
|
||||
|
||||
if (np->dev->hard_header &&
|
||||
np->dev->hard_header(send_skb, skb->dev, ptype,
|
||||
sha, np->local_mac,
|
||||
send_skb->len) < 0) {
|
||||
if (dev_hard_header(send_skb, skb->dev, ptype,
|
||||
sha, np->local_mac,
|
||||
send_skb->len) < 0) {
|
||||
kfree_skb(send_skb);
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user