aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-03-05 16:18:41 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-03-06 15:16:05 -0500
commit804483e90794256f9ed53e795ffbf1e94de237c8 (patch)
tree22a4d8ade674bb42aaf4d3e878dfd6a73b618dcc /net/wireless
parent769009b89d8c29c410a99eee3cd63764b1fff869 (diff)
cfg80211/mac80211: report signal strength for mgmt frames
Add the signal strength (in dBm only for now) to frames that are received via nl80211's various frame APIs. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Acked-by: Kalle Valo <kvalo@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless')
-rw-r--r--net/wireless/mlme.c7
-rw-r--r--net/wireless/nl80211.c9
-rw-r--r--net/wireless/nl80211.h3
3 files changed, 13 insertions, 6 deletions
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c
index fb1e72179117..f5a7ac3a0939 100644
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -814,8 +814,8 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
814 cookie); 814 cookie);
815} 815}
816 816
817bool cfg80211_rx_mgmt(struct net_device *dev, int freq, const u8 *buf, 817bool cfg80211_rx_mgmt(struct net_device *dev, int freq, int sig_mbm,
818 size_t len, gfp_t gfp) 818 const u8 *buf, size_t len, gfp_t gfp)
819{ 819{
820 struct wireless_dev *wdev = dev->ieee80211_ptr; 820 struct wireless_dev *wdev = dev->ieee80211_ptr;
821 struct wiphy *wiphy = wdev->wiphy; 821 struct wiphy *wiphy = wdev->wiphy;
@@ -854,7 +854,8 @@ bool cfg80211_rx_mgmt(struct net_device *dev, int freq, const u8 *buf,
854 /* found match! */ 854 /* found match! */
855 855
856 /* Indicate the received Action frame to user space */ 856 /* Indicate the received Action frame to user space */
857 if (nl80211_send_mgmt(rdev, dev, reg->nlpid, freq, 857 if (nl80211_send_mgmt(rdev, dev, reg->nlpid,
858 freq, sig_mbm,
858 buf, len, gfp)) 859 buf, len, gfp))
859 continue; 860 continue;
860 861
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 4b6afc338aac..39dbdf2adb12 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -7686,7 +7686,8 @@ bool nl80211_unexpected_4addr_frame(struct net_device *dev,
7686 7686
7687int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, 7687int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
7688 struct net_device *netdev, u32 nlpid, 7688 struct net_device *netdev, u32 nlpid,
7689 int freq, const u8 *buf, size_t len, gfp_t gfp) 7689 int freq, int sig_dbm,
7690 const u8 *buf, size_t len, gfp_t gfp)
7690{ 7691{
7691 struct sk_buff *msg; 7692 struct sk_buff *msg;
7692 void *hdr; 7693 void *hdr;
@@ -7704,6 +7705,8 @@ int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
7704 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); 7705 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx);
7705 NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); 7706 NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex);
7706 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq); 7707 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq);
7708 if (sig_dbm)
7709 NLA_PUT_U32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm);
7707 NLA_PUT(msg, NL80211_ATTR_FRAME, len, buf); 7710 NLA_PUT(msg, NL80211_ATTR_FRAME, len, buf);
7708 7711
7709 genlmsg_end(msg, hdr); 7712 genlmsg_end(msg, hdr);
@@ -7965,7 +7968,7 @@ EXPORT_SYMBOL(cfg80211_probe_status);
7965 7968
7966void cfg80211_report_obss_beacon(struct wiphy *wiphy, 7969void cfg80211_report_obss_beacon(struct wiphy *wiphy,
7967 const u8 *frame, size_t len, 7970 const u8 *frame, size_t len,
7968 int freq, gfp_t gfp) 7971 int freq, int sig_dbm, gfp_t gfp)
7969{ 7972{
7970 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); 7973 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
7971 struct sk_buff *msg; 7974 struct sk_buff *msg;
@@ -7988,6 +7991,8 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy,
7988 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); 7991 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx);
7989 if (freq) 7992 if (freq)
7990 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq); 7993 NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq);
7994 if (sig_dbm)
7995 NLA_PUT_U32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm);
7991 NLA_PUT(msg, NL80211_ATTR_FRAME, len, frame); 7996 NLA_PUT(msg, NL80211_ATTR_FRAME, len, frame);
7992 7997
7993 genlmsg_end(msg, hdr); 7998 genlmsg_end(msg, hdr);
diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h
index 12bf4d185abe..4ffe50df9f31 100644
--- a/net/wireless/nl80211.h
+++ b/net/wireless/nl80211.h
@@ -92,7 +92,8 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
92 gfp_t gfp); 92 gfp_t gfp);
93 93
94int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, 94int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
95 struct net_device *netdev, u32 nlpid, int freq, 95 struct net_device *netdev, u32 nlpid,
96 int freq, int sig_dbm,
96 const u8 *buf, size_t len, gfp_t gfp); 97 const u8 *buf, size_t len, gfp_t gfp);
97void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev, 98void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev,
98 struct net_device *netdev, u64 cookie, 99 struct net_device *netdev, u64 cookie,