forked from Minki/linux
mwifiex: handle interface type changes correctly
mlan0: managed or ibss The iftype can be changed from STATION to ADHOC, and vice versa. uap0: AP only The iftype cannot be changed. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com> Signed-off-by: Kiran Divekar <dkiran@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
26134e6eb5
commit
4f02341ac2
@ -497,31 +497,59 @@ mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
|
||||
int ret;
|
||||
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
||||
|
||||
if (priv->bss_mode == type) {
|
||||
wiphy_warn(wiphy, "already set to required type\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
priv->bss_mode = type;
|
||||
|
||||
switch (type) {
|
||||
switch (dev->ieee80211_ptr->iftype) {
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
dev->ieee80211_ptr->iftype = NL80211_IFTYPE_ADHOC;
|
||||
wiphy_dbg(wiphy, "info: setting interface type to adhoc\n");
|
||||
switch (type) {
|
||||
case NL80211_IFTYPE_STATION:
|
||||
break;
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
wiphy_warn(wiphy, "%s: kept type as IBSS\n", dev->name);
|
||||
case NL80211_IFTYPE_ADHOC: /* This shouldn't happen */
|
||||
return 0;
|
||||
case NL80211_IFTYPE_AP:
|
||||
default:
|
||||
wiphy_err(wiphy, "%s: changing to %d not supported\n",
|
||||
dev->name, type);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
break;
|
||||
case NL80211_IFTYPE_STATION:
|
||||
dev->ieee80211_ptr->iftype = NL80211_IFTYPE_STATION;
|
||||
wiphy_dbg(wiphy, "info: setting interface type to managed\n");
|
||||
switch (type) {
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
break;
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
wiphy_warn(wiphy, "%s: kept type as STA\n", dev->name);
|
||||
case NL80211_IFTYPE_STATION: /* This shouldn't happen */
|
||||
return 0;
|
||||
case NL80211_IFTYPE_AP:
|
||||
default:
|
||||
wiphy_err(wiphy, "%s: changing to %d not supported\n",
|
||||
dev->name, type);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
break;
|
||||
case NL80211_IFTYPE_AP:
|
||||
switch (type) {
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
wiphy_warn(wiphy, "%s: kept type as AP\n", dev->name);
|
||||
case NL80211_IFTYPE_AP: /* This shouldn't happen */
|
||||
return 0;
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
default:
|
||||
wiphy_err(wiphy, "%s: changing to %d not supported\n",
|
||||
dev->name, type);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
break;
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
dev->ieee80211_ptr->iftype = NL80211_IFTYPE_STATION;
|
||||
wiphy_dbg(wiphy, "info: setting interface type to auto\n");
|
||||
return 0;
|
||||
default:
|
||||
wiphy_err(wiphy, "unknown interface type: %d\n", type);
|
||||
return -EINVAL;
|
||||
wiphy_err(wiphy, "%s: unknown iftype: %d\n",
|
||||
dev->name, dev->ieee80211_ptr->iftype);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
dev->ieee80211_ptr->iftype = type;
|
||||
priv->bss_mode = type;
|
||||
mwifiex_deauthenticate(priv, NULL);
|
||||
|
||||
priv->sec_info.authentication_mode = NL80211_AUTHTYPE_OPEN_SYSTEM;
|
||||
|
Loading…
Reference in New Issue
Block a user