diff options
author | Stephen Hemminger <shemminger@linux-foundation.org> | 2007-10-09 01:36:32 -0700 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 16:52:50 -0700 |
commit | 0c4e85813d0a94eeb8bf813397a4907bdd7bb610 (patch) | |
tree | 53ee948abc930bb1c5cd270c490f87fda5eb45b3 /net/packet | |
parent | 4c94f8c0c9a82fad84bc5df453aff755cfed70b7 (diff) | |
download | op-kernel-dev-0c4e85813d0a94eeb8bf813397a4907bdd7bb610.zip op-kernel-dev-0c4e85813d0a94eeb8bf813397a4907bdd7bb610.tar.gz |
[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/packet')
-rw-r--r-- | net/packet/af_packet.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 745e2cb..c5244b3 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -765,16 +765,10 @@ static int packet_sendmsg(struct kiocb *iocb, struct socket *sock, skb_reserve(skb, LL_RESERVED_SPACE(dev)); skb_reset_network_header(skb); - if (dev->hard_header) { - int res; - err = -EINVAL; - res = dev->hard_header(skb, dev, ntohs(proto), addr, NULL, len); - if (sock->type != SOCK_DGRAM) { - skb_reset_tail_pointer(skb); - skb->len = 0; - } else if (res < 0) - goto out_free; - } + err = -EINVAL; + if (sock->type == SOCK_DGRAM && + dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len) < 0) + goto out_free; /* Returns -EFAULT on error */ err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len); |