@ -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 ;