diff options
-rw-r--r-- | drivers/net/hamradio/bpqether.c | 2 | ||||
-rw-r--r-- | drivers/net/macvlan.c | 4 | ||||
-rw-r--r-- | drivers/net/pppoe.c | 8 | ||||
-rw-r--r-- | drivers/net/wan/lapbether.c | 2 | ||||
-rw-r--r-- | include/linux/netdevice.h | 9 | ||||
-rw-r--r-- | include/net/dn_route.h | 3 | ||||
-rw-r--r-- | net/802/p8023.c | 2 | ||||
-rw-r--r-- | net/8021q/vlan_dev.c | 14 | ||||
-rw-r--r-- | net/core/neighbour.c | 17 | ||||
-rw-r--r-- | net/core/netpoll.c | 8 | ||||
-rw-r--r-- | net/decnet/dn_neigh.c | 3 | ||||
-rw-r--r-- | net/econet/af_econet.c | 14 | ||||
-rw-r--r-- | net/ethernet/pe2.c | 4 | ||||
-rw-r--r-- | net/ipv4/arp.c | 3 | ||||
-rw-r--r-- | net/ipv4/ipconfig.c | 4 | ||||
-rw-r--r-- | net/ipv6/mcast.c | 15 | ||||
-rw-r--r-- | net/packet/af_packet.c | 14 | ||||
-rw-r--r-- | net/sched/sch_teql.c | 5 | ||||
-rw-r--r-- | net/tipc/eth_media.c | 2 |
19 files changed, 63 insertions, 70 deletions
diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c index c05bc37df356..4bff23e3b970 100644 --- a/drivers/net/hamradio/bpqether.c +++ b/drivers/net/hamradio/bpqether.c | |||
@@ -286,7 +286,7 @@ static int bpq_xmit(struct sk_buff *skb, struct net_device *dev) | |||
286 | 286 | ||
287 | skb->protocol = ax25_type_trans(skb, dev); | 287 | skb->protocol = ax25_type_trans(skb, dev); |
288 | skb_reset_network_header(skb); | 288 | skb_reset_network_header(skb); |
289 | dev->hard_header(skb, dev, ETH_P_BPQ, bpq->dest_addr, NULL, 0); | 289 | dev_hard_header(skb, dev, ETH_P_BPQ, bpq->dest_addr, NULL, 0); |
290 | bpq->stats.tx_packets++; | 290 | bpq->stats.tx_packets++; |
291 | bpq->stats.tx_bytes+=skb->len; | 291 | bpq->stats.tx_bytes+=skb->len; |
292 | 292 | ||
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 2f6cdaa88729..a22087ca968d 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -170,8 +170,8 @@ static int macvlan_hard_header(struct sk_buff *skb, struct net_device *dev, | |||
170 | const struct macvlan_dev *vlan = netdev_priv(dev); | 170 | const struct macvlan_dev *vlan = netdev_priv(dev); |
171 | struct net_device *lowerdev = vlan->lowerdev; | 171 | struct net_device *lowerdev = vlan->lowerdev; |
172 | 172 | ||
173 | return lowerdev->hard_header(skb, lowerdev, type, daddr, | 173 | return dev_hard_header(skb, lowerdev, type, daddr, |
174 | saddr ? : dev->dev_addr, len); | 174 | saddr ? : dev->dev_addr, len); |
175 | } | 175 | } |
176 | 176 | ||
177 | static int macvlan_open(struct net_device *dev) | 177 | static int macvlan_open(struct net_device *dev) |
diff --git a/drivers/net/pppoe.c b/drivers/net/pppoe.c index d48b7b73d896..8936ed3469cf 100644 --- a/drivers/net/pppoe.c +++ b/drivers/net/pppoe.c | |||
@@ -834,8 +834,8 @@ static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
834 | } | 834 | } |
835 | 835 | ||
836 | error = total_len; | 836 | error = total_len; |
837 | dev->hard_header(skb, dev, ETH_P_PPP_SES, | 837 | dev_hard_header(skb, dev, ETH_P_PPP_SES, |
838 | po->pppoe_pa.remote, NULL, total_len); | 838 | po->pppoe_pa.remote, NULL, total_len); |
839 | 839 | ||
840 | memcpy(ph, &hdr, sizeof(struct pppoe_hdr)); | 840 | memcpy(ph, &hdr, sizeof(struct pppoe_hdr)); |
841 | 841 | ||
@@ -886,8 +886,8 @@ static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb) | |||
886 | skb->protocol = __constant_htons(ETH_P_PPP_SES); | 886 | skb->protocol = __constant_htons(ETH_P_PPP_SES); |
887 | skb->dev = dev; | 887 | skb->dev = dev; |
888 | 888 | ||
889 | dev->hard_header(skb, dev, ETH_P_PPP_SES, | 889 | dev_hard_header(skb, dev, ETH_P_PPP_SES, |
890 | po->pppoe_pa.remote, NULL, data_len); | 890 | po->pppoe_pa.remote, NULL, data_len); |
891 | 891 | ||
892 | dev_queue_xmit(skb); | 892 | dev_queue_xmit(skb); |
893 | 893 | ||
diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c index 36e683ccae5e..fb37b8095231 100644 --- a/drivers/net/wan/lapbether.c +++ b/drivers/net/wan/lapbether.c | |||
@@ -216,7 +216,7 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb) | |||
216 | 216 | ||
217 | skb->dev = dev = lapbeth->ethdev; | 217 | skb->dev = dev = lapbeth->ethdev; |
218 | 218 | ||
219 | dev->hard_header(skb, dev, ETH_P_DEC, bcast_addr, NULL, 0); | 219 | dev_hard_header(skb, dev, ETH_P_DEC, bcast_addr, NULL, 0); |
220 | 220 | ||
221 | dev_queue_xmit(skb); | 221 | dev_queue_xmit(skb); |
222 | } | 222 | } |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 71cf409ad17e..b33d084712fa 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -800,6 +800,15 @@ extern int dev_restart(struct net_device *dev); | |||
800 | extern int netpoll_trap(void); | 800 | extern int netpoll_trap(void); |
801 | #endif | 801 | #endif |
802 | 802 | ||
803 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | ||
804 | unsigned short type, | ||
805 | void *daddr, void *saddr, unsigned len) | ||
806 | { | ||
807 | if (!dev->hard_header) | ||
808 | return 0; | ||
809 | return dev->hard_header(skb, dev, type, daddr, saddr, len); | ||
810 | } | ||
811 | |||
803 | typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len); | 812 | typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len); |
804 | extern int register_gifconf(unsigned int family, gifconf_func_t * gifconf); | 813 | extern int register_gifconf(unsigned int family, gifconf_func_t * gifconf); |
805 | static inline int unregister_gifconf(unsigned int family) | 814 | static inline int unregister_gifconf(unsigned int family) |
diff --git a/include/net/dn_route.h b/include/net/dn_route.h index c10e8e7e59a7..60c9f22d8694 100644 --- a/include/net/dn_route.h +++ b/include/net/dn_route.h | |||
@@ -100,8 +100,7 @@ static inline void dn_rt_finish_output(struct sk_buff *skb, char *dst, char *src | |||
100 | if ((dev->type != ARPHRD_ETHER) && (dev->type != ARPHRD_LOOPBACK)) | 100 | if ((dev->type != ARPHRD_ETHER) && (dev->type != ARPHRD_LOOPBACK)) |
101 | dst = NULL; | 101 | dst = NULL; |
102 | 102 | ||
103 | if (!dev->hard_header || (dev->hard_header(skb, dev, ETH_P_DNA_RT, | 103 | if (dev_hard_header(skb, dev, ETH_P_DNA_RT, dst, src, skb->len) >= 0) |
104 | dst, src, skb->len) >= 0)) | ||
105 | dn_rt_send(skb); | 104 | dn_rt_send(skb); |
106 | else | 105 | else |
107 | kfree_skb(skb); | 106 | kfree_skb(skb); |
diff --git a/net/802/p8023.c b/net/802/p8023.c index 53cf05709283..6ab1835041a7 100644 --- a/net/802/p8023.c +++ b/net/802/p8023.c | |||
@@ -31,7 +31,7 @@ static int p8023_request(struct datalink_proto *dl, | |||
31 | { | 31 | { |
32 | struct net_device *dev = skb->dev; | 32 | struct net_device *dev = skb->dev; |
33 | 33 | ||
34 | dev->hard_header(skb, dev, ETH_P_802_3, dest_node, NULL, skb->len); | 34 | dev_hard_header(skb, dev, ETH_P_802_3, dest_node, NULL, skb->len); |
35 | return dev_queue_xmit(skb); | 35 | return dev_queue_xmit(skb); |
36 | } | 36 | } |
37 | 37 | ||
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 6644e8f5f199..ca8090fdabbb 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
@@ -434,21 +434,19 @@ int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, | |||
434 | 434 | ||
435 | if (build_vlan_header) { | 435 | if (build_vlan_header) { |
436 | /* Now make the underlying real hard header */ | 436 | /* Now make the underlying real hard header */ |
437 | rc = dev->hard_header(skb, dev, ETH_P_8021Q, daddr, saddr, len + VLAN_HLEN); | 437 | rc = dev_hard_header(skb, dev, ETH_P_8021Q, daddr, saddr, |
438 | 438 | len + VLAN_HLEN); | |
439 | if (rc > 0) { | 439 | if (rc > 0) |
440 | rc += VLAN_HLEN; | 440 | rc += VLAN_HLEN; |
441 | } else if (rc < 0) { | 441 | else if (rc < 0) |
442 | rc -= VLAN_HLEN; | 442 | rc -= VLAN_HLEN; |
443 | } | 443 | } else |
444 | } else { | ||
445 | /* If here, then we'll just make a normal looking ethernet frame, | 444 | /* If here, then we'll just make a normal looking ethernet frame, |
446 | * but, the hard_start_xmit method will insert the tag (it has to | 445 | * but, the hard_start_xmit method will insert the tag (it has to |
447 | * be able to do this for bridged and other skbs that don't come | 446 | * be able to do this for bridged and other skbs that don't come |
448 | * down the protocol stack in an orderly manner. | 447 | * down the protocol stack in an orderly manner. |
449 | */ | 448 | */ |
450 | rc = dev->hard_header(skb, dev, type, daddr, saddr, len); | 449 | rc = dev_hard_header(skb, dev, type, daddr, saddr, len); |
451 | } | ||
452 | 450 | ||
453 | return rc; | 451 | return rc; |
454 | } | 452 | } |
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 | } |
diff --git a/net/decnet/dn_neigh.c b/net/decnet/dn_neigh.c index a424a8ddbaf7..b66e3be3eb84 100644 --- a/net/decnet/dn_neigh.c +++ b/net/decnet/dn_neigh.c | |||
@@ -211,7 +211,8 @@ static int dn_neigh_output_packet(struct sk_buff *skb) | |||
211 | char mac_addr[ETH_ALEN]; | 211 | char mac_addr[ETH_ALEN]; |
212 | 212 | ||
213 | dn_dn2eth(mac_addr, rt->rt_local_src); | 213 | dn_dn2eth(mac_addr, rt->rt_local_src); |
214 | if (!dev->hard_header || dev->hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, mac_addr, skb->len) >= 0) | 214 | if (dev_hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, |
215 | mac_addr, skb->len) >= 0) | ||
215 | return neigh->ops->queue_xmit(skb); | 216 | return neigh->ops->queue_xmit(skb); |
216 | 217 | ||
217 | if (net_ratelimit()) | 218 | if (net_ratelimit()) |
diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c index 9938e76a8ff6..9cae16b4e0b7 100644 --- a/net/econet/af_econet.c +++ b/net/econet/af_econet.c | |||
@@ -336,6 +336,7 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
336 | /* Real hardware Econet. We're not worthy etc. */ | 336 | /* Real hardware Econet. We're not worthy etc. */ |
337 | #ifdef CONFIG_ECONET_NATIVE | 337 | #ifdef CONFIG_ECONET_NATIVE |
338 | unsigned short proto = 0; | 338 | unsigned short proto = 0; |
339 | int res; | ||
339 | 340 | ||
340 | dev_hold(dev); | 341 | dev_hold(dev); |
341 | 342 | ||
@@ -354,12 +355,12 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
354 | eb->sec = *saddr; | 355 | eb->sec = *saddr; |
355 | eb->sent = ec_tx_done; | 356 | eb->sent = ec_tx_done; |
356 | 357 | ||
357 | if (dev->hard_header) { | 358 | err = -EINVAL; |
358 | int res; | 359 | res = dev_hard_header(skb, dev, ntohs(proto), &addr, NULL, len); |
360 | if (res < 0) | ||
361 | goto out_free; | ||
362 | if (res > 0) { | ||
359 | struct ec_framehdr *fh; | 363 | struct ec_framehdr *fh; |
360 | err = -EINVAL; | ||
361 | res = dev->hard_header(skb, dev, ntohs(proto), | ||
362 | &addr, NULL, len); | ||
363 | /* Poke in our control byte and | 364 | /* Poke in our control byte and |
364 | port number. Hack, hack. */ | 365 | port number. Hack, hack. */ |
365 | fh = (struct ec_framehdr *)(skb->data); | 366 | fh = (struct ec_framehdr *)(skb->data); |
@@ -368,8 +369,7 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
368 | if (sock->type != SOCK_DGRAM) { | 369 | if (sock->type != SOCK_DGRAM) { |
369 | skb_reset_tail_pointer(skb); | 370 | skb_reset_tail_pointer(skb); |
370 | skb->len = 0; | 371 | skb->len = 0; |
371 | } else if (res < 0) | 372 | } |
372 | goto out_free; | ||
373 | } | 373 | } |
374 | 374 | ||
375 | /* Copy the data. Returns -EFAULT on error */ | 375 | /* Copy the data. Returns -EFAULT on error */ |
diff --git a/net/ethernet/pe2.c b/net/ethernet/pe2.c index 9d57b4fb6440..d60e15d9365e 100644 --- a/net/ethernet/pe2.c +++ b/net/ethernet/pe2.c | |||
@@ -12,9 +12,7 @@ static int pEII_request(struct datalink_proto *dl, | |||
12 | struct net_device *dev = skb->dev; | 12 | struct net_device *dev = skb->dev; |
13 | 13 | ||
14 | skb->protocol = htons(ETH_P_IPX); | 14 | skb->protocol = htons(ETH_P_IPX); |
15 | if (dev->hard_header) | 15 | dev_hard_header(skb, dev, ETH_P_IPX, dest_node, NULL, skb->len); |
16 | dev->hard_header(skb, dev, ETH_P_IPX, | ||
17 | dest_node, NULL, skb->len); | ||
18 | return dev_queue_xmit(skb); | 16 | return dev_queue_xmit(skb); |
19 | } | 17 | } |
20 | 18 | ||
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 3a683006d761..5b24c65b13c6 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c | |||
@@ -591,8 +591,7 @@ struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip, | |||
591 | /* | 591 | /* |
592 | * Fill the device header for the ARP frame | 592 | * Fill the device header for the ARP frame |
593 | */ | 593 | */ |
594 | if (dev->hard_header && | 594 | if (dev_hard_header(skb, dev, ptype, dest_hw, src_hw, skb->len) < 0) |
595 | dev->hard_header(skb,dev,ptype,dest_hw,src_hw,skb->len) < 0) | ||
596 | goto out; | 595 | goto out; |
597 | 596 | ||
598 | /* | 597 | /* |
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index af5d5b39fc13..c5c107a01823 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c | |||
@@ -757,8 +757,8 @@ static void __init ic_bootp_send_if(struct ic_device *d, unsigned long jiffies_d | |||
757 | /* Chain packet down the line... */ | 757 | /* Chain packet down the line... */ |
758 | skb->dev = dev; | 758 | skb->dev = dev; |
759 | skb->protocol = htons(ETH_P_IP); | 759 | skb->protocol = htons(ETH_P_IP); |
760 | if ((dev->hard_header && | 760 | if (dev_hard_header(skb, dev, ntohs(skb->protocol), |
761 | dev->hard_header(skb, dev, ntohs(skb->protocol), dev->broadcast, dev->dev_addr, skb->len) < 0) || | 761 | dev->broadcast, dev->dev_addr, skb->len) < 0 || |
762 | dev_queue_xmit(skb) < 0) | 762 | dev_queue_xmit(skb) < 0) |
763 | printk("E"); | 763 | printk("E"); |
764 | } | 764 | } |
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 86d908b1caea..8668ab3af32e 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
@@ -1438,17 +1438,12 @@ static struct sk_buff *mld_newpack(struct net_device *dev, int size) | |||
1438 | static inline int mld_dev_queue_xmit2(struct sk_buff *skb) | 1438 | static inline int mld_dev_queue_xmit2(struct sk_buff *skb) |
1439 | { | 1439 | { |
1440 | struct net_device *dev = skb->dev; | 1440 | struct net_device *dev = skb->dev; |
1441 | unsigned char ha[MAX_ADDR_LEN]; | ||
1441 | 1442 | ||
1442 | if (dev->hard_header) { | 1443 | ndisc_mc_map(&ipv6_hdr(skb)->daddr, ha, dev, 1); |
1443 | unsigned char ha[MAX_ADDR_LEN]; | 1444 | if (dev_hard_header(skb, dev, ETH_P_IPV6, ha, NULL, skb->len) < 0) { |
1444 | int err; | 1445 | kfree_skb(skb); |
1445 | 1446 | return -EINVAL; | |
1446 | ndisc_mc_map(&ipv6_hdr(skb)->daddr, ha, dev, 1); | ||
1447 | err = dev->hard_header(skb, dev, ETH_P_IPV6, ha, NULL, skb->len); | ||
1448 | if (err < 0) { | ||
1449 | kfree_skb(skb); | ||
1450 | return err; | ||
1451 | } | ||
1452 | } | 1447 | } |
1453 | return dev_queue_xmit(skb); | 1448 | return dev_queue_xmit(skb); |
1454 | } | 1449 | } |
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); |
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c index 146f453d7378..d13970f3c7b1 100644 --- a/net/sched/sch_teql.c +++ b/net/sched/sch_teql.c | |||
@@ -232,9 +232,12 @@ __teql_resolve(struct sk_buff *skb, struct sk_buff *skb_res, struct net_device * | |||
232 | } | 232 | } |
233 | if (neigh_event_send(n, skb_res) == 0) { | 233 | if (neigh_event_send(n, skb_res) == 0) { |
234 | int err; | 234 | int err; |
235 | |||
235 | read_lock(&n->lock); | 236 | read_lock(&n->lock); |
236 | err = dev->hard_header(skb, dev, ntohs(skb->protocol), n->ha, NULL, skb->len); | 237 | err = dev_hard_header(skb, dev, ntohs(skb->protocol), |
238 | n->ha, NULL, skb->len); | ||
237 | read_unlock(&n->lock); | 239 | read_unlock(&n->lock); |
240 | |||
238 | if (err < 0) { | 241 | if (err < 0) { |
239 | neigh_release(n); | 242 | neigh_release(n); |
240 | return -EINVAL; | 243 | return -EINVAL; |
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c index 1a99e2947145..3bbef2ab22ae 100644 --- a/net/tipc/eth_media.c +++ b/net/tipc/eth_media.c | |||
@@ -77,7 +77,7 @@ static int send_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr, | |||
77 | skb_reset_network_header(clone); | 77 | skb_reset_network_header(clone); |
78 | dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev; | 78 | dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev; |
79 | clone->dev = dev; | 79 | clone->dev = dev; |
80 | dev->hard_header(clone, dev, ETH_P_TIPC, | 80 | dev_hard_header(clone, dev, ETH_P_TIPC, |
81 | &dest->dev_addr.eth_addr, | 81 | &dest->dev_addr.eth_addr, |
82 | dev->dev_addr, clone->len); | 82 | dev->dev_addr, clone->len); |
83 | dev_queue_xmit(clone); | 83 | dev_queue_xmit(clone); |