diff options
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 8a861a50b12f..1617e0bd4ca6 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -2436,6 +2436,36 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx) | |||
2436 | } | 2436 | } |
2437 | 2437 | ||
2438 | break; | 2438 | break; |
2439 | case WLAN_CATEGORY_VHT: | ||
2440 | if (sdata->vif.type != NL80211_IFTYPE_STATION && | ||
2441 | sdata->vif.type != NL80211_IFTYPE_MESH_POINT && | ||
2442 | sdata->vif.type != NL80211_IFTYPE_AP_VLAN && | ||
2443 | sdata->vif.type != NL80211_IFTYPE_AP && | ||
2444 | sdata->vif.type != NL80211_IFTYPE_ADHOC) | ||
2445 | break; | ||
2446 | |||
2447 | /* verify action code is present */ | ||
2448 | if (len < IEEE80211_MIN_ACTION_SIZE + 1) | ||
2449 | goto invalid; | ||
2450 | |||
2451 | switch (mgmt->u.action.u.vht_opmode_notif.action_code) { | ||
2452 | case WLAN_VHT_ACTION_OPMODE_NOTIF: { | ||
2453 | u8 opmode; | ||
2454 | |||
2455 | /* verify opmode is present */ | ||
2456 | if (len < IEEE80211_MIN_ACTION_SIZE + 2) | ||
2457 | goto invalid; | ||
2458 | |||
2459 | opmode = mgmt->u.action.u.vht_opmode_notif.operating_mode; | ||
2460 | |||
2461 | ieee80211_vht_handle_opmode(rx->sdata, rx->sta, | ||
2462 | opmode, status->band); | ||
2463 | goto handled; | ||
2464 | } | ||
2465 | default: | ||
2466 | break; | ||
2467 | } | ||
2468 | break; | ||
2439 | case WLAN_CATEGORY_BACK: | 2469 | case WLAN_CATEGORY_BACK: |
2440 | if (sdata->vif.type != NL80211_IFTYPE_STATION && | 2470 | if (sdata->vif.type != NL80211_IFTYPE_STATION && |
2441 | sdata->vif.type != NL80211_IFTYPE_MESH_POINT && | 2471 | sdata->vif.type != NL80211_IFTYPE_MESH_POINT && |