|
@@ -3620,7 +3620,8 @@ static int nl80211_stop_sched_scan(struct sk_buff *skb,
|
|
|
return __cfg80211_stop_sched_scan(rdev, false);
|
|
|
}
|
|
|
|
|
|
-static int nl80211_send_bss(struct sk_buff *msg, u32 pid, u32 seq, int flags,
|
|
|
+static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb,
|
|
|
+ u32 seq, int flags,
|
|
|
struct cfg80211_registered_device *rdev,
|
|
|
struct wireless_dev *wdev,
|
|
|
struct cfg80211_internal_bss *intbss)
|
|
@@ -3632,11 +3633,13 @@ static int nl80211_send_bss(struct sk_buff *msg, u32 pid, u32 seq, int flags,
|
|
|
|
|
|
ASSERT_WDEV_LOCK(wdev);
|
|
|
|
|
|
- hdr = nl80211hdr_put(msg, pid, seq, flags,
|
|
|
+ hdr = nl80211hdr_put(msg, NETLINK_CB(cb->skb).pid, seq, flags,
|
|
|
NL80211_CMD_NEW_SCAN_RESULTS);
|
|
|
if (!hdr)
|
|
|
return -1;
|
|
|
|
|
|
+ genl_dump_check_consistent(cb, hdr, &nl80211_fam);
|
|
|
+
|
|
|
NLA_PUT_U32(msg, NL80211_ATTR_GENERATION, rdev->bss_generation);
|
|
|
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, wdev->netdev->ifindex);
|
|
|
|
|
@@ -3725,11 +3728,12 @@ static int nl80211_dump_scan(struct sk_buff *skb,
|
|
|
spin_lock_bh(&rdev->bss_lock);
|
|
|
cfg80211_bss_expire(rdev);
|
|
|
|
|
|
+ cb->seq = rdev->bss_generation;
|
|
|
+
|
|
|
list_for_each_entry(scan, &rdev->bss_list, list) {
|
|
|
if (++idx <= start)
|
|
|
continue;
|
|
|
- if (nl80211_send_bss(skb,
|
|
|
- NETLINK_CB(cb->skb).pid,
|
|
|
+ if (nl80211_send_bss(skb, cb,
|
|
|
cb->nlh->nlmsg_seq, NLM_F_MULTI,
|
|
|
rdev, wdev, scan) < 0) {
|
|
|
idx--;
|