VLAN interfaces have yet another bug: they aren't accounted
for properly in the receive path in prepare_for_handlers().
I noticed this by code inspection, but it would be easy for
the compiler to catch such things if we'd just use the proper
enum where appropriate.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
                if (!sdata->u.vlan.ap)
                        return -ENOLINK;
                break;
+       case IEEE80211_IF_TYPE_AP:
+       case IEEE80211_IF_TYPE_MGMT:
+       case IEEE80211_IF_TYPE_STA:
+       case IEEE80211_IF_TYPE_MNTR:
+       case IEEE80211_IF_TYPE_IBSS:
+               /* no special treatment */
+               break;
        }
 
        if (local->open_count == 0) {
 
 #define IEEE80211_SDATA_SHORT_PREAMBLE BIT(3)
 struct ieee80211_sub_if_data {
        struct list_head list;
-       unsigned int type;
+       enum ieee80211_if_types type;
 
        struct wireless_dev wdev;
 
 
        ieee80211_if_sdata_deinit(sdata);
 
        switch (sdata->type) {
+       case IEEE80211_IF_TYPE_MGMT:
+               /* nothing to do */
+               break;
        case IEEE80211_IF_TYPE_AP: {
                /* Remove all virtual interfaces that use this BSS
                 * as their sdata->bss */
 
                        rx->sta = ieee80211_ibss_add_sta(sdata->dev, rx->skb,
                                                         bssid, hdr->addr2);
                break;
+       case IEEE80211_IF_TYPE_VLAN:
        case IEEE80211_IF_TYPE_AP:
                if (!bssid) {
                        if (compare_ether_addr(sdata->dev->dev_addr,
                if (compare_ether_addr(sdata->u.wds.remote_addr, hdr->addr2))
                        return 0;
                break;
+       case IEEE80211_IF_TYPE_MNTR:
+               /* take everything */
+               break;
+       case IEEE80211_IF_TYPE_MGMT:
+               /* should never get here */
+               WARN_ON(1);
+               break;
        }
 
        return 1;