linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
To: johannes@sipsolutions.net
Cc: linux-wireless@vger.kernel.org,
	Andrei Otcheretianski <andrei.otcheretianski@intel.com>,
	Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Subject: [PATCHv3 RESEND 06/11] cfg80211: Provide an API to report NAN function termination
Date: Tue, 29 Mar 2016 12:35:04 +0300	[thread overview]
Message-ID: <1459244109-16038-6-git-send-email-emmanuel.grumbach@intel.com> (raw)
In-Reply-To: <1459244109-16038-1-git-send-email-emmanuel.grumbach@intel.com>

From: Andrei Otcheretianski <andrei.otcheretianski@intel.com>

Provide a function that reports NAN DE function termination. The function
may be terminated due to one of the following reasons: user request,
ttl expiration or failure.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 include/net/cfg80211.h       | 16 +++++++++++++++
 include/uapi/linux/nl80211.h | 18 +++++++++++++++++
 net/wireless/nl80211.c       | 46 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 80 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 8c200a0..3a94b21 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -5528,6 +5528,22 @@ struct cfg80211_nan_match_params {
 void cfg80211_nan_match(struct wireless_dev *wdev,
 			struct cfg80211_nan_match_params *match, gfp_t gfp);
 
+/**
+ * cfg80211_nan_func_terminated - notify about NAN function termination.
+ *
+ * @wdev: the wireless device reporting the match
+ * @inst_id: the local instance id
+ * @reason: termination reason (one of the NL80211_NAN_FUNC_TERM_REASON_*)
+ * @cookie: user defined cookie
+ * @gfp: allocation flags
+ *
+ * This function reports that the a NAN function is terminated.
+ */
+void cfg80211_nan_func_terminated(struct wireless_dev *wdev,
+				  u8 inst_id,
+				  enum nl80211_nan_func_term_reason reason,
+				  u64 cookie, gfp_t gfp);
+
 /* ethtool helper */
 void cfg80211_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info);
 
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 40dbbb9..f4a2e46 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -1862,6 +1862,8 @@ enum nl80211_commands {
  *	Its type is u8 and it cannot be 0.
  * @NL80211_ATTR_NAN_MATCH: used to report a match. This is a nested attribute.
  *	See &enum nl80211_nan_match_attributes.
+ * @NL80211_ATTR_NAN_FUNC_TERM_REASON: NAN function termination reason.
+ *	See &enum nl80211_nan_func_term_reason.
  *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
@@ -2246,6 +2248,7 @@ enum nl80211_attrs {
 	NL80211_ATTR_NAN_FUNC,
 	NL80211_ATTR_NAN_FUNC_INST_ID,
 	NL80211_ATTR_NAN_MATCH,
+	NL80211_ATTR_NAN_FUNC_TERM_REASON,
 
 	/* add attributes here, update the policy in nl80211.c */
 
@@ -4838,6 +4841,21 @@ enum nl80211_nan_publish_type {
 	NL80211_NAN_UNSOLICITED_PUBLISH = 1 << 1,
 };
 
+/**
+ * enum nl80211_nan_func_term_reason - NAN functions termination reason
+ *
+ * Defines termination reasons of a NAN function
+ *
+ * @NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST: requested by user
+ * @NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED: timeout
+ * @NL80211_NAN_FUNC_TERM_REASON_ERROR: errored
+ */
+enum nl80211_nan_func_term_reason {
+	NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST,
+	NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED,
+	NL80211_NAN_FUNC_TERM_REASON_ERROR,
+};
+
 #define NL80211_NAN_FUNC_SERVICE_ID_LEN 6
 #define NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN 0xff
 #define NL80211_NAN_FUNC_SRF_MAX_LEN 0xff
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 32334df..4872349 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -10591,6 +10591,52 @@ nla_put_failure:
 }
 EXPORT_SYMBOL(cfg80211_nan_match);
 
+void cfg80211_nan_func_terminated(struct wireless_dev *wdev,
+				  u8 inst_id,
+				  enum nl80211_nan_func_term_reason reason,
+				  u64 cookie, gfp_t gfp)
+{
+	struct wiphy *wiphy = wdev->wiphy;
+	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
+	struct sk_buff *msg;
+	void *hdr;
+
+	if (WARN_ON(!inst_id))
+		return;
+
+	msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
+	if (!msg)
+		return;
+
+	hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_RM_NAN_FUNCTION);
+	if (!hdr) {
+		nlmsg_free(msg);
+		return;
+	}
+
+	if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
+	    (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX,
+					 wdev->netdev->ifindex)) ||
+	    nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)))
+		goto nla_put_failure;
+
+	if (nla_put_u8(msg, NL80211_ATTR_NAN_FUNC_INST_ID, inst_id) ||
+	    nla_put_u8(msg, NL80211_ATTR_NAN_FUNC_TERM_REASON, reason) ||
+	    nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie))
+		goto nla_put_failure;
+
+	genlmsg_end(msg, hdr);
+
+	genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0,
+				NL80211_MCGRP_NAN, gfp);
+	return;
+
+nla_put_failure:
+	genlmsg_cancel(msg, hdr);
+	nlmsg_free(msg);
+}
+EXPORT_SYMBOL(cfg80211_nan_func_terminated);
+
 static int nl80211_get_protocol_features(struct sk_buff *skb,
 					 struct genl_info *info)
 {
-- 
2.5.0


  parent reply	other threads:[~2016-03-29  9:35 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-29  9:34 [PATCHv3 RESEND 01/11] cfg80211: add start / stop NAN commands Emmanuel Grumbach
2016-03-29  9:35 ` [PATCHv3 RESEND 02/11] mac80211: add boilerplate code for start / stop NAN Emmanuel Grumbach
2016-04-06  8:27   ` Johannes Berg
2016-03-29  9:35 ` [PATCHv3 RESEND 03/11] cfg80211: add add_nan_func / rm_nan_func Emmanuel Grumbach
2016-04-06  8:40   ` Johannes Berg
2016-04-06  8:47   ` Johannes Berg
2016-03-29  9:35 ` [PATCHv3 RESEND 04/11] cfg80211: allow the user space to change current NAN configuration Emmanuel Grumbach
2016-04-06  8:44   ` Johannes Berg
2016-03-29  9:35 ` [PATCHv3 RESEND 05/11] cfg80211: provide a function to report a match for NAN Emmanuel Grumbach
2016-04-06  8:51   ` Johannes Berg
2016-04-06  9:38   ` Malinen, Jouni
2016-04-06  9:40     ` Johannes Berg
2016-03-29  9:35 ` Emmanuel Grumbach [this message]
2016-04-06  8:52   ` [PATCHv3 RESEND 06/11] cfg80211: Provide an API to report NAN function termination Johannes Berg
2016-04-06  9:40   ` Malinen, Jouni
2016-04-06 10:43     ` Otcheretianski, Andrei
2016-03-29  9:35 ` [PATCHv3 RESEND 07/11] cfg80211: add utility functions to clone and free nan_func Emmanuel Grumbach
2016-04-06  9:02   ` Johannes Berg
2016-03-29  9:35 ` [PATCHv3 RESEND 08/11] mac80211: implement nan_change_conf Emmanuel Grumbach
2016-04-06  9:07   ` Johannes Berg
2016-03-29  9:35 ` [PATCHv3 RESEND 09/11] mac80211: Implement add_nan_func and rm_nan_func Emmanuel Grumbach
2016-04-06  9:22   ` Johannes Berg
2016-03-29  9:35 ` [PATCHv3 RESEND 10/11] mac80211: Add API to report nan function match Emmanuel Grumbach
2016-04-06  9:24   ` Johannes Berg
2016-03-29  9:35 ` [PATCHv3 RESEND 11/11] cfg80211: allow to tie the NAN instance to the owner Emmanuel Grumbach
2016-04-06  8:24 ` [PATCHv3 RESEND 01/11] cfg80211: add start / stop NAN commands Johannes Berg
2016-04-06  9:34 ` Malinen, Jouni
2016-04-06  9:43   ` Johannes Berg
2016-04-06  9:44   ` Grumbach, Emmanuel
2016-04-06 10:14   ` Otcheretianski, Andrei
2016-04-06  9:55 ` Malinen, Jouni
2016-04-06 10:01   ` Grumbach, Emmanuel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1459244109-16038-6-git-send-email-emmanuel.grumbach@intel.com \
    --to=emmanuel.grumbach@intel.com \
    --cc=andrei.otcheretianski@intel.com \
    --cc=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).