cfg80211: consider VHT opmode on station update
Currently, this attribute is only fetched on station addition, but not on station change. Since this info is only present in the assoc request, with full station state support in the driver it cannot be present when the station is added. Thus, add support for changing the VHT opmode on station update if done before (or while) the station is marked as associated. After this, ignore it, since it used to be ignored. Signed-off-by: Beni Lev <beni.lev@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
d7f842442f
commit
06f7c88c10
2 changed files with 18 additions and 1 deletions
|
@ -1772,7 +1772,9 @@ enum nl80211_commands {
|
||||||
*
|
*
|
||||||
* @NL80211_ATTR_OPMODE_NOTIF: Operating mode field from Operating Mode
|
* @NL80211_ATTR_OPMODE_NOTIF: Operating mode field from Operating Mode
|
||||||
* Notification Element based on association request when used with
|
* Notification Element based on association request when used with
|
||||||
* %NL80211_CMD_NEW_STATION; u8 attribute.
|
* %NL80211_CMD_NEW_STATION or %NL80211_CMD_SET_STATION (only when
|
||||||
|
* %NL80211_FEATURE_FULL_AP_CLIENT_STATE is supported, or with TDLS);
|
||||||
|
* u8 attribute.
|
||||||
*
|
*
|
||||||
* @NL80211_ATTR_VENDOR_ID: The vendor ID, either a 24-bit OUI or, if
|
* @NL80211_ATTR_VENDOR_ID: The vendor ID, either a 24-bit OUI or, if
|
||||||
* %NL80211_VENDOR_ID_IS_LINUX is set, a special Linux ID (not used yet)
|
* %NL80211_VENDOR_ID_IS_LINUX is set, a special Linux ID (not used yet)
|
||||||
|
|
|
@ -4615,6 +4615,15 @@ int cfg80211_check_station_change(struct wiphy *wiphy,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Older kernel versions ignored this attribute entirely, so don't
|
||||||
|
* reject attempts to update it but mark it as unused instead so the
|
||||||
|
* driver won't look at the data.
|
||||||
|
*/
|
||||||
|
if (statype != CFG80211_STA_AP_CLIENT_UNASSOC &&
|
||||||
|
statype != CFG80211_STA_TDLS_PEER_SETUP)
|
||||||
|
params->opmode_notif_used = false;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(cfg80211_check_station_change);
|
EXPORT_SYMBOL(cfg80211_check_station_change);
|
||||||
|
@ -4854,6 +4863,12 @@ static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info)
|
||||||
params.local_pm = pm;
|
params.local_pm = pm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
|
||||||
|
params.opmode_notif_used = true;
|
||||||
|
params.opmode_notif =
|
||||||
|
nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
|
||||||
|
}
|
||||||
|
|
||||||
/* Include parameters for TDLS peer (will check later) */
|
/* Include parameters for TDLS peer (will check later) */
|
||||||
err = nl80211_set_station_tdls(info, ¶ms);
|
err = nl80211_set_station_tdls(info, ¶ms);
|
||||||
if (err)
|
if (err)
|
||||||
|
|
Loading…
Reference in a new issue