aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/wireless/nl80211.c47
-rw-r--r--net/wireless/trace.h23
2 files changed, 70 insertions, 0 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index c18b2fc9d492..4c427fa5c450 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -9027,6 +9027,53 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy,
9027} 9027}
9028EXPORT_SYMBOL(cfg80211_report_obss_beacon); 9028EXPORT_SYMBOL(cfg80211_report_obss_beacon);
9029 9029
9030void cfg80211_tdls_oper_request(struct net_device *dev, const u8 *peer,
9031 enum nl80211_tdls_operation oper,
9032 u16 reason_code, gfp_t gfp)
9033{
9034 struct wireless_dev *wdev = dev->ieee80211_ptr;
9035 struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
9036 struct sk_buff *msg;
9037 void *hdr;
9038 int err;
9039
9040 trace_cfg80211_tdls_oper_request(wdev->wiphy, dev, peer, oper,
9041 reason_code);
9042
9043 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
9044 if (!msg)
9045 return;
9046
9047 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_TDLS_OPER);
9048 if (!hdr) {
9049 nlmsg_free(msg);
9050 return;
9051 }
9052
9053 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
9054 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
9055 nla_put_u8(msg, NL80211_ATTR_TDLS_OPERATION, oper) ||
9056 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer) ||
9057 (reason_code > 0 &&
9058 nla_put_u16(msg, NL80211_ATTR_REASON_CODE, reason_code)))
9059 goto nla_put_failure;
9060
9061 err = genlmsg_end(msg, hdr);
9062 if (err < 0) {
9063 nlmsg_free(msg);
9064 return;
9065 }
9066
9067 genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
9068 nl80211_mlme_mcgrp.id, gfp);
9069 return;
9070
9071 nla_put_failure:
9072 genlmsg_cancel(msg, hdr);
9073 nlmsg_free(msg);
9074}
9075EXPORT_SYMBOL(cfg80211_tdls_oper_request);
9076
9030static int nl80211_netlink_notify(struct notifier_block * nb, 9077static int nl80211_netlink_notify(struct notifier_block * nb,
9031 unsigned long state, 9078 unsigned long state,
9032 void *_notify) 9079 void *_notify)
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 8e03c6382a8a..f264c20a7090 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -2157,6 +2157,29 @@ TRACE_EVENT(cfg80211_report_obss_beacon,
2157 WIPHY_PR_ARG, __entry->freq, __entry->sig_dbm) 2157 WIPHY_PR_ARG, __entry->freq, __entry->sig_dbm)
2158); 2158);
2159 2159
2160TRACE_EVENT(cfg80211_tdls_oper_request,
2161 TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, const u8 *peer,
2162 enum nl80211_tdls_operation oper, u16 reason_code),
2163 TP_ARGS(wiphy, netdev, peer, oper, reason_code),
2164 TP_STRUCT__entry(
2165 WIPHY_ENTRY
2166 NETDEV_ENTRY
2167 MAC_ENTRY(peer)
2168 __field(enum nl80211_tdls_operation, oper)
2169 __field(u16, reason_code)
2170 ),
2171 TP_fast_assign(
2172 WIPHY_ASSIGN;
2173 NETDEV_ASSIGN;
2174 MAC_ASSIGN(peer, peer);
2175 __entry->oper = oper;
2176 __entry->reason_code = reason_code;
2177 ),
2178 TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", peer: " MAC_PR_FMT ", oper: %d, reason_code %u",
2179 WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer), __entry->oper,
2180 __entry->reason_code)
2181 );
2182
2160TRACE_EVENT(cfg80211_scan_done, 2183TRACE_EVENT(cfg80211_scan_done,
2161 TP_PROTO(struct cfg80211_scan_request *request, bool aborted), 2184 TP_PROTO(struct cfg80211_scan_request *request, bool aborted),
2162 TP_ARGS(request, aborted), 2185 TP_ARGS(request, aborted),