This patch enables mac80211 to support the PS challenged mode when used in master mode. A new attribute, NL80211_ATTR_WIPHY_AP_PS_CHALLENGED, was added to nl80211_attrs; also a new member (ap_ps_challenged) was added to struct wiphy; and nl80211_send_wiphy() was adjusted accordingly. User space applications (like hostapd) should check the NL80211_ATTR_WIPHY_AP_PS_CHALLENGED attribute and display a proper message, if it is set, to inform the users. Signed-off-by: Rami Rosen <ramirose@xxxxxxxxx> diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 7982734..dbe15e0 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h @@ -256,6 +256,9 @@ enum nl80211_commands { * supported interface types, each a flag attribute with the number * of the interface mode. * + * @NL80211_ATTR_WIPHY_AP_PS_CHALLENGED: indicates that the wiphy support + * for PS is not full. + * * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use */ @@ -316,6 +319,8 @@ enum nl80211_attrs { NL80211_ATTR_WIPHY_TXQ_PARAMS, + NL80211_ATTR_WIPHY_AP_PS_CHALLENGED, + /* add attributes here, update the policy in nl80211.c */ __NL80211_ATTR_AFTER_LAST, @@ -329,6 +334,7 @@ enum nl80211_attrs { #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS +#define NL80211_ATTR_WIPHY_AP_PS_CHALLENGED NL80211_ATTR_WIPHY_AP_PS_CHALLENGED #define NL80211_MAX_SUPP_RATES 32 #define NL80211_MAX_SUPP_REG_RULES 32 diff --git a/include/net/wireless.h b/include/net/wireless.h index aedefa5..c7ec68b 100644 --- a/include/net/wireless.h +++ b/include/net/wireless.h @@ -198,6 +198,8 @@ struct wiphy { u16 interface_modes; bool fw_handles_regulatory; + /* enable AP (master mode) when the AP is without proper power saving mode */ + bool ap_ps_challenged; /* If multiple wiphys are registered and you're handed e.g. * a regular netdev with assigned ieee80211_ptr, you won't diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 00121ce..73098fe 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -149,6 +149,8 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags, } nla_nest_end(msg, nl_modes); + if (dev->wiphy.ap_ps_challenged) + NLA_PUT_FLAG(msg, NL80211_ATTR_WIPHY_AP_PS_CHALLENGED); nl_bands = nla_nest_start(msg, NL80211_ATTR_WIPHY_BANDS); if (!nl_bands) -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html