diff options
author | Linus Lüssing <linus.luessing@web.de> | 2014-01-19 16:22:45 -0500 |
---|---|---|
committer | Antonio Quartulli <antonio@meshcoding.com> | 2014-03-22 03:50:26 -0400 |
commit | 927c2ed7e5879a96759aadda94404d516ce9fb42 (patch) | |
tree | fea8526ec7713221769eaf1bdc34533c45bbb4bb /net/batman-adv/gateway_client.c | |
parent | abae9479ca9fa5616ae0debfbda54bf5424001df (diff) |
batman-adv: use vlan_/eth_hdr() instead of skb->data in interface_tx path
Our .ndo_start_xmit handler (batadv_interface_tx()) can rely on having
the skb mac header pointer set correctly since the following commit
present in kernels >= 3.9:
"net: reset mac header in dev_start_xmit()" (6d1ccff627)
Therefore we can safely use eth_hdr() and vlan_eth_hdr() instead of
skb->data now, which spares us some ugly type casts.
At the same time set the mac_header in batadv_dat_snoop_incoming_arp_request()
before sending the skb along the TX path.
Signed-off-by: Linus Lüssing <linus.luessing@web.de>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
Diffstat (limited to 'net/batman-adv/gateway_client.c')
-rw-r--r-- | net/batman-adv/gateway_client.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c index d7fafc1009a0..07c7f2177648 100644 --- a/net/batman-adv/gateway_client.c +++ b/net/batman-adv/gateway_client.c | |||
@@ -678,7 +678,7 @@ batadv_gw_dhcp_recipient_get(struct sk_buff *skb, unsigned int *header_len, | |||
678 | if (!pskb_may_pull(skb, *header_len + ETH_HLEN)) | 678 | if (!pskb_may_pull(skb, *header_len + ETH_HLEN)) |
679 | return BATADV_DHCP_NO; | 679 | return BATADV_DHCP_NO; |
680 | 680 | ||
681 | ethhdr = (struct ethhdr *)skb->data; | 681 | ethhdr = eth_hdr(skb); |
682 | proto = ethhdr->h_proto; | 682 | proto = ethhdr->h_proto; |
683 | *header_len += ETH_HLEN; | 683 | *header_len += ETH_HLEN; |
684 | 684 | ||
@@ -687,7 +687,7 @@ batadv_gw_dhcp_recipient_get(struct sk_buff *skb, unsigned int *header_len, | |||
687 | if (!pskb_may_pull(skb, *header_len + VLAN_HLEN)) | 687 | if (!pskb_may_pull(skb, *header_len + VLAN_HLEN)) |
688 | return BATADV_DHCP_NO; | 688 | return BATADV_DHCP_NO; |
689 | 689 | ||
690 | vhdr = (struct vlan_ethhdr *)skb->data; | 690 | vhdr = vlan_eth_hdr(skb); |
691 | proto = vhdr->h_vlan_encapsulated_proto; | 691 | proto = vhdr->h_vlan_encapsulated_proto; |
692 | *header_len += VLAN_HLEN; | 692 | *header_len += VLAN_HLEN; |
693 | } | 693 | } |
@@ -726,7 +726,7 @@ batadv_gw_dhcp_recipient_get(struct sk_buff *skb, unsigned int *header_len, | |||
726 | return BATADV_DHCP_NO; | 726 | return BATADV_DHCP_NO; |
727 | 727 | ||
728 | /* skb->data might have been reallocated by pskb_may_pull() */ | 728 | /* skb->data might have been reallocated by pskb_may_pull() */ |
729 | ethhdr = (struct ethhdr *)skb->data; | 729 | ethhdr = eth_hdr(skb); |
730 | if (ntohs(ethhdr->h_proto) == ETH_P_8021Q) | 730 | if (ntohs(ethhdr->h_proto) == ETH_P_8021Q) |
731 | ethhdr = (struct ethhdr *)(skb->data + VLAN_HLEN); | 731 | ethhdr = (struct ethhdr *)(skb->data + VLAN_HLEN); |
732 | 732 | ||