nl80211: Add a separate driver capability for control port RX
This is needed since the initial implementation of the control port mechanism in the kernel mixed in RSN pre-authentication ethertype unconditionally (and IMHO, incorrectly) into the control port. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
bb9e3935dd
commit
932546ac28
4 changed files with 10 additions and 2 deletions
|
@ -1838,7 +1838,7 @@ struct wpa_driver_capa {
|
||||||
#define WPA_DRIVER_FLAGS_FTM_RESPONDER 0x0100000000000000ULL
|
#define WPA_DRIVER_FLAGS_FTM_RESPONDER 0x0100000000000000ULL
|
||||||
/** Driver support 4-way handshake offload for WPA-Personal */
|
/** Driver support 4-way handshake offload for WPA-Personal */
|
||||||
#define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK 0x0200000000000000ULL
|
#define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK 0x0200000000000000ULL
|
||||||
/** Driver supports a separate control port for EAPOL frames */
|
/** Driver supports a separate control port TX for EAPOL frames */
|
||||||
#define WPA_DRIVER_FLAGS_CONTROL_PORT 0x0400000000000000ULL
|
#define WPA_DRIVER_FLAGS_CONTROL_PORT 0x0400000000000000ULL
|
||||||
/** Driver supports VLAN offload */
|
/** Driver supports VLAN offload */
|
||||||
#define WPA_DRIVER_FLAGS_VLAN_OFFLOAD 0x0800000000000000ULL
|
#define WPA_DRIVER_FLAGS_VLAN_OFFLOAD 0x0800000000000000ULL
|
||||||
|
@ -1852,6 +1852,8 @@ struct wpa_driver_capa {
|
||||||
#define WPA_DRIVER_FLAGS_EXTENDED_KEY_ID 0x8000000000000000ULL
|
#define WPA_DRIVER_FLAGS_EXTENDED_KEY_ID 0x8000000000000000ULL
|
||||||
u64 flags;
|
u64 flags;
|
||||||
|
|
||||||
|
/** Driver supports a separate control port RX for EAPOL frames */
|
||||||
|
#define WPA_DRIVER_FLAGS2_CONTROL_PORT_RX 0x0000000000000001ULL
|
||||||
u64 flags2;
|
u64 flags2;
|
||||||
|
|
||||||
#define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \
|
#define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \
|
||||||
|
|
|
@ -327,6 +327,7 @@ const char * driver_flag2_to_string(u64 flag2)
|
||||||
{
|
{
|
||||||
#define DF2S(x) case WPA_DRIVER_FLAGS2_ ## x: return #x
|
#define DF2S(x) case WPA_DRIVER_FLAGS2_ ## x: return #x
|
||||||
switch (flag2) {
|
switch (flag2) {
|
||||||
|
DF2S(CONTROL_PORT_RX);
|
||||||
}
|
}
|
||||||
return "UNKNOWN";
|
return "UNKNOWN";
|
||||||
#undef DF2S
|
#undef DF2S
|
||||||
|
|
|
@ -8124,8 +8124,10 @@ static int nl80211_set_param(void *priv, const char *param)
|
||||||
drv->test_use_roc_tx = 1;
|
drv->test_use_roc_tx = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (os_strstr(param, "control_port=0"))
|
if (os_strstr(param, "control_port=0")) {
|
||||||
drv->capa.flags &= ~WPA_DRIVER_FLAGS_CONTROL_PORT;
|
drv->capa.flags &= ~WPA_DRIVER_FLAGS_CONTROL_PORT;
|
||||||
|
drv->capa.flags2 &= ~WPA_DRIVER_FLAGS2_CONTROL_PORT_RX;
|
||||||
|
}
|
||||||
|
|
||||||
if (os_strstr(param, "full_ap_client_state=0"))
|
if (os_strstr(param, "full_ap_client_state=0"))
|
||||||
drv->capa.flags &= ~WPA_DRIVER_FLAGS_FULL_AP_CLIENT_STATE;
|
drv->capa.flags &= ~WPA_DRIVER_FLAGS_FULL_AP_CLIENT_STATE;
|
||||||
|
|
|
@ -441,6 +441,9 @@ static void wiphy_info_ext_feature_flags(struct wiphy_info_data *info,
|
||||||
if (ext_feature_isset(ext_features, len,
|
if (ext_feature_isset(ext_features, len,
|
||||||
NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211))
|
NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211))
|
||||||
capa->flags |= WPA_DRIVER_FLAGS_CONTROL_PORT;
|
capa->flags |= WPA_DRIVER_FLAGS_CONTROL_PORT;
|
||||||
|
if (ext_feature_isset(ext_features, len,
|
||||||
|
NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH))
|
||||||
|
capa->flags2 |= WPA_DRIVER_FLAGS2_CONTROL_PORT_RX;
|
||||||
|
|
||||||
if (ext_feature_isset(ext_features, len,
|
if (ext_feature_isset(ext_features, len,
|
||||||
NL80211_EXT_FEATURE_VLAN_OFFLOAD))
|
NL80211_EXT_FEATURE_VLAN_OFFLOAD))
|
||||||
|
|
Loading…
Reference in a new issue