mirror of https://gitee.com/openkylin/linux.git
mac80211: remove skb header offset mangling in ieee80211_build_hdr
Since the code only touches the MAC headers, the offsets to the network/transport headers remain the same throughout this function. Remove pointless pieces of code that try to 'preserve' them. Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
3b17fbf87d
commit
eae4430ee7
|
@ -2334,7 +2334,6 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
|
||||||
struct mesh_path __maybe_unused *mppath = NULL, *mpath = NULL;
|
struct mesh_path __maybe_unused *mppath = NULL, *mpath = NULL;
|
||||||
const u8 *encaps_data;
|
const u8 *encaps_data;
|
||||||
int encaps_len, skip_header_bytes;
|
int encaps_len, skip_header_bytes;
|
||||||
int nh_pos, h_pos;
|
|
||||||
bool wme_sta = false, authorized = false;
|
bool wme_sta = false, authorized = false;
|
||||||
bool tdls_peer;
|
bool tdls_peer;
|
||||||
bool multicast;
|
bool multicast;
|
||||||
|
@ -2640,13 +2639,7 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
|
||||||
encaps_len = 0;
|
encaps_len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
nh_pos = skb_network_header(skb) - skb->data;
|
|
||||||
h_pos = skb_transport_header(skb) - skb->data;
|
|
||||||
|
|
||||||
skb_pull(skb, skip_header_bytes);
|
skb_pull(skb, skip_header_bytes);
|
||||||
nh_pos -= skip_header_bytes;
|
|
||||||
h_pos -= skip_header_bytes;
|
|
||||||
|
|
||||||
head_need = hdrlen + encaps_len + meshhdrlen - skb_headroom(skb);
|
head_need = hdrlen + encaps_len + meshhdrlen - skb_headroom(skb);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2672,18 +2665,12 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encaps_data) {
|
if (encaps_data)
|
||||||
memcpy(skb_push(skb, encaps_len), encaps_data, encaps_len);
|
memcpy(skb_push(skb, encaps_len), encaps_data, encaps_len);
|
||||||
nh_pos += encaps_len;
|
|
||||||
h_pos += encaps_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_MAC80211_MESH
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
if (meshhdrlen > 0) {
|
if (meshhdrlen > 0)
|
||||||
memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen);
|
memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen);
|
||||||
nh_pos += meshhdrlen;
|
|
||||||
h_pos += meshhdrlen;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ieee80211_is_data_qos(fc)) {
|
if (ieee80211_is_data_qos(fc)) {
|
||||||
|
@ -2699,15 +2686,7 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
|
||||||
} else
|
} else
|
||||||
memcpy(skb_push(skb, hdrlen), &hdr, hdrlen);
|
memcpy(skb_push(skb, hdrlen), &hdr, hdrlen);
|
||||||
|
|
||||||
nh_pos += hdrlen;
|
|
||||||
h_pos += hdrlen;
|
|
||||||
|
|
||||||
/* Update skb pointers to various headers since this modified frame
|
|
||||||
* is going to go through Linux networking code that may potentially
|
|
||||||
* need things like pointer to IP header. */
|
|
||||||
skb_reset_mac_header(skb);
|
skb_reset_mac_header(skb);
|
||||||
skb_set_network_header(skb, nh_pos);
|
|
||||||
skb_set_transport_header(skb, h_pos);
|
|
||||||
|
|
||||||
info = IEEE80211_SKB_CB(skb);
|
info = IEEE80211_SKB_CB(skb);
|
||||||
memset(info, 0, sizeof(*info));
|
memset(info, 0, sizeof(*info));
|
||||||
|
@ -4390,9 +4369,6 @@ void __ieee80211_tx_skb_tid_band(struct ieee80211_sub_if_data *sdata,
|
||||||
int ac = ieee802_1d_to_ac[tid & 7];
|
int ac = ieee802_1d_to_ac[tid & 7];
|
||||||
|
|
||||||
skb_reset_mac_header(skb);
|
skb_reset_mac_header(skb);
|
||||||
skb_reset_network_header(skb);
|
|
||||||
skb_reset_transport_header(skb);
|
|
||||||
|
|
||||||
skb_set_queue_mapping(skb, ac);
|
skb_set_queue_mapping(skb, ac);
|
||||||
skb->priority = tid;
|
skb->priority = tid;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue