nl80211: add no pre-auth attribute and ext. feature flag for ctrl. port
If the nl80211 control port is used before this patch, pre-auth frames (0x88c7) are send to userspace uncoditionally. While this enables userspace to only use nl80211 on the station side, it is not always useful for APs. Furthermore, pre-auth frames are ordinary data frames and not related to the control port. Therefore it should for example be possible for pre-auth frames to be bridged onto a wired network on AP side without touching userspace. For backwards compatibility to code already using pre-auth over nl80211, this patch adds a feature flag to disable this behavior, while it remains enabled by default. An additional ext. feature flag is added to detect this from userspace. Thanks to Jouni for pointing out, that pre-auth frames should be handled as ordinary data frames. Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Link: https://lore.kernel.org/r/20200312091055.54257-2-markus.theil@tu-ilmenau.de Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
5d44fe7c98
commit
5631d96aa3
|
@ -1632,7 +1632,8 @@ enum nl80211_commands {
|
||||||
* flag is included, then control port frames are sent over NL80211 instead
|
* flag is included, then control port frames are sent over NL80211 instead
|
||||||
* using %CMD_CONTROL_PORT_FRAME. If control port routing over NL80211 is
|
* using %CMD_CONTROL_PORT_FRAME. If control port routing over NL80211 is
|
||||||
* to be used then userspace must also use the %NL80211_ATTR_SOCKET_OWNER
|
* to be used then userspace must also use the %NL80211_ATTR_SOCKET_OWNER
|
||||||
* flag.
|
* flag. When used with %NL80211_ATTR_CONTROL_PORT_NO_PREAUTH, pre-auth
|
||||||
|
* frames are not forwared over the control port.
|
||||||
*
|
*
|
||||||
* @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver.
|
* @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver.
|
||||||
* We recommend using nested, driver-specific attributes within this.
|
* We recommend using nested, driver-specific attributes within this.
|
||||||
|
@ -2442,6 +2443,9 @@ enum nl80211_commands {
|
||||||
* on output (in wiphy attributes) it contains only the feature sub-
|
* on output (in wiphy attributes) it contains only the feature sub-
|
||||||
* attributes.
|
* attributes.
|
||||||
*
|
*
|
||||||
|
* @NL80211_ATTR_CONTROL_PORT_NO_PREAUTH: disable preauth frame rx on control
|
||||||
|
* port in order to forward/receive them as ordinary data frames.
|
||||||
|
*
|
||||||
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
|
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
|
||||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||||
|
@ -2912,6 +2916,8 @@ enum nl80211_attrs {
|
||||||
|
|
||||||
NL80211_ATTR_TID_CONFIG,
|
NL80211_ATTR_TID_CONFIG,
|
||||||
|
|
||||||
|
NL80211_ATTR_CONTROL_PORT_NO_PREAUTH,
|
||||||
|
|
||||||
/* add attributes here, update the policy in nl80211.c */
|
/* add attributes here, update the policy in nl80211.c */
|
||||||
|
|
||||||
__NL80211_ATTR_AFTER_LAST,
|
__NL80211_ATTR_AFTER_LAST,
|
||||||
|
@ -5642,6 +5648,10 @@ enum nl80211_feature_flags {
|
||||||
* @NL80211_EXT_FEATURE_BEACON_PROTECTION: The driver supports Beacon protection
|
* @NL80211_EXT_FEATURE_BEACON_PROTECTION: The driver supports Beacon protection
|
||||||
* and can receive key configuration for BIGTK using key indexes 6 and 7.
|
* and can receive key configuration for BIGTK using key indexes 6 and 7.
|
||||||
*
|
*
|
||||||
|
* @NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH: The driver can disable the
|
||||||
|
* forwarding of preauth frames over the control port. They are then
|
||||||
|
* handled as ordinary data frames.
|
||||||
|
*
|
||||||
* @NUM_NL80211_EXT_FEATURES: number of extended features.
|
* @NUM_NL80211_EXT_FEATURES: number of extended features.
|
||||||
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
|
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
|
||||||
*/
|
*/
|
||||||
|
@ -5690,6 +5700,7 @@ enum nl80211_ext_feature_index {
|
||||||
NL80211_EXT_FEATURE_VLAN_OFFLOAD,
|
NL80211_EXT_FEATURE_VLAN_OFFLOAD,
|
||||||
NL80211_EXT_FEATURE_AQL,
|
NL80211_EXT_FEATURE_AQL,
|
||||||
NL80211_EXT_FEATURE_BEACON_PROTECTION,
|
NL80211_EXT_FEATURE_BEACON_PROTECTION,
|
||||||
|
NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH,
|
||||||
|
|
||||||
/* add new features before the definition below */
|
/* add new features before the definition below */
|
||||||
NUM_NL80211_EXT_FEATURES,
|
NUM_NL80211_EXT_FEATURES,
|
||||||
|
|
|
@ -658,6 +658,7 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
|
||||||
[NL80211_ATTR_HE_BSS_COLOR] = NLA_POLICY_NESTED(he_bss_color_policy),
|
[NL80211_ATTR_HE_BSS_COLOR] = NLA_POLICY_NESTED(he_bss_color_policy),
|
||||||
[NL80211_ATTR_TID_CONFIG] =
|
[NL80211_ATTR_TID_CONFIG] =
|
||||||
NLA_POLICY_NESTED_ARRAY(nl80211_tid_config_attr_policy),
|
NLA_POLICY_NESTED_ARRAY(nl80211_tid_config_attr_policy),
|
||||||
|
[NL80211_ATTR_CONTROL_PORT_NO_PREAUTH] = { .type = NLA_FLAG },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* policy for the key attributes */
|
/* policy for the key attributes */
|
||||||
|
|
Loading…
Reference in a new issue