aboutsummaryrefslogtreecommitdiffstats
path: root/net/packet
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@linux-foundation.org>2007-10-09 04:36:32 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:52:50 -0400
commit0c4e85813d0a94eeb8bf813397a4907bdd7bb610 (patch)
tree53ee948abc930bb1c5cd270c490f87fda5eb45b3 /net/packet
parent4c94f8c0c9a82fad84bc5df453aff755cfed70b7 (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/packet')
-rw-r--r--net/packet/af_packet.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 745e2cb87c96..c5244b309640 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,
765 skb_reserve(skb, LL_RESERVED_SPACE(dev)); 765 skb_reserve(skb, LL_RESERVED_SPACE(dev));
766 skb_reset_network_header(skb); 766 skb_reset_network_header(skb);
767 767
768 if (dev->hard_header) { 768 err = -EINVAL;
769 int res; 769 if (sock->type == SOCK_DGRAM &&
770 err = -EINVAL; 770 dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len) < 0)
771 res = dev->hard_header(skb, dev, ntohs(proto), addr, NULL, len); 771 goto out_free;
772 if (sock->type != SOCK_DGRAM) {
773 skb_reset_tail_pointer(skb);
774 skb->len = 0;
775 } else if (res < 0)
776 goto out_free;
777 }
778 772
779 /* Returns -EFAULT on error */ 773 /* Returns -EFAULT on error */
780 err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len); 774 err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);