|
@@ -3563,11 +3563,43 @@ void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev)
|
|
genlmsg_multicast(msg, 0, nl80211_config_mcgrp.id, GFP_KERNEL);
|
|
genlmsg_multicast(msg, 0, nl80211_config_mcgrp.id, GFP_KERNEL);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int nl80211_add_scan_req(struct sk_buff *msg,
|
|
|
|
+ struct cfg80211_registered_device *rdev)
|
|
|
|
+{
|
|
|
|
+ struct cfg80211_scan_request *req = rdev->scan_req;
|
|
|
|
+ struct nlattr *nest;
|
|
|
|
+ int i;
|
|
|
|
+
|
|
|
|
+ if (WARN_ON(!req))
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ nest = nla_nest_start(msg, NL80211_ATTR_SCAN_SSIDS);
|
|
|
|
+ if (!nest)
|
|
|
|
+ goto nla_put_failure;
|
|
|
|
+ for (i = 0; i < req->n_ssids; i++)
|
|
|
|
+ NLA_PUT(msg, i, req->ssids[i].ssid_len, req->ssids[i].ssid);
|
|
|
|
+ nla_nest_end(msg, nest);
|
|
|
|
+
|
|
|
|
+ nest = nla_nest_start(msg, NL80211_ATTR_SCAN_FREQUENCIES);
|
|
|
|
+ if (!nest)
|
|
|
|
+ goto nla_put_failure;
|
|
|
|
+ for (i = 0; i < req->n_channels; i++)
|
|
|
|
+ NLA_PUT_U32(msg, i, req->channels[i]->center_freq);
|
|
|
|
+ nla_nest_end(msg, nest);
|
|
|
|
+
|
|
|
|
+ if (req->ie)
|
|
|
|
+ NLA_PUT(msg, NL80211_ATTR_IE, req->ie_len, req->ie);
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+ nla_put_failure:
|
|
|
|
+ return -ENOBUFS;
|
|
|
|
+}
|
|
|
|
+
|
|
static int nl80211_send_scan_donemsg(struct sk_buff *msg,
|
|
static int nl80211_send_scan_donemsg(struct sk_buff *msg,
|
|
- struct cfg80211_registered_device *rdev,
|
|
|
|
- struct net_device *netdev,
|
|
|
|
- u32 pid, u32 seq, int flags,
|
|
|
|
- u32 cmd)
|
|
|
|
|
|
+ struct cfg80211_registered_device *rdev,
|
|
|
|
+ struct net_device *netdev,
|
|
|
|
+ u32 pid, u32 seq, int flags,
|
|
|
|
+ u32 cmd)
|
|
{
|
|
{
|
|
void *hdr;
|
|
void *hdr;
|
|
|
|
|
|
@@ -3578,7 +3610,8 @@ static int nl80211_send_scan_donemsg(struct sk_buff *msg,
|
|
NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx);
|
|
NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx);
|
|
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex);
|
|
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex);
|
|
|
|
|
|
- /* XXX: we should probably bounce back the request? */
|
|
|
|
|
|
+ /* ignore errors and send incomplete event anyway */
|
|
|
|
+ nl80211_add_scan_req(msg, rdev);
|
|
|
|
|
|
return genlmsg_end(msg, hdr);
|
|
return genlmsg_end(msg, hdr);
|
|
|
|
|