diff options
author | Stephen Hemminger <shemminger@linux-foundation.org> | 2007-10-09 04:36:32 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:52:50 -0400 |
commit | 0c4e85813d0a94eeb8bf813397a4907bdd7bb610 (patch) | |
tree | 53ee948abc930bb1c5cd270c490f87fda5eb45b3 /net/core | |
parent | 4c94f8c0c9a82fad84bc5df453aff755cfed70b7 (diff) |
[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>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/neighbour.c | 17 | ||||
-rw-r--r-- | net/core/netpoll.c | 8 |
2 files changed, 11 insertions, 14 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 2c6577c1eedd..10bcb9f8da5c 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -1125,9 +1125,8 @@ int neigh_compat_output(struct sk_buff *skb) | |||
1125 | 1125 | ||
1126 | __skb_pull(skb, skb_network_offset(skb)); | 1126 | __skb_pull(skb, skb_network_offset(skb)); |
1127 | 1127 | ||
1128 | if (dev->hard_header && | 1128 | if (dev_hard_header(skb, dev, ntohs(skb->protocol), NULL, NULL, |
1129 | dev->hard_header(skb, dev, ntohs(skb->protocol), NULL, NULL, | 1129 | skb->len) < 0 && |
1130 | skb->len) < 0 && | ||
1131 | dev->rebuild_header(skb)) | 1130 | dev->rebuild_header(skb)) |
1132 | return 0; | 1131 | return 0; |
1133 | 1132 | ||
@@ -1154,13 +1153,13 @@ int neigh_resolve_output(struct sk_buff *skb) | |||
1154 | write_lock_bh(&neigh->lock); | 1153 | write_lock_bh(&neigh->lock); |
1155 | if (!dst->hh) | 1154 | if (!dst->hh) |
1156 | neigh_hh_init(neigh, dst, dst->ops->protocol); | 1155 | neigh_hh_init(neigh, dst, dst->ops->protocol); |
1157 | err = dev->hard_header(skb, dev, ntohs(skb->protocol), | 1156 | err = dev_hard_header(skb, dev, ntohs(skb->protocol), |
1158 | neigh->ha, NULL, skb->len); | 1157 | neigh->ha, NULL, skb->len); |
1159 | write_unlock_bh(&neigh->lock); | 1158 | write_unlock_bh(&neigh->lock); |
1160 | } else { | 1159 | } else { |
1161 | read_lock_bh(&neigh->lock); | 1160 | read_lock_bh(&neigh->lock); |
1162 | err = dev->hard_header(skb, dev, ntohs(skb->protocol), | 1161 | err = dev_hard_header(skb, dev, ntohs(skb->protocol), |
1163 | neigh->ha, NULL, skb->len); | 1162 | neigh->ha, NULL, skb->len); |
1164 | read_unlock_bh(&neigh->lock); | 1163 | read_unlock_bh(&neigh->lock); |
1165 | } | 1164 | } |
1166 | if (err >= 0) | 1165 | if (err >= 0) |
@@ -1191,8 +1190,8 @@ int neigh_connected_output(struct sk_buff *skb) | |||
1191 | __skb_pull(skb, skb_network_offset(skb)); | 1190 | __skb_pull(skb, skb_network_offset(skb)); |
1192 | 1191 | ||
1193 | read_lock_bh(&neigh->lock); | 1192 | read_lock_bh(&neigh->lock); |
1194 | err = dev->hard_header(skb, dev, ntohs(skb->protocol), | 1193 | err = dev_hard_header(skb, dev, ntohs(skb->protocol), |
1195 | neigh->ha, NULL, skb->len); | 1194 | neigh->ha, NULL, skb->len); |
1196 | read_unlock_bh(&neigh->lock); | 1195 | read_unlock_bh(&neigh->lock); |
1197 | if (err >= 0) | 1196 | if (err >= 0) |
1198 | err = neigh->ops->queue_xmit(skb); | 1197 | err = neigh->ops->queue_xmit(skb); |
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index e13602d8154d..95daba624967 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
@@ -415,11 +415,9 @@ static void arp_reply(struct sk_buff *skb) | |||
415 | send_skb->protocol = htons(ETH_P_ARP); | 415 | send_skb->protocol = htons(ETH_P_ARP); |
416 | 416 | ||
417 | /* Fill the device header for the ARP frame */ | 417 | /* Fill the device header for the ARP frame */ |
418 | 418 | if (dev_hard_header(send_skb, skb->dev, ptype, | |
419 | if (np->dev->hard_header && | 419 | sha, np->local_mac, |
420 | np->dev->hard_header(send_skb, skb->dev, ptype, | 420 | send_skb->len) < 0) { |
421 | sha, np->local_mac, | ||
422 | send_skb->len) < 0) { | ||
423 | kfree_skb(send_skb); | 421 | kfree_skb(send_skb); |
424 | return; | 422 | return; |
425 | } | 423 | } |