Skip to content

Commit

Permalink
nl80211: conditionally add back TCP WoWLAN information
Browse files Browse the repository at this point in the history
Add back the previously removed TCP WoWLAN information,
but only if userspace is prepared to deal with large
wiphy capability data dumps.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Johannes Berg committed Mar 6, 2013
1 parent cdc89b9 commit b56cf72
Showing 1 changed file with 46 additions and 2 deletions.
48 changes: 46 additions & 2 deletions net/wireless/nl80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -913,8 +913,49 @@ static int nl80211_put_iface_combinations(struct wiphy *wiphy,
}

#ifdef CONFIG_PM
static int nl80211_send_wowlan_tcp_caps(struct cfg80211_registered_device *rdev,
struct sk_buff *msg)
{
const struct wiphy_wowlan_tcp_support *tcp = rdev->wiphy.wowlan.tcp;
struct nlattr *nl_tcp;

if (!tcp)
return 0;

nl_tcp = nla_nest_start(msg, NL80211_WOWLAN_TRIG_TCP_CONNECTION);
if (!nl_tcp)
return -ENOBUFS;

if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD,
tcp->data_payload_max))
return -ENOBUFS;

if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD,
tcp->data_payload_max))
return -ENOBUFS;

if (tcp->seq && nla_put_flag(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ))
return -ENOBUFS;

if (tcp->tok && nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN,
sizeof(*tcp->tok), tcp->tok))
return -ENOBUFS;

if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL,
tcp->data_interval_max))
return -ENOBUFS;

if (nla_put_u32(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD,
tcp->wake_payload_max))
return -ENOBUFS;

nla_nest_end(msg, nl_tcp);
return 0;
}

static int nl80211_send_wowlan(struct sk_buff *msg,
struct cfg80211_registered_device *dev)
struct cfg80211_registered_device *dev,
bool large)
{
struct nlattr *nl_wowlan;

Expand Down Expand Up @@ -956,6 +997,9 @@ static int nl80211_send_wowlan(struct sk_buff *msg,
return -ENOBUFS;
}

if (large && nl80211_send_wowlan_tcp_caps(dev, msg))
return -ENOBUFS;

nla_nest_end(msg, nl_wowlan);

return 0;
Expand Down Expand Up @@ -1392,7 +1436,7 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *dev,
break;
case 6:
#ifdef CONFIG_PM
if (nl80211_send_wowlan(msg, dev))
if (nl80211_send_wowlan(msg, dev, split))
goto nla_put_failure;
(*split_start)++;
if (split)
Expand Down

0 comments on commit b56cf72

Please sign in to comment.