projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wifi: ieee80211: Do not open-code qos address offsets
[carl9170fw.git]
/
include
/
linux
/
ieee80211.h
diff --git
a/include/linux/ieee80211.h
b/include/linux/ieee80211.h
index 23a8a1e93aecb24a67b051eae2040a18aa7d82b0..938e9a42e687bab7565b1c081b4a1b29a6e4d9c8 100644
(file)
--- a/
include/linux/ieee80211.h
+++ b/
include/linux/ieee80211.h
@@
-326,6
+326,17
@@
struct ieee80211_qos_hdr {
__le16 qos_ctrl;
} __packed __aligned(2);
__le16 qos_ctrl;
} __packed __aligned(2);
+struct ieee80211_qos_hdr_4addr {
+ __le16 frame_control;
+ __le16 duration_id;
+ u8 addr1[6];
+ u8 addr2[6];
+ u8 addr3[6];
+ __le16 seq_ctrl;
+ u8 addr4[6];
+ __le16 qos_ctrl;
+} __packed __aligned(2);
+
struct ieee80211_trigger {
__le16 frame_control;
__le16 duration;
struct ieee80211_trigger {
__le16 frame_control;
__le16 duration;
@@
-4078,16
+4089,21
@@
struct ieee80211_he_6ghz_capa {
* @hdr: the frame
*
* The qos ctrl bytes come after the frame_control, duration, seq_num
* @hdr: the frame
*
* The qos ctrl bytes come after the frame_control, duration, seq_num
- * and 3 or 4 addresses of length ETH_ALEN.
- * 3 addr: 2 + 2 + 2 + 3*6 = 24
- * 4 addr: 2 + 2 + 2 + 4*6 = 30
+ * and 3 or 4 addresses of length ETH_ALEN. Checks frame_control to choose
+ * between struct ieee80211_qos_hdr_4addr and struct ieee80211_qos_hdr.
*/
static inline u8 *ieee80211_get_qos_ctl(struct ieee80211_hdr *hdr)
{
*/
static inline u8 *ieee80211_get_qos_ctl(struct ieee80211_hdr *hdr)
{
- if (ieee80211_has_a4(hdr->frame_control))
- return (u8 *)hdr + 30;
+ union {
+ struct ieee80211_qos_hdr addr3;
+ struct ieee80211_qos_hdr_4addr addr4;
+ } *qos;
+
+ qos = (void *)hdr;
+ if (ieee80211_has_a4(qos->addr3.frame_control))
+ return (u8 *)&qos->addr4.qos_ctrl;
else
else
- return (u8 *)
hdr + 24
;
+ return (u8 *)
&qos->addr3.qos_ctrl
;
}
/**
}
/**