[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 <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
Stephen Hemminger 2007-10-09 01:36:32 -07:00 • committed by David S. Miller
commit 0c4e85813d
19 changed files with 63 additions and 70 deletions

View file

@ -434,21 +434,19 @@ int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
if (build_vlan_header) {
/* Now make the underlying real hard header */
rc = dev->hard_header(skb, dev, ETH_P_8021Q, daddr, saddr, len + VLAN_HLEN);
if (rc > 0) {
rc = dev_hard_header(skb, dev, ETH_P_8021Q, daddr, saddr,
len + VLAN_HLEN);
if (rc > 0)
rc += VLAN_HLEN;
} else if (rc < 0) {
else if (rc < 0)
rc -= VLAN_HLEN;
}
} else {
} else
/* If here, then we'll just make a normal looking ethernet frame,
* but, the hard_start_xmit method will insert the tag (it has to
* be able to do this for bridged and other skbs that don't come
* down the protocol stack in an orderly manner.
*/
rc = dev->hard_header(skb, dev, type, daddr, saddr, len);
}
rc = dev_hard_header(skb, dev, type, daddr, saddr, len);
return rc;
}