diff options
-rw-r--r-- | drivers/ieee1394/eth1394.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/airo.c | 7 | ||||
-rw-r--r-- | drivers/s390/net/qeth_main.c | 6 | ||||
-rw-r--r-- | include/linux/netdevice.h | 12 | ||||
-rw-r--r-- | net/ethernet/eth.c | 4 | ||||
-rw-r--r-- | net/ipv4/netfilter/ip_queue.c | 6 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6_queue.c | 5 | ||||
-rw-r--r-- | net/mac80211/ieee80211.c | 2 | ||||
-rw-r--r-- | net/netfilter/nfnetlink_log.c | 11 | ||||
-rw-r--r-- | net/netfilter/nfnetlink_queue.c | 13 | ||||
-rw-r--r-- | net/packet/af_packet.c | 8 |
11 files changed, 40 insertions, 44 deletions
diff --git a/drivers/ieee1394/eth1394.c b/drivers/ieee1394/eth1394.c index 33b80817d68c..b31f90082e35 100644 --- a/drivers/ieee1394/eth1394.c +++ b/drivers/ieee1394/eth1394.c | |||
@@ -162,7 +162,8 @@ static int ether1394_header(struct sk_buff *skb, struct net_device *dev, | |||
162 | unsigned short type, void *daddr, void *saddr, | 162 | unsigned short type, void *daddr, void *saddr, |
163 | unsigned len); | 163 | unsigned len); |
164 | static int ether1394_rebuild_header(struct sk_buff *skb); | 164 | static int ether1394_rebuild_header(struct sk_buff *skb); |
165 | static int ether1394_header_parse(struct sk_buff *skb, unsigned char *haddr); | 165 | static int ether1394_header_parse(const struct sk_buff *skb, |
166 | unsigned char *haddr); | ||
166 | static int ether1394_header_cache(struct neighbour *neigh, struct hh_cache *hh); | 167 | static int ether1394_header_cache(struct neighbour *neigh, struct hh_cache *hh); |
167 | static void ether1394_header_cache_update(struct hh_cache *hh, | 168 | static void ether1394_header_cache_update(struct hh_cache *hh, |
168 | struct net_device *dev, | 169 | struct net_device *dev, |
@@ -751,11 +752,10 @@ static int ether1394_rebuild_header(struct sk_buff *skb) | |||
751 | return 0; | 752 | return 0; |
752 | } | 753 | } |
753 | 754 | ||
754 | static int ether1394_header_parse(struct sk_buff *skb, unsigned char *haddr) | 755 | static int ether1394_header_parse(const struct sk_buff *skb, |
756 | unsigned char *haddr) | ||
755 | { | 757 | { |
756 | struct net_device *dev = skb->dev; | 758 | memcpy(haddr, skb->dev->dev_addr, ETH1394_ALEN); |
757 | |||
758 | memcpy(haddr, dev->dev_addr, ETH1394_ALEN); | ||
759 | return ETH1394_ALEN; | 759 | return ETH1394_ALEN; |
760 | } | 760 | } |
761 | 761 | ||
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index 95d3cd1c49a7..cd03a61359aa 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c | |||
@@ -2481,7 +2481,7 @@ void stop_airo_card( struct net_device *dev, int freeres ) | |||
2481 | 2481 | ||
2482 | EXPORT_SYMBOL(stop_airo_card); | 2482 | EXPORT_SYMBOL(stop_airo_card); |
2483 | 2483 | ||
2484 | static int wll_header_parse(struct sk_buff *skb, unsigned char *haddr) | 2484 | static int wll_header_parse(const struct sk_buff *skb, unsigned char *haddr) |
2485 | { | 2485 | { |
2486 | memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN); | 2486 | memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN); |
2487 | return ETH_ALEN; | 2487 | return ETH_ALEN; |
@@ -2698,11 +2698,6 @@ static int mpi_map_card(struct airo_info *ai, struct pci_dev *pci) | |||
2698 | 2698 | ||
2699 | static void wifi_setup(struct net_device *dev) | 2699 | static void wifi_setup(struct net_device *dev) |
2700 | { | 2700 | { |
2701 | dev->hard_header = NULL; | ||
2702 | dev->rebuild_header = NULL; | ||
2703 | dev->hard_header_cache = NULL; | ||
2704 | dev->header_cache_update= NULL; | ||
2705 | |||
2706 | dev->hard_header_parse = wll_header_parse; | 2701 | dev->hard_header_parse = wll_header_parse; |
2707 | dev->hard_start_xmit = &airo_start_xmit11; | 2702 | dev->hard_start_xmit = &airo_start_xmit11; |
2708 | dev->get_stats = &airo_get_stats; | 2703 | dev->get_stats = &airo_get_stats; |
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index 8c46978e0afa..65225b3989dd 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
@@ -6561,10 +6561,10 @@ static struct ethtool_ops qeth_ethtool_ops = { | |||
6561 | }; | 6561 | }; |
6562 | 6562 | ||
6563 | static int | 6563 | static int |
6564 | qeth_hard_header_parse(struct sk_buff *skb, unsigned char *haddr) | 6564 | qeth_hard_header_parse(const struct sk_buff *skb, unsigned char *haddr) |
6565 | { | 6565 | { |
6566 | struct qeth_card *card; | 6566 | const struct qeth_card *card; |
6567 | struct ethhdr *eth; | 6567 | const struct ethhdr *eth; |
6568 | 6568 | ||
6569 | card = qeth_get_card_from_dev(skb->dev); | 6569 | card = qeth_get_card_from_dev(skb->dev); |
6570 | if (card->options.layer2) | 6570 | if (card->options.layer2) |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index b33d084712fa..aae9ec367f5d 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -657,7 +657,7 @@ struct net_device | |||
657 | void (*vlan_rx_kill_vid)(struct net_device *dev, | 657 | void (*vlan_rx_kill_vid)(struct net_device *dev, |
658 | unsigned short vid); | 658 | unsigned short vid); |
659 | 659 | ||
660 | int (*hard_header_parse)(struct sk_buff *skb, | 660 | int (*hard_header_parse)(const struct sk_buff *skb, |
661 | unsigned char *haddr); | 661 | unsigned char *haddr); |
662 | int (*neigh_setup)(struct net_device *dev, struct neigh_parms *); | 662 | int (*neigh_setup)(struct net_device *dev, struct neigh_parms *); |
663 | #ifdef CONFIG_NETPOLL | 663 | #ifdef CONFIG_NETPOLL |
@@ -809,6 +809,16 @@ static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | |||
809 | return dev->hard_header(skb, dev, type, daddr, saddr, len); | 809 | return dev->hard_header(skb, dev, type, daddr, saddr, len); |
810 | } | 810 | } |
811 | 811 | ||
812 | static inline int dev_parse_header(const struct sk_buff *skb, | ||
813 | unsigned char *haddr) | ||
814 | { | ||
815 | const struct net_device *dev = skb->dev; | ||
816 | |||
817 | if (!dev->hard_header_parse) | ||
818 | return 0; | ||
819 | return dev->hard_header_parse(skb, haddr); | ||
820 | } | ||
821 | |||
812 | typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len); | 822 | typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len); |
813 | extern int register_gifconf(unsigned int family, gifconf_func_t * gifconf); | 823 | extern int register_gifconf(unsigned int family, gifconf_func_t * gifconf); |
814 | static inline int unregister_gifconf(unsigned int family) | 824 | static inline int unregister_gifconf(unsigned int family) |
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 2aaf6faf74ac..bdeb2f0ace32 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c | |||
@@ -207,9 +207,9 @@ EXPORT_SYMBOL(eth_type_trans); | |||
207 | * @skb: packet to extract header from | 207 | * @skb: packet to extract header from |
208 | * @haddr: destination buffer | 208 | * @haddr: destination buffer |
209 | */ | 209 | */ |
210 | static int eth_header_parse(struct sk_buff *skb, unsigned char *haddr) | 210 | static int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr) |
211 | { | 211 | { |
212 | struct ethhdr *eth = eth_hdr(skb); | 212 | const struct ethhdr *eth = eth_hdr(skb); |
213 | memcpy(haddr, eth->h_source, ETH_ALEN); | 213 | memcpy(haddr, eth->h_source, ETH_ALEN); |
214 | return ETH_ALEN; | 214 | return ETH_ALEN; |
215 | } | 215 | } |
diff --git a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c index 82fda92e6b97..aaa3f5c56761 100644 --- a/net/ipv4/netfilter/ip_queue.c +++ b/net/ipv4/netfilter/ip_queue.c | |||
@@ -250,10 +250,8 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp) | |||
250 | 250 | ||
251 | if (entry->info->indev && entry->skb->dev) { | 251 | if (entry->info->indev && entry->skb->dev) { |
252 | pmsg->hw_type = entry->skb->dev->type; | 252 | pmsg->hw_type = entry->skb->dev->type; |
253 | if (entry->skb->dev->hard_header_parse) | 253 | pmsg->hw_addrlen = dev_parse_header(entry->skb, |
254 | pmsg->hw_addrlen = | 254 | pmsg->hw_addr); |
255 | entry->skb->dev->hard_header_parse(entry->skb, | ||
256 | pmsg->hw_addr); | ||
257 | } | 255 | } |
258 | 256 | ||
259 | if (data_len) | 257 | if (data_len) |
diff --git a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c index 2f5a52453834..c75f467a8f51 100644 --- a/net/ipv6/netfilter/ip6_queue.c +++ b/net/ipv6/netfilter/ip6_queue.c | |||
@@ -248,10 +248,7 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp) | |||
248 | 248 | ||
249 | if (entry->info->indev && entry->skb->dev) { | 249 | if (entry->info->indev && entry->skb->dev) { |
250 | pmsg->hw_type = entry->skb->dev->type; | 250 | pmsg->hw_type = entry->skb->dev->type; |
251 | if (entry->skb->dev->hard_header_parse) | 251 | pmsg->hw_addrlen = dev_parse_header(entry->skb, pmsg->hw_addr); |
252 | pmsg->hw_addrlen = | ||
253 | entry->skb->dev->hard_header_parse(entry->skb, | ||
254 | pmsg->hw_addr); | ||
255 | } | 252 | } |
256 | 253 | ||
257 | if (data_len) | 254 | if (data_len) |
diff --git a/net/mac80211/ieee80211.c b/net/mac80211/ieee80211.c index 89be6629cfc0..0cdcf0d0c6ca 100644 --- a/net/mac80211/ieee80211.c +++ b/net/mac80211/ieee80211.c | |||
@@ -47,7 +47,7 @@ struct ieee80211_tx_status_rtap_hdr { | |||
47 | 47 | ||
48 | /* common interface routines */ | 48 | /* common interface routines */ |
49 | 49 | ||
50 | static int header_parse_80211(struct sk_buff *skb, unsigned char *haddr) | 50 | static int header_parse_80211(const struct sk_buff *skb, unsigned char *haddr) |
51 | { | 51 | { |
52 | memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN); /* addr2 */ | 52 | memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN); /* addr2 */ |
53 | return ETH_ALEN; | 53 | return ETH_ALEN; |
diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c index 8e4001b8f764..332e0f7f6f9e 100644 --- a/net/netfilter/nfnetlink_log.c +++ b/net/netfilter/nfnetlink_log.c | |||
@@ -481,12 +481,13 @@ __build_packet_message(struct nfulnl_instance *inst, | |||
481 | NFA_PUT(inst->skb, NFULA_MARK, sizeof(tmp_uint), &tmp_uint); | 481 | NFA_PUT(inst->skb, NFULA_MARK, sizeof(tmp_uint), &tmp_uint); |
482 | } | 482 | } |
483 | 483 | ||
484 | if (indev && skb->dev && skb->dev->hard_header_parse) { | 484 | if (indev && skb->dev) { |
485 | struct nfulnl_msg_packet_hw phw; | 485 | struct nfulnl_msg_packet_hw phw; |
486 | int len = skb->dev->hard_header_parse((struct sk_buff *)skb, | 486 | int len = dev_parse_header(skb, phw.hw_addr); |
487 | phw.hw_addr); | 487 | if (len > 0) { |
488 | phw.hw_addrlen = htons(len); | 488 | phw.hw_addrlen = htons(len); |
489 | NFA_PUT(inst->skb, NFULA_HWADDR, sizeof(phw), &phw); | 489 | NFA_PUT(inst->skb, NFULA_HWADDR, sizeof(phw), &phw); |
490 | } | ||
490 | } | 491 | } |
491 | 492 | ||
492 | if (skb->tstamp.tv64) { | 493 | if (skb->tstamp.tv64) { |
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index c97369f48db7..a813185c766d 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c | |||
@@ -485,14 +485,13 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue, | |||
485 | NFA_PUT(skb, NFQA_MARK, sizeof(u_int32_t), &tmp_uint); | 485 | NFA_PUT(skb, NFQA_MARK, sizeof(u_int32_t), &tmp_uint); |
486 | } | 486 | } |
487 | 487 | ||
488 | if (indev && entskb->dev | 488 | if (indev && entskb->dev) { |
489 | && entskb->dev->hard_header_parse) { | ||
490 | struct nfqnl_msg_packet_hw phw; | 489 | struct nfqnl_msg_packet_hw phw; |
491 | 490 | int len = dev_parse_header(entskb, phw.hw_addr); | |
492 | int len = entskb->dev->hard_header_parse(entskb, | 491 | if (len) { |
493 | phw.hw_addr); | 492 | phw.hw_addrlen = htons(len); |
494 | phw.hw_addrlen = htons(len); | 493 | NFA_PUT(skb, NFQA_HWADDR, sizeof(phw), &phw); |
495 | NFA_PUT(skb, NFQA_HWADDR, sizeof(phw), &phw); | 494 | } |
496 | } | 495 | } |
497 | 496 | ||
498 | if (entskb->tstamp.tv64) { | 497 | if (entskb->tstamp.tv64) { |
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index c5244b309640..c9ee343c2a6c 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -519,10 +519,8 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, struct packet | |||
519 | sll->sll_ifindex = orig_dev->ifindex; | 519 | sll->sll_ifindex = orig_dev->ifindex; |
520 | else | 520 | else |
521 | sll->sll_ifindex = dev->ifindex; | 521 | sll->sll_ifindex = dev->ifindex; |
522 | sll->sll_halen = 0; | ||
523 | 522 | ||
524 | if (dev->hard_header_parse) | 523 | sll->sll_halen = dev_parse_header(skb, sll->sll_addr); |
525 | sll->sll_halen = dev->hard_header_parse(skb, sll->sll_addr); | ||
526 | 524 | ||
527 | PACKET_SKB_CB(skb)->origlen = skb->len; | 525 | PACKET_SKB_CB(skb)->origlen = skb->len; |
528 | 526 | ||
@@ -658,9 +656,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packe | |||
658 | h->tp_usec = tv.tv_usec; | 656 | h->tp_usec = tv.tv_usec; |
659 | 657 | ||
660 | sll = (struct sockaddr_ll*)((u8*)h + TPACKET_ALIGN(sizeof(*h))); | 658 | sll = (struct sockaddr_ll*)((u8*)h + TPACKET_ALIGN(sizeof(*h))); |
661 | sll->sll_halen = 0; | 659 | sll->sll_halen = dev_parse_header(skb, sll->sll_addr); |
662 | if (dev->hard_header_parse) | ||
663 | sll->sll_halen = dev->hard_header_parse(skb, sll->sll_addr); | ||
664 | sll->sll_family = AF_PACKET; | 660 | sll->sll_family = AF_PACKET; |
665 | sll->sll_hatype = dev->type; | 661 | sll->sll_hatype = dev->type; |
666 | sll->sll_protocol = skb->protocol; | 662 | sll->sll_protocol = skb->protocol; |