projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wifi: ieee80211: clean up public action codes
[carl9170fw.git]
/
include
/
linux
/
ieee80211.h
diff --git
a/include/linux/ieee80211.h
b/include/linux/ieee80211.h
index c6a594cd460a32d4b2ba846eb69299397b74b928..5c88243c7898ce53e8747bca37dc1441f0839a07 100644
(file)
--- a/
include/linux/ieee80211.h
+++ b/
include/linux/ieee80211.h
@@
-9,7
+9,7
@@
* Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net>
* Copyright (c) 2013 - 2014 Intel Mobile Communications GmbH
* Copyright (c) 2016 - 2017 Intel Deutschland GmbH
* Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net>
* Copyright (c) 2013 - 2014 Intel Mobile Communications GmbH
* Copyright (c) 2016 - 2017 Intel Deutschland GmbH
- * Copyright (c) 2018 - 202
2
Intel Corporation
+ * Copyright (c) 2018 - 202
3
Intel Corporation
*/
#ifndef __LINUX_IEEE80211_H
*/
#ifndef __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;
@@
-1346,6
+1357,7
@@
struct ieee80211_mgmt {
} __packed wnm_timing_msr;
} u;
} __packed __aligned(4) action;
} __packed wnm_timing_msr;
} u;
} __packed __aligned(4) action;
+ DECLARE_FLEX_ARRAY(u8, body); /* Generic frame body */
} u __aligned(2);
} __packed __aligned(2);
} u __aligned(2);
} __packed __aligned(2);
@@
-3563,11
+3575,6
@@
enum ieee80211_unprotected_wnm_actioncode {
WLAN_UNPROTECTED_WNM_ACTION_TIMING_MEASUREMENT_RESPONSE = 1,
};
WLAN_UNPROTECTED_WNM_ACTION_TIMING_MEASUREMENT_RESPONSE = 1,
};
-/* Public action codes */
-enum ieee80211_public_actioncode {
- WLAN_PUBLIC_ACTION_FTM_RESPONSE = 33,
-};
-
/* Security key length */
enum ieee80211_key_len {
WLAN_KEY_LEN_WEP40 = 5,
/* Security key length */
enum ieee80211_key_len {
WLAN_KEY_LEN_WEP40 = 5,
@@
-3659,7
+3666,7
@@
enum ieee80211_pub_actioncode {
WLAN_PUB_ACTION_NETWORK_CHANNEL_CONTROL = 30,
WLAN_PUB_ACTION_WHITE_SPACE_MAP_ANN = 31,
WLAN_PUB_ACTION_FTM_REQUEST = 32,
WLAN_PUB_ACTION_NETWORK_CHANNEL_CONTROL = 30,
WLAN_PUB_ACTION_WHITE_SPACE_MAP_ANN = 31,
WLAN_PUB_ACTION_FTM_REQUEST = 32,
- WLAN_PUB_ACTION_FTM = 33,
+ WLAN_PUB_ACTION_FTM
_RESPONSE
= 33,
WLAN_PUB_ACTION_FILS_DISCOVERY = 34,
};
WLAN_PUB_ACTION_FILS_DISCOVERY = 34,
};
@@
-4078,16
+4085,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
;
}
/**
}
/**
@@
-4283,7
+4295,7
@@
static inline bool ieee80211_is_ftm(struct ieee80211_hdr *hdr, size_t len)
return false;
if (mgmt->u.action.u.ftm.action_code ==
return false;
if (mgmt->u.action.u.ftm.action_code ==
- WLAN_PUB
LIC
_ACTION_FTM_RESPONSE &&
+ WLAN_PUB_ACTION_FTM_RESPONSE &&
len >= offsetofend(typeof(*mgmt), u.action.u.ftm))
return true;
len >= offsetofend(typeof(*mgmt), u.action.u.ftm))
return true;
@@
-4502,18
+4514,17
@@
static inline u8 ieee80211_mle_common_size(const u8 *data)
switch (u16_get_bits(control, IEEE80211_ML_CONTROL_TYPE)) {
case IEEE80211_ML_CONTROL_TYPE_BASIC:
switch (u16_get_bits(control, IEEE80211_ML_CONTROL_TYPE)) {
case IEEE80211_ML_CONTROL_TYPE_BASIC:
- common += sizeof(struct ieee80211_mle_basic_common_info);
- break;
case IEEE80211_ML_CONTROL_TYPE_PREQ:
case IEEE80211_ML_CONTROL_TYPE_PREQ:
- common += sizeof(struct ieee80211_mle_preq_common_info);
+ case IEEE80211_ML_CONTROL_TYPE_TDLS:
+ /*
+ * The length is the first octet pointed by mle->variable so no
+ * need to add anything
+ */
break;
case IEEE80211_ML_CONTROL_TYPE_RECONF:
if (control & IEEE80211_MLC_RECONF_PRES_MLD_MAC_ADDR)
common += 6;
return common;
break;
case IEEE80211_ML_CONTROL_TYPE_RECONF:
if (control & IEEE80211_MLC_RECONF_PRES_MLD_MAC_ADDR)
common += 6;
return common;
- case IEEE80211_ML_CONTROL_TYPE_TDLS:
- common += sizeof(struct ieee80211_mle_tdls_common_info);
- break;
case IEEE80211_ML_CONTROL_TYPE_PRIO_ACCESS:
if (control & IEEE80211_MLC_PRIO_ACCESS_PRES_AP_MLD_MAC_ADDR)
common += 6;
case IEEE80211_ML_CONTROL_TYPE_PRIO_ACCESS:
if (control & IEEE80211_MLC_PRIO_ACCESS_PRES_AP_MLD_MAC_ADDR)
common += 6;
@@
-4522,7
+4533,7
@@
static inline u8 ieee80211_mle_common_size(const u8 *data)
return 0;
}
return 0;
}
- return common + mle->variable[0];
+ return
sizeof(*mle) +
common + mle->variable[0];
}
/**
}
/**
@@
-4530,7
+4541,7
@@
static inline u8 ieee80211_mle_common_size(const u8 *data)
* @data: pointer to the element data
* @len: length of the containing element
*/
* @data: pointer to the element data
* @len: length of the containing element
*/
-static inline bool ieee80211_mle_size_ok(const u8 *data,
u8
len)
+static inline bool ieee80211_mle_size_ok(const u8 *data,
size_t
len)
{
const struct ieee80211_multi_link_elem *mle = (const void *)data;
u8 fixed = sizeof(*mle);
{
const struct ieee80211_multi_link_elem *mle = (const void *)data;
u8 fixed = sizeof(*mle);
@@
-4595,6
+4606,7
@@
static inline bool ieee80211_mle_size_ok(const u8 *data, u8 len)
enum ieee80211_mle_subelems {
IEEE80211_MLE_SUBELEM_PER_STA_PROFILE = 0,
enum ieee80211_mle_subelems {
IEEE80211_MLE_SUBELEM_PER_STA_PROFILE = 0,
+ IEEE80211_MLE_SUBELEM_FRAGMENT = 254,
};
#define IEEE80211_MLE_STA_CONTROL_LINK_ID 0x000f
};
#define IEEE80211_MLE_STA_CONTROL_LINK_ID 0x000f