|
@@ -9151,21 +9151,31 @@ void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
|
|
|
NL80211_CMD_DISASSOCIATE, gfp);
|
|
|
}
|
|
|
|
|
|
-void nl80211_send_unprot_deauth(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev, const u8 *buf,
|
|
|
- size_t len, gfp_t gfp)
|
|
|
+void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf,
|
|
|
+ size_t len)
|
|
|
{
|
|
|
- nl80211_send_mlme_event(rdev, netdev, buf, len,
|
|
|
- NL80211_CMD_UNPROT_DEAUTHENTICATE, gfp);
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
+
|
|
|
+ trace_cfg80211_send_unprot_deauth(dev);
|
|
|
+ nl80211_send_mlme_event(rdev, dev, buf, len,
|
|
|
+ NL80211_CMD_UNPROT_DEAUTHENTICATE, GFP_ATOMIC);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_send_unprot_deauth);
|
|
|
|
|
|
-void nl80211_send_unprot_disassoc(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev, const u8 *buf,
|
|
|
- size_t len, gfp_t gfp)
|
|
|
+void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf,
|
|
|
+ size_t len)
|
|
|
{
|
|
|
- nl80211_send_mlme_event(rdev, netdev, buf, len,
|
|
|
- NL80211_CMD_UNPROT_DISASSOCIATE, gfp);
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
+
|
|
|
+ trace_cfg80211_send_unprot_disassoc(dev);
|
|
|
+ nl80211_send_mlme_event(rdev, dev, buf, len,
|
|
|
+ NL80211_CMD_UNPROT_DISASSOCIATE, GFP_ATOMIC);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_send_unprot_disassoc);
|
|
|
|
|
|
static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev,
|
|
|
struct net_device *netdev, int cmd,
|
|
@@ -9368,14 +9378,19 @@ void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev,
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
|
|
|
-void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev,
|
|
|
- const u8 *macaddr, const u8* ie, u8 ie_len,
|
|
|
- gfp_t gfp)
|
|
|
+void cfg80211_notify_new_peer_candidate(struct net_device *dev, const u8 *addr,
|
|
|
+ const u8* ie, u8 ie_len, gfp_t gfp)
|
|
|
{
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
|
|
|
struct sk_buff *msg;
|
|
|
void *hdr;
|
|
|
|
|
|
+ if (WARN_ON(wdev->iftype != NL80211_IFTYPE_MESH_POINT))
|
|
|
+ return;
|
|
|
+
|
|
|
+ trace_cfg80211_notify_new_peer_candidate(dev, addr);
|
|
|
+
|
|
|
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
|
|
|
if (!msg)
|
|
|
return;
|
|
@@ -9387,8 +9402,8 @@ void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev,
|
|
|
}
|
|
|
|
|
|
if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
|
|
|
- nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) ||
|
|
|
- nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, macaddr) ||
|
|
|
+ nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
|
|
|
+ nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) ||
|
|
|
(ie_len && ie &&
|
|
|
nla_put(msg, NL80211_ATTR_IE, ie_len , ie)))
|
|
|
goto nla_put_failure;
|
|
@@ -9403,6 +9418,7 @@ void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev,
|
|
|
genlmsg_cancel(msg, hdr);
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_notify_new_peer_candidate);
|
|
|
|
|
|
void nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev,
|
|
|
struct net_device *netdev, const u8 *addr,
|
|
@@ -9541,31 +9557,42 @@ static void nl80211_send_remain_on_chan_event(
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
|
|
|
-void nl80211_send_remain_on_channel(struct cfg80211_registered_device *rdev,
|
|
|
- struct wireless_dev *wdev, u64 cookie,
|
|
|
- struct ieee80211_channel *chan,
|
|
|
- unsigned int duration, gfp_t gfp)
|
|
|
+void cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie,
|
|
|
+ struct ieee80211_channel *chan,
|
|
|
+ unsigned int duration, gfp_t gfp)
|
|
|
{
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
+
|
|
|
+ trace_cfg80211_ready_on_channel(wdev, cookie, chan, duration);
|
|
|
nl80211_send_remain_on_chan_event(NL80211_CMD_REMAIN_ON_CHANNEL,
|
|
|
rdev, wdev, cookie, chan,
|
|
|
duration, gfp);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_ready_on_channel);
|
|
|
|
|
|
-void nl80211_send_remain_on_channel_cancel(
|
|
|
- struct cfg80211_registered_device *rdev,
|
|
|
- struct wireless_dev *wdev,
|
|
|
- u64 cookie, struct ieee80211_channel *chan, gfp_t gfp)
|
|
|
+void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie,
|
|
|
+ struct ieee80211_channel *chan,
|
|
|
+ gfp_t gfp)
|
|
|
{
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
+
|
|
|
+ trace_cfg80211_ready_on_channel_expired(wdev, cookie, chan);
|
|
|
nl80211_send_remain_on_chan_event(NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
|
|
|
rdev, wdev, cookie, chan, 0, gfp);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_remain_on_channel_expired);
|
|
|
|
|
|
-void nl80211_send_sta_event(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *dev, const u8 *mac_addr,
|
|
|
- struct station_info *sinfo, gfp_t gfp)
|
|
|
+void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
|
|
|
+ struct station_info *sinfo, gfp_t gfp)
|
|
|
{
|
|
|
+ struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
struct sk_buff *msg;
|
|
|
|
|
|
+ trace_cfg80211_new_sta(dev, mac_addr, sinfo);
|
|
|
+
|
|
|
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
|
|
|
if (!msg)
|
|
|
return;
|
|
@@ -9579,14 +9606,17 @@ void nl80211_send_sta_event(struct cfg80211_registered_device *rdev,
|
|
|
genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
|
|
|
nl80211_mlme_mcgrp.id, gfp);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_new_sta);
|
|
|
|
|
|
-void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *dev, const u8 *mac_addr,
|
|
|
- gfp_t gfp)
|
|
|
+void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp)
|
|
|
{
|
|
|
+ struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
struct sk_buff *msg;
|
|
|
void *hdr;
|
|
|
|
|
|
+ trace_cfg80211_del_sta(dev, mac_addr);
|
|
|
+
|
|
|
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
|
|
|
if (!msg)
|
|
|
return;
|
|
@@ -9611,12 +9641,14 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
|
|
|
genlmsg_cancel(msg, hdr);
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_del_sta);
|
|
|
|
|
|
-void nl80211_send_conn_failed_event(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *dev, const u8 *mac_addr,
|
|
|
- enum nl80211_connect_failed_reason reason,
|
|
|
- gfp_t gfp)
|
|
|
+void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
|
|
|
+ enum nl80211_connect_failed_reason reason,
|
|
|
+ gfp_t gfp)
|
|
|
{
|
|
|
+ struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
struct sk_buff *msg;
|
|
|
void *hdr;
|
|
|
|
|
@@ -9645,6 +9677,7 @@ void nl80211_send_conn_failed_event(struct cfg80211_registered_device *rdev,
|
|
|
genlmsg_cancel(msg, hdr);
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_conn_failed);
|
|
|
|
|
|
static bool __nl80211_unexpected_frame(struct net_device *dev, u8 cmd,
|
|
|
const u8 *addr, gfp_t gfp)
|
|
@@ -9689,19 +9722,47 @@ static bool __nl80211_unexpected_frame(struct net_device *dev, u8 cmd,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-bool nl80211_unexpected_frame(struct net_device *dev, const u8 *addr, gfp_t gfp)
|
|
|
+bool cfg80211_rx_spurious_frame(struct net_device *dev,
|
|
|
+ const u8 *addr, gfp_t gfp)
|
|
|
{
|
|
|
- return __nl80211_unexpected_frame(dev, NL80211_CMD_UNEXPECTED_FRAME,
|
|
|
- addr, gfp);
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ bool ret;
|
|
|
+
|
|
|
+ trace_cfg80211_rx_spurious_frame(dev, addr);
|
|
|
+
|
|
|
+ if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
|
|
|
+ wdev->iftype != NL80211_IFTYPE_P2P_GO)) {
|
|
|
+ trace_cfg80211_return_bool(false);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ ret = __nl80211_unexpected_frame(dev, NL80211_CMD_UNEXPECTED_FRAME,
|
|
|
+ addr, gfp);
|
|
|
+ trace_cfg80211_return_bool(ret);
|
|
|
+ return ret;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_rx_spurious_frame);
|
|
|
|
|
|
-bool nl80211_unexpected_4addr_frame(struct net_device *dev,
|
|
|
- const u8 *addr, gfp_t gfp)
|
|
|
+bool cfg80211_rx_unexpected_4addr_frame(struct net_device *dev,
|
|
|
+ const u8 *addr, gfp_t gfp)
|
|
|
{
|
|
|
- return __nl80211_unexpected_frame(dev,
|
|
|
- NL80211_CMD_UNEXPECTED_4ADDR_FRAME,
|
|
|
- addr, gfp);
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ bool ret;
|
|
|
+
|
|
|
+ trace_cfg80211_rx_unexpected_4addr_frame(dev, addr);
|
|
|
+
|
|
|
+ if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
|
|
|
+ wdev->iftype != NL80211_IFTYPE_P2P_GO &&
|
|
|
+ wdev->iftype != NL80211_IFTYPE_AP_VLAN)) {
|
|
|
+ trace_cfg80211_return_bool(false);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ ret = __nl80211_unexpected_frame(dev,
|
|
|
+ NL80211_CMD_UNEXPECTED_4ADDR_FRAME,
|
|
|
+ addr, gfp);
|
|
|
+ trace_cfg80211_return_bool(ret);
|
|
|
+ return ret;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_rx_unexpected_4addr_frame);
|
|
|
|
|
|
int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
|
|
|
struct wireless_dev *wdev, u32 nlportid,
|
|
@@ -9741,15 +9802,17 @@ int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
|
|
|
return -ENOBUFS;
|
|
|
}
|
|
|
|
|
|
-void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev,
|
|
|
- struct wireless_dev *wdev, u64 cookie,
|
|
|
- const u8 *buf, size_t len, bool ack,
|
|
|
- gfp_t gfp)
|
|
|
+void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie,
|
|
|
+ const u8 *buf, size_t len, bool ack, gfp_t gfp)
|
|
|
{
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
struct net_device *netdev = wdev->netdev;
|
|
|
struct sk_buff *msg;
|
|
|
void *hdr;
|
|
|
|
|
|
+ trace_cfg80211_mgmt_tx_status(wdev, cookie, ack);
|
|
|
+
|
|
|
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
|
|
|
if (!msg)
|
|
|
return;
|
|
@@ -9777,17 +9840,21 @@ void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev,
|
|
|
genlmsg_cancel(msg, hdr);
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_mgmt_tx_status);
|
|
|
|
|
|
-void
|
|
|
-nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev,
|
|
|
- enum nl80211_cqm_rssi_threshold_event rssi_event,
|
|
|
- gfp_t gfp)
|
|
|
+void cfg80211_cqm_rssi_notify(struct net_device *dev,
|
|
|
+ enum nl80211_cqm_rssi_threshold_event rssi_event,
|
|
|
+ gfp_t gfp)
|
|
|
{
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
struct sk_buff *msg;
|
|
|
struct nlattr *pinfoattr;
|
|
|
void *hdr;
|
|
|
|
|
|
+ trace_cfg80211_cqm_rssi_notify(dev, rssi_event);
|
|
|
+
|
|
|
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
|
|
|
if (!msg)
|
|
|
return;
|
|
@@ -9799,7 +9866,7 @@ nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev,
|
|
|
}
|
|
|
|
|
|
if (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, dev->ifindex))
|
|
|
goto nla_put_failure;
|
|
|
|
|
|
pinfoattr = nla_nest_start(msg, NL80211_ATTR_CQM);
|
|
@@ -9822,10 +9889,11 @@ nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev,
|
|
|
genlmsg_cancel(msg, hdr);
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_cqm_rssi_notify);
|
|
|
|
|
|
-void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev, const u8 *bssid,
|
|
|
- const u8 *replay_ctr, gfp_t gfp)
|
|
|
+static void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
|
|
|
+ struct net_device *netdev, const u8 *bssid,
|
|
|
+ const u8 *replay_ctr, gfp_t gfp)
|
|
|
{
|
|
|
struct sk_buff *msg;
|
|
|
struct nlattr *rekey_attr;
|
|
@@ -9867,9 +9935,22 @@ void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
|
|
|
-void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev, int index,
|
|
|
- const u8 *bssid, bool preauth, gfp_t gfp)
|
|
|
+void cfg80211_gtk_rekey_notify(struct net_device *dev, const u8 *bssid,
|
|
|
+ const u8 *replay_ctr, gfp_t gfp)
|
|
|
+{
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
+
|
|
|
+ trace_cfg80211_gtk_rekey_notify(dev, bssid);
|
|
|
+ nl80211_gtk_rekey_notify(rdev, dev, bssid, replay_ctr, gfp);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(cfg80211_gtk_rekey_notify);
|
|
|
+
|
|
|
+static void
|
|
|
+nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev,
|
|
|
+ struct net_device *netdev, int index,
|
|
|
+ const u8 *bssid, bool preauth, gfp_t gfp)
|
|
|
{
|
|
|
struct sk_buff *msg;
|
|
|
struct nlattr *attr;
|
|
@@ -9912,9 +9993,22 @@ void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev,
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
|
|
|
-void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev,
|
|
|
- struct cfg80211_chan_def *chandef, gfp_t gfp)
|
|
|
+void cfg80211_pmksa_candidate_notify(struct net_device *dev, int index,
|
|
|
+ const u8 *bssid, bool preauth, gfp_t gfp)
|
|
|
+{
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
+
|
|
|
+ trace_cfg80211_pmksa_candidate_notify(dev, index, bssid, preauth);
|
|
|
+ nl80211_pmksa_candidate_notify(rdev, dev, index, bssid, preauth, gfp);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(cfg80211_pmksa_candidate_notify);
|
|
|
+
|
|
|
+static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
|
|
|
+ struct net_device *netdev,
|
|
|
+ struct cfg80211_chan_def *chandef,
|
|
|
+ gfp_t gfp)
|
|
|
{
|
|
|
struct sk_buff *msg;
|
|
|
void *hdr;
|
|
@@ -9946,11 +10040,36 @@ void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
|
|
|
-void
|
|
|
-nl80211_send_cqm_txe_notify(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev, const u8 *peer,
|
|
|
- u32 num_packets, u32 rate, u32 intvl, gfp_t gfp)
|
|
|
+void cfg80211_ch_switch_notify(struct net_device *dev,
|
|
|
+ struct cfg80211_chan_def *chandef)
|
|
|
{
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
+
|
|
|
+ trace_cfg80211_ch_switch_notify(dev, chandef);
|
|
|
+
|
|
|
+ wdev_lock(wdev);
|
|
|
+
|
|
|
+ if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
|
|
|
+ wdev->iftype != NL80211_IFTYPE_P2P_GO))
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ wdev->channel = chandef->chan;
|
|
|
+ nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL);
|
|
|
+out:
|
|
|
+ wdev_unlock(wdev);
|
|
|
+ return;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(cfg80211_ch_switch_notify);
|
|
|
+
|
|
|
+void cfg80211_cqm_txe_notify(struct net_device *dev,
|
|
|
+ const u8 *peer, u32 num_packets,
|
|
|
+ u32 rate, u32 intvl, gfp_t gfp)
|
|
|
+{
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
struct sk_buff *msg;
|
|
|
struct nlattr *pinfoattr;
|
|
|
void *hdr;
|
|
@@ -9966,7 +10085,7 @@ nl80211_send_cqm_txe_notify(struct cfg80211_registered_device *rdev,
|
|
|
}
|
|
|
|
|
|
if (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, dev->ifindex) ||
|
|
|
nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer))
|
|
|
goto nla_put_failure;
|
|
|
|
|
@@ -9995,6 +10114,7 @@ nl80211_send_cqm_txe_notify(struct cfg80211_registered_device *rdev,
|
|
|
genlmsg_cancel(msg, hdr);
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_cqm_txe_notify);
|
|
|
|
|
|
void
|
|
|
nl80211_radar_notify(struct cfg80211_registered_device *rdev,
|
|
@@ -10047,15 +10167,18 @@ nl80211_radar_notify(struct cfg80211_registered_device *rdev,
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
|
|
|
-void
|
|
|
-nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
|
|
|
- struct net_device *netdev, const u8 *peer,
|
|
|
- u32 num_packets, gfp_t gfp)
|
|
|
+void cfg80211_cqm_pktloss_notify(struct net_device *dev,
|
|
|
+ const u8 *peer, u32 num_packets, gfp_t gfp)
|
|
|
{
|
|
|
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
|
|
|
+ struct wiphy *wiphy = wdev->wiphy;
|
|
|
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
|
|
struct sk_buff *msg;
|
|
|
struct nlattr *pinfoattr;
|
|
|
void *hdr;
|
|
|
|
|
|
+ trace_cfg80211_cqm_pktloss_notify(dev, peer, num_packets);
|
|
|
+
|
|
|
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
|
|
|
if (!msg)
|
|
|
return;
|
|
@@ -10067,7 +10190,7 @@ nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
|
|
|
}
|
|
|
|
|
|
if (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, dev->ifindex) ||
|
|
|
nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer))
|
|
|
goto nla_put_failure;
|
|
|
|
|
@@ -10090,6 +10213,7 @@ nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
|
|
|
genlmsg_cancel(msg, hdr);
|
|
|
nlmsg_free(msg);
|
|
|
}
|
|
|
+EXPORT_SYMBOL(cfg80211_cqm_pktloss_notify);
|
|
|
|
|
|
void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
|
|
|
u64 cookie, bool acked, gfp_t gfp)
|