linux-wpan.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH wpan-next v2 0/6] net: ieee802154: PAN management
@ 2022-06-17 19:32 Miquel Raynal
  2022-06-17 19:32 ` [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type Miquel Raynal
                   ` (5 more replies)
  0 siblings, 6 replies; 15+ messages in thread
From: Miquel Raynal @ 2022-06-17 19:32 UTC (permalink / raw)
  To: Alexander Aring, Stefan Schmidt, linux-wpan
  Cc: David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	netdev, David Girault, Romuald Despres, Frederic Blain,
	Nicolas Schodet, Thomas Petazzoni, Miquel Raynal

Hello,

Last step before adding scan support, we need to introduce a proper PAN
description (with its main properties) and PAN management helpers.

This series provides generic code to do simple operations on PANs and
PAN coordinators.

Thanks,
Miquèl

Changes in v2:
* The main change is related to the use of the COORD interface (instead
  of dropping it). Most of the actual diff is in the following series.

David Girault (1):
  net: ieee802154: Trace the registration of new PANs

Miquel Raynal (5):
  net: ieee802154: Create a device type
  net: ieee802154: Ensure only FFDs can become PAN coordinators
  net: mac802154: Allow the creation of PAN coordinator interfaces
  net: ieee802154: Add support for inter PAN management
  net: ieee802154: Give the user to the PAN information

 include/net/cfg802154.h   |  31 +++++
 include/net/nl802154.h    |  57 ++++++++++
 net/ieee802154/Makefile   |   2 +-
 net/ieee802154/core.c     |   2 +
 net/ieee802154/core.h     |  33 ++++++
 net/ieee802154/nl802154.c | 206 ++++++++++++++++++++++++++++++++-
 net/ieee802154/pan.c      | 234 ++++++++++++++++++++++++++++++++++++++
 net/ieee802154/trace.h    |  25 ++++
 net/mac802154/iface.c     |  14 ++-
 net/mac802154/rx.c        |   2 +-
 10 files changed, 595 insertions(+), 11 deletions(-)
 create mode 100644 net/ieee802154/pan.c

-- 
2.34.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type
  2022-06-17 19:32 [PATCH wpan-next v2 0/6] net: ieee802154: PAN management Miquel Raynal
@ 2022-06-17 19:32 ` Miquel Raynal
  2022-06-20  0:18   ` Alexander Aring
  2022-06-17 19:32 ` [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators Miquel Raynal
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Miquel Raynal @ 2022-06-17 19:32 UTC (permalink / raw)
  To: Alexander Aring, Stefan Schmidt, linux-wpan
  Cc: David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	netdev, David Girault, Romuald Despres, Frederic Blain,
	Nicolas Schodet, Thomas Petazzoni, Miquel Raynal

A device can be either a fully functioning device or a kind of reduced
functioning device. Let's create a device type member. Drivers will be
in charge of setting this value if they handle non-FFD devices.

FFD are considered the default.

Provide this information in the interface get netlink command.

Create a helper just to check if a rdev is a FFD or not, which will
then be useful when bringing scan support.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 include/net/nl802154.h    | 9 +++++++++
 net/ieee802154/core.h     | 8 ++++++++
 net/ieee802154/nl802154.c | 6 +++++-
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/include/net/nl802154.h b/include/net/nl802154.h
index 145acb8f2509..5258785879e8 100644
--- a/include/net/nl802154.h
+++ b/include/net/nl802154.h
@@ -133,6 +133,8 @@ enum nl802154_attrs {
 	NL802154_ATTR_PID,
 	NL802154_ATTR_NETNS_FD,
 
+	NL802154_ATTR_DEV_TYPE,
+
 	/* add attributes here, update the policy in nl802154.c */
 
 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
@@ -163,6 +165,13 @@ enum nl802154_iftype {
 	NL802154_IFTYPE_MAX = NUM_NL802154_IFTYPES - 1
 };
 
+enum nl802154_dev_type {
+	NL802154_DEV_TYPE_FFD = 0,
+	NL802154_DEV_TYPE_RFD,
+	NL802154_DEV_TYPE_RFD_RX,
+	NL802154_DEV_TYPE_RFD_TX,
+};
+
 /**
  * enum nl802154_wpan_phy_capability_attr - wpan phy capability attributes
  *
diff --git a/net/ieee802154/core.h b/net/ieee802154/core.h
index 1c19f575d574..d5a2f58b01cf 100644
--- a/net/ieee802154/core.h
+++ b/net/ieee802154/core.h
@@ -22,6 +22,8 @@ struct cfg802154_registered_device {
 	struct list_head wpan_dev_list;
 	int devlist_generation, wpan_dev_id;
 
+	enum nl802154_dev_type dev_type;
+
 	/* must be last because of the way we do wpan_phy_priv(),
 	 * and it should at least be aligned to NETDEV_ALIGN
 	 */
@@ -47,4 +49,10 @@ struct cfg802154_registered_device *
 cfg802154_rdev_by_wpan_phy_idx(int wpan_phy_idx);
 struct wpan_phy *wpan_phy_idx_to_wpan_phy(int wpan_phy_idx);
 
+static inline bool
+cfg802154_is_ffd(struct cfg802154_registered_device *rdev)
+{
+	return rdev->dev_type == NL802154_DEV_TYPE_FFD;
+}
+
 #endif /* __IEEE802154_CORE_H */
diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index e0b072aecf0f..638bf544f102 100644
--- a/net/ieee802154/nl802154.c
+++ b/net/ieee802154/nl802154.c
@@ -216,6 +216,9 @@ static const struct nla_policy nl802154_policy[NL802154_ATTR_MAX+1] = {
 
 	[NL802154_ATTR_PID] = { .type = NLA_U32 },
 	[NL802154_ATTR_NETNS_FD] = { .type = NLA_U32 },
+
+	[NL802154_ATTR_DEV_TYPE] = { .type = NLA_U8 },
+
 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
 	[NL802154_ATTR_SEC_ENABLED] = { .type = NLA_U8, },
 	[NL802154_ATTR_SEC_OUT_LEVEL] = { .type = NLA_U32, },
@@ -790,7 +793,8 @@ nl802154_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flags,
 			      wpan_dev_id(wpan_dev), NL802154_ATTR_PAD) ||
 	    nla_put_u32(msg, NL802154_ATTR_GENERATION,
 			rdev->devlist_generation ^
-			(cfg802154_rdev_list_generation << 2)))
+			(cfg802154_rdev_list_generation << 2)) ||
+	    nla_put_u8(msg, NL802154_ATTR_DEV_TYPE, rdev->dev_type))
 		goto nla_put_failure;
 
 	/* address settings */
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators
  2022-06-17 19:32 [PATCH wpan-next v2 0/6] net: ieee802154: PAN management Miquel Raynal
  2022-06-17 19:32 ` [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type Miquel Raynal
@ 2022-06-17 19:32 ` Miquel Raynal
  2022-06-20  0:24   ` Alexander Aring
  2022-06-17 19:32 ` [PATCH wpan-next v2 3/6] net: mac802154: Allow the creation of PAN coordinator interfaces Miquel Raynal
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Miquel Raynal @ 2022-06-17 19:32 UTC (permalink / raw)
  To: Alexander Aring, Stefan Schmidt, linux-wpan
  Cc: David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	netdev, David Girault, Romuald Despres, Frederic Blain,
	Nicolas Schodet, Thomas Petazzoni, Miquel Raynal

This is a limitation clearly listed in the specification. Now that we
have device types,let's ensure that only FFDs can become PAN
coordinators.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 net/ieee802154/nl802154.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index 638bf544f102..0c6fc3385320 100644
--- a/net/ieee802154/nl802154.c
+++ b/net/ieee802154/nl802154.c
@@ -924,6 +924,9 @@ static int nl802154_new_interface(struct sk_buff *skb, struct genl_info *info)
 			return -EINVAL;
 	}
 
+	if (type == NL802154_IFTYPE_COORD && !cfg802154_is_ffd(rdev))
+		return -EINVAL;
+
 	if (info->attrs[NL802154_ATTR_EXTENDED_ADDR])
 		extended_addr = nla_get_le64(info->attrs[NL802154_ATTR_EXTENDED_ADDR]);
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH wpan-next v2 3/6] net: mac802154: Allow the creation of PAN coordinator interfaces
  2022-06-17 19:32 [PATCH wpan-next v2 0/6] net: ieee802154: PAN management Miquel Raynal
  2022-06-17 19:32 ` [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type Miquel Raynal
  2022-06-17 19:32 ` [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators Miquel Raynal
@ 2022-06-17 19:32 ` Miquel Raynal
  2022-06-17 19:32 ` [PATCH wpan-next v2 4/6] net: ieee802154: Add support for inter PAN management Miquel Raynal
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 15+ messages in thread
From: Miquel Raynal @ 2022-06-17 19:32 UTC (permalink / raw)
  To: Alexander Aring, Stefan Schmidt, linux-wpan
  Cc: David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	netdev, David Girault, Romuald Despres, Frederic Blain,
	Nicolas Schodet, Thomas Petazzoni, Miquel Raynal

As the creation of PANs is not yet really supported, let's add just the
minimum support to allow the creation of such interface. This might be
restrained and improved later.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 net/mac802154/iface.c | 14 ++++++++------
 net/mac802154/rx.c    |  2 +-
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/net/mac802154/iface.c b/net/mac802154/iface.c
index 500ed1b81250..7ac0c5685d3f 100644
--- a/net/mac802154/iface.c
+++ b/net/mac802154/iface.c
@@ -273,13 +273,13 @@ ieee802154_check_concurrent_iface(struct ieee802154_sub_if_data *sdata,
 		if (nsdata != sdata && ieee802154_sdata_running(nsdata)) {
 			int ret;
 
-			/* TODO currently we don't support multiple node types
-			 * we need to run skb_clone at rx path. Check if there
-			 * exist really an use case if we need to support
-			 * multiple node types at the same time.
+			/* TODO currently we don't support multiple node/coord
+			 * types we need to run skb_clone at rx path. Check if
+			 * there exist really an use case if we need to support
+			 * multiple node/coord types at the same time.
 			 */
-			if (wpan_dev->iftype == NL802154_IFTYPE_NODE &&
-			    nsdata->wpan_dev.iftype == NL802154_IFTYPE_NODE)
+			if (wpan_dev->iftype != NL802154_IFTYPE_MONITOR &&
+			    nsdata->wpan_dev.iftype != NL802154_IFTYPE_MONITOR)
 				return -EBUSY;
 
 			/* check all phy mac sublayer settings are the same.
@@ -577,6 +577,7 @@ ieee802154_setup_sdata(struct ieee802154_sub_if_data *sdata,
 	wpan_dev->short_addr = cpu_to_le16(IEEE802154_ADDR_BROADCAST);
 
 	switch (type) {
+	case NL802154_IFTYPE_COORD:
 	case NL802154_IFTYPE_NODE:
 		ieee802154_be64_to_le64(&wpan_dev->extended_addr,
 					sdata->dev->dev_addr);
@@ -636,6 +637,7 @@ ieee802154_if_add(struct ieee802154_local *local, const char *name,
 	ieee802154_le64_to_be64(ndev->perm_addr,
 				&local->hw.phy->perm_extended_addr);
 	switch (type) {
+	case NL802154_IFTYPE_COORD:
 	case NL802154_IFTYPE_NODE:
 		ndev->type = ARPHRD_IEEE802154;
 		if (ieee802154_is_valid_extended_unicast_addr(extended_addr)) {
diff --git a/net/mac802154/rx.c b/net/mac802154/rx.c
index b8ce84618a55..39459d8d787a 100644
--- a/net/mac802154/rx.c
+++ b/net/mac802154/rx.c
@@ -203,7 +203,7 @@ __ieee802154_rx_handle_packet(struct ieee802154_local *local,
 	}
 
 	list_for_each_entry_rcu(sdata, &local->interfaces, list) {
-		if (sdata->wpan_dev.iftype != NL802154_IFTYPE_NODE)
+		if (sdata->wpan_dev.iftype == NL802154_IFTYPE_MONITOR)
 			continue;
 
 		if (!ieee802154_sdata_running(sdata))
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH wpan-next v2 4/6] net: ieee802154: Add support for inter PAN management
  2022-06-17 19:32 [PATCH wpan-next v2 0/6] net: ieee802154: PAN management Miquel Raynal
                   ` (2 preceding siblings ...)
  2022-06-17 19:32 ` [PATCH wpan-next v2 3/6] net: mac802154: Allow the creation of PAN coordinator interfaces Miquel Raynal
@ 2022-06-17 19:32 ` Miquel Raynal
  2022-06-17 19:32 ` [PATCH wpan-next v2 5/6] net: ieee802154: Give the user to the PAN information Miquel Raynal
  2022-06-17 19:32 ` [PATCH wpan-next v2 6/6] net: ieee802154: Trace the registration of new PANs Miquel Raynal
  5 siblings, 0 replies; 15+ messages in thread
From: Miquel Raynal @ 2022-06-17 19:32 UTC (permalink / raw)
  To: Alexander Aring, Stefan Schmidt, linux-wpan
  Cc: David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	netdev, David Girault, Romuald Despres, Frederic Blain,
	Nicolas Schodet, Thomas Petazzoni, Miquel Raynal

Let's introduce the basics for defining PANs:
- structures defining a PAN
- helpers for PAN registration
- helpers discarding old PANs

Co-developed-by: David Girault <david.girault@qorvo.com>
Signed-off-by: David Girault <david.girault@qorvo.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 include/net/cfg802154.h |  31 ++++++
 net/ieee802154/Makefile |   2 +-
 net/ieee802154/core.c   |   2 +
 net/ieee802154/core.h   |  25 +++++
 net/ieee802154/pan.c    | 231 ++++++++++++++++++++++++++++++++++++++++
 5 files changed, 290 insertions(+), 1 deletion(-)
 create mode 100644 net/ieee802154/pan.c

diff --git a/include/net/cfg802154.h b/include/net/cfg802154.h
index 04b996895fc1..9838eca3c41e 100644
--- a/include/net/cfg802154.h
+++ b/include/net/cfg802154.h
@@ -255,6 +255,24 @@ struct ieee802154_addr {
 	};
 };
 
+/**
+ * struct ieee802154_pan_desc - PAN descriptor information
+ * @coord: PAN ID and coordinator address
+ * @page: page this PAN is on
+ * @channel: channel this PAN is on
+ * @superframe_spec: SuperFrame specification as received
+ * @link_quality: link quality indicator at which the beacon was received
+ * @gts_permit: the PAN coordinator accepts GTS requests
+ */
+struct ieee802154_pan_desc {
+	struct ieee802154_addr *coord;
+	u8 page;
+	u8 channel;
+	u16 superframe_spec;
+	u8 link_quality;
+	bool gts_permit;
+};
+
 struct ieee802154_llsec_key_id {
 	u8 mode;
 	u8 id;
@@ -426,4 +444,17 @@ static inline const char *wpan_phy_name(struct wpan_phy *phy)
 
 void ieee802154_configure_durations(struct wpan_phy *phy);
 
+/**
+ * cfg802154_record_pan - Advertize a new PAN following a beacon's reception
+ * @wpan_phy: PHY receiving the beacon
+ * @pan: PAN descriptor
+ *
+ * Tells the internal pan management layer to either register this PAN if it is
+ * new or at least update its entry if already discovered.
+ *
+ * Returns 0 on success, a negative error code otherwise.
+ */
+int cfg802154_record_pan(struct wpan_phy *wpan_phy,
+			 struct ieee802154_pan_desc *pan);
+
 #endif /* __NET_CFG802154_H */
diff --git a/net/ieee802154/Makefile b/net/ieee802154/Makefile
index f05b7bdae2aa..6b7c66de730d 100644
--- a/net/ieee802154/Makefile
+++ b/net/ieee802154/Makefile
@@ -4,7 +4,7 @@ obj-$(CONFIG_IEEE802154_SOCKET) += ieee802154_socket.o
 obj-y += 6lowpan/
 
 ieee802154-y := netlink.o nl-mac.o nl-phy.o nl_policy.o core.o \
-                header_ops.o sysfs.o nl802154.o trace.o
+                header_ops.o sysfs.o nl802154.o pan.o trace.o
 ieee802154_socket-y := socket.o
 
 CFLAGS_trace.o := -I$(src)
diff --git a/net/ieee802154/core.c b/net/ieee802154/core.c
index 57546e07e06a..f642db35d62e 100644
--- a/net/ieee802154/core.c
+++ b/net/ieee802154/core.c
@@ -115,6 +115,8 @@ wpan_phy_new(const struct cfg802154_ops *ops, size_t priv_size)
 		kfree(rdev);
 		return NULL;
 	}
+	spin_lock_init(&rdev->pan_lock);
+	INIT_LIST_HEAD(&rdev->pan_list);
 
 	/* atomic_inc_return makes it start at 1, make it start at 0 */
 	rdev->wpan_phy_idx--;
diff --git a/net/ieee802154/core.h b/net/ieee802154/core.h
index d5a2f58b01cf..edfb4b8c2384 100644
--- a/net/ieee802154/core.h
+++ b/net/ieee802154/core.h
@@ -22,7 +22,14 @@ struct cfg802154_registered_device {
 	struct list_head wpan_dev_list;
 	int devlist_generation, wpan_dev_id;
 
+	/* PAN management */
 	enum nl802154_dev_type dev_type;
+	spinlock_t pan_lock;
+	struct list_head pan_list;
+	unsigned int max_pan_entries;
+	unsigned int pan_expiration;
+	unsigned int pan_entries;
+	unsigned int pan_generation;
 
 	/* must be last because of the way we do wpan_phy_priv(),
 	 * and it should at least be aligned to NETDEV_ALIGN
@@ -41,6 +48,17 @@ wpan_phy_to_rdev(struct wpan_phy *wpan_phy)
 extern struct list_head cfg802154_rdev_list;
 extern int cfg802154_rdev_list_generation;
 
+struct cfg802154_internal_pan {
+	struct list_head list;
+	unsigned long discovery_ts;
+	struct ieee802154_pan_desc desc;
+};
+
+/* Always update the list by dropping the expired PANs before iterating */
+#define ieee802154_for_each_pan(pan, rdev)				\
+	cfg802154_expire_pans(rdev);					\
+	list_for_each_entry((pan), &(rdev)->pan_list, list)
+
 int cfg802154_switch_netns(struct cfg802154_registered_device *rdev,
 			   struct net *net);
 /* free object */
@@ -55,4 +73,11 @@ cfg802154_is_ffd(struct cfg802154_registered_device *rdev)
 	return rdev->dev_type == NL802154_DEV_TYPE_FFD;
 }
 
+void cfg802154_set_max_pan_entries(struct cfg802154_registered_device *rdev,
+				   unsigned int max);
+void cfg802154_set_pans_expiration(struct cfg802154_registered_device *rdev,
+				   unsigned int exp_time_s);
+void cfg802154_expire_pans(struct cfg802154_registered_device *rdev);
+void cfg802154_flush_pans(struct cfg802154_registered_device *rdev);
+
 #endif /* __IEEE802154_CORE_H */
diff --git a/net/ieee802154/pan.c b/net/ieee802154/pan.c
new file mode 100644
index 000000000000..b9f50f785960
--- /dev/null
+++ b/net/ieee802154/pan.c
@@ -0,0 +1,231 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * IEEE 802.15.4 PAN management
+ *
+ * Copyright (C) Qorvo, 2021
+ * Authors:
+ *   - David Girault <david.girault@qorvo.com>
+ *   - Miquel Raynal <miquel.raynal@bootlin.com>
+ */
+
+#include <linux/slab.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/device.h>
+
+#include <net/cfg802154.h>
+#include <net/af_ieee802154.h>
+
+#include "ieee802154.h"
+#include "core.h"
+
+static struct cfg802154_internal_pan *
+cfg802154_alloc_pan(struct ieee802154_pan_desc *desc)
+{
+	struct cfg802154_internal_pan *new;
+	struct ieee802154_addr *coord;
+
+	new = kzalloc(sizeof(*new), GFP_ATOMIC);
+	if (!new)
+		return ERR_PTR(-ENOMEM);
+
+	coord = kzalloc(sizeof(*coord), GFP_ATOMIC);
+	if (!coord) {
+		kfree(new);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	new->discovery_ts = jiffies;
+	new->desc = *desc;
+
+	*coord = *desc->coord;
+	new->desc.coord = coord;
+
+	return new;
+}
+
+static void cfg802154_free_pan(struct cfg802154_internal_pan *pan)
+{
+	kfree(pan->desc.coord);
+	kfree(pan);
+}
+
+static void cfg802154_unlink_pan(struct cfg802154_registered_device *rdev,
+				 struct cfg802154_internal_pan *pan)
+{
+	lockdep_assert_held(&rdev->pan_lock);
+
+	list_del(&pan->list);
+	cfg802154_free_pan(pan);
+	rdev->pan_entries--;
+	rdev->pan_generation++;
+}
+
+static void cfg802154_link_pan(struct cfg802154_registered_device *rdev,
+			       struct cfg802154_internal_pan *pan)
+{
+	lockdep_assert_held(&rdev->pan_lock);
+
+	list_add_tail(&pan->list, &rdev->pan_list);
+	rdev->pan_entries++;
+	rdev->pan_generation++;
+}
+
+void cfg802154_set_max_pan_entries(struct cfg802154_registered_device *rdev,
+				   unsigned int max)
+{
+	lockdep_assert_held(&rdev->pan_lock);
+
+	rdev->max_pan_entries = max;
+}
+EXPORT_SYMBOL(cfg802154_set_max_pan_entries);
+
+static bool
+cfg802154_need_to_expire_pans(struct cfg802154_registered_device *rdev)
+{
+	if (!rdev->max_pan_entries)
+		return false;
+
+	if (rdev->pan_entries > rdev->max_pan_entries)
+		return true;
+
+	return false;
+}
+
+void cfg802154_set_pans_expiration(struct cfg802154_registered_device *rdev,
+				   unsigned int exp_time_s)
+{
+	lockdep_assert_held(&rdev->pan_lock);
+
+	rdev->pan_expiration = exp_time_s * HZ;
+}
+EXPORT_SYMBOL(cfg802154_set_pans_expiration);
+
+void cfg802154_expire_pans(struct cfg802154_registered_device *rdev)
+{
+	struct cfg802154_internal_pan *pan, *tmp;
+	unsigned long expiration_time;
+
+	lockdep_assert_held(&rdev->pan_lock);
+
+	if (!rdev->pan_expiration)
+		return;
+
+	expiration_time = jiffies - rdev->pan_expiration;
+	list_for_each_entry_safe(pan, tmp, &rdev->pan_list, list) {
+		if (!time_after(expiration_time, pan->discovery_ts))
+			continue;
+
+		cfg802154_unlink_pan(rdev, pan);
+	}
+}
+EXPORT_SYMBOL(cfg802154_expire_pans);
+
+static void cfg802154_expire_oldest_pan(struct cfg802154_registered_device *rdev)
+{
+	struct cfg802154_internal_pan *pan, *oldest;
+
+	lockdep_assert_held(&rdev->pan_lock);
+
+	if (WARN_ON(list_empty(&rdev->pan_list)))
+		return;
+
+	oldest = list_first_entry(&rdev->pan_list,
+				  struct cfg802154_internal_pan, list);
+
+	list_for_each_entry(pan, &rdev->pan_list, list) {
+		if (!time_before(oldest->discovery_ts, pan->discovery_ts))
+			oldest = pan;
+	}
+
+	cfg802154_unlink_pan(rdev, oldest);
+}
+
+void cfg802154_flush_pans(struct cfg802154_registered_device *rdev)
+{
+	struct cfg802154_internal_pan *pan, *tmp;
+
+	lockdep_assert_held(&rdev->pan_lock);
+
+	list_for_each_entry_safe(pan, tmp, &rdev->pan_list, list)
+		cfg802154_unlink_pan(rdev, pan);
+}
+EXPORT_SYMBOL(cfg802154_flush_pans);
+
+static bool cfg802154_same_pan(struct ieee802154_pan_desc *a,
+			       struct ieee802154_pan_desc *b)
+{
+	int ret;
+
+	if (a->page != b->page)
+		return false;
+
+	if (a->channel != b->channel)
+		return false;
+
+	ret = memcmp(&a->coord->pan_id, &b->coord->pan_id,
+		     sizeof(a->coord->pan_id));
+	if (ret)
+		return false;
+
+	if (a->coord->mode != b->coord->mode)
+		return false;
+
+	if (a->coord->mode == IEEE802154_ADDR_SHORT)
+		ret = memcmp(&a->coord->short_addr, &b->coord->short_addr,
+			     IEEE802154_SHORT_ADDR_LEN);
+	else
+		ret = memcmp(&a->coord->extended_addr, &b->coord->extended_addr,
+			     IEEE802154_EXTENDED_ADDR_LEN);
+
+	return true;
+}
+
+static struct cfg802154_internal_pan *
+cfg802154_find_matching_pan(struct cfg802154_registered_device *rdev,
+			    struct cfg802154_internal_pan *tmp)
+{
+	struct cfg802154_internal_pan *pan;
+
+	list_for_each_entry(pan, &rdev->pan_list, list) {
+		if (cfg802154_same_pan(&pan->desc, &tmp->desc))
+			return pan;
+	}
+
+	return NULL;
+}
+
+static void cfg802154_pan_update(struct cfg802154_registered_device *rdev,
+				 struct cfg802154_internal_pan *new)
+{
+	struct cfg802154_internal_pan *found;
+
+	spin_lock_bh(&rdev->pan_lock);
+
+	found = cfg802154_find_matching_pan(rdev, new);
+	if (found)
+		cfg802154_unlink_pan(rdev, found);
+
+	if (unlikely(cfg802154_need_to_expire_pans(rdev)))
+		cfg802154_expire_oldest_pan(rdev);
+
+	cfg802154_link_pan(rdev, new);
+
+	spin_unlock_bh(&rdev->pan_lock);
+}
+
+int cfg802154_record_pan(struct wpan_phy *wpan_phy,
+			 struct ieee802154_pan_desc *desc)
+{
+	struct cfg802154_registered_device *rdev = wpan_phy_to_rdev(wpan_phy);
+	struct cfg802154_internal_pan *new;
+
+	new = cfg802154_alloc_pan(desc);
+	if (IS_ERR(new))
+		return (PTR_ERR(new));
+
+	cfg802154_pan_update(rdev, new);
+
+	return 0;
+}
+EXPORT_SYMBOL(cfg802154_record_pan);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH wpan-next v2 5/6] net: ieee802154: Give the user to the PAN information
  2022-06-17 19:32 [PATCH wpan-next v2 0/6] net: ieee802154: PAN management Miquel Raynal
                   ` (3 preceding siblings ...)
  2022-06-17 19:32 ` [PATCH wpan-next v2 4/6] net: ieee802154: Add support for inter PAN management Miquel Raynal
@ 2022-06-17 19:32 ` Miquel Raynal
  2022-06-17 19:32 ` [PATCH wpan-next v2 6/6] net: ieee802154: Trace the registration of new PANs Miquel Raynal
  5 siblings, 0 replies; 15+ messages in thread
From: Miquel Raynal @ 2022-06-17 19:32 UTC (permalink / raw)
  To: Alexander Aring, Stefan Schmidt, linux-wpan
  Cc: David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	netdev, David Girault, Romuald Despres, Frederic Blain,
	Nicolas Schodet, Thomas Petazzoni, Miquel Raynal

Now that we have support for registering PANs, give certain rights to
the user, such as listing asynchronously the PANs as well as flushing
the list.

The maximum number of PANs to list and their delay before expiration can
be configured. By default there is no limit. When these parameters are
set, PANs are automatically dropped from the list.

This change has the side effect of moving the following helpers out of
the experimental zone as they are now used by non-experimental security
functions:
- nl802154_prepare_wpan_dev_dump()
- nl802154_finish_wpan_dev_dump()

Co-developed-by: David Girault <david.girault@qorvo.com>
Signed-off-by: David Girault <david.girault@qorvo.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 include/net/nl802154.h    |  48 ++++++++++
 net/ieee802154/nl802154.c | 197 +++++++++++++++++++++++++++++++++++++-
 2 files changed, 243 insertions(+), 2 deletions(-)

diff --git a/include/net/nl802154.h b/include/net/nl802154.h
index 5258785879e8..23d876067504 100644
--- a/include/net/nl802154.h
+++ b/include/net/nl802154.h
@@ -58,6 +58,11 @@ enum nl802154_commands {
 
 	NL802154_CMD_SET_WPAN_PHY_NETNS,
 
+	NL802154_CMD_DUMP_PANS,
+	NL802154_CMD_FLUSH_PANS,
+	NL802154_CMD_SET_MAX_PAN_ENTRIES,
+	NL802154_CMD_SET_PANS_EXPIRATION,
+
 	/* add new commands above here */
 
 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
@@ -134,6 +139,9 @@ enum nl802154_attrs {
 	NL802154_ATTR_NETNS_FD,
 
 	NL802154_ATTR_DEV_TYPE,
+	NL802154_ATTR_PAN,
+	NL802154_ATTR_MAX_PAN_ENTRIES,
+	NL802154_ATTR_PANS_EXPIRATION,
 
 	/* add attributes here, update the policy in nl802154.c */
 
@@ -227,6 +235,46 @@ enum nl802154_wpan_phy_capability_attr {
 	NL802154_CAP_ATTR_MAX = __NL802154_CAP_ATTR_AFTER_LAST - 1
 };
 
+/**
+ * enum nl802154_pan - Netlink attributes for a PAN
+ *
+ * @__NL802154_PAN_INVALID: invalid
+ * @NL802154_PAN_PANID: PANID of the PAN (2 bytes)
+ * @NL802154_PAN_COORD_ADDR: Coordinator address, (8 bytes or 2 bytes)
+ * @NL802154_PAN_CHANNEL: channel number, related to @NL802154_PAN_PAGE (u8)
+ * @NL802154_PAN_PAGE: channel page, related to @NL802154_PAN_CHANNEL (u8)
+ * @NL802154_PAN_PREAMBLE_CODE: Preamble code while the beacon was received,
+ *	this is PHY dependent and optional (4 bytes)
+ * @NL802154_PAN_SUPERFRAME_SPEC: superframe specification of the PAN (u16)
+ * @NL802154_PAN_LINK_QUALITY: signal quality of beacon in unspecified units,
+ *	scaled to 0..255 (u8)
+ * @NL802154_PAN_GTS_PERMIT: set to true if GTS is permitted on this PAN
+ * @NL802154_PAN_PAYLOAD_DATA: binary data containing the raw data from the
+ *	frame payload, (only if beacon or probe response had data)
+ * @NL802154_PAN_STATUS: status, if this PAN is "used"
+ * @NL802154_PAN_SEEN_MS_AGO: age of this PAN entry in ms
+ * @NL802154_PAN_PAD: attribute used for padding for 64-bit alignment
+ * @NL802154_PAN_MAX: highest PAN attribute
+ */
+enum nl802154_pan {
+	__NL802154_PAN_INVALID,
+	NL802154_PAN_PANID,
+	NL802154_PAN_COORD_ADDR,
+	NL802154_PAN_CHANNEL,
+	NL802154_PAN_PAGE,
+	NL802154_PAN_PREAMBLE_CODE,
+	NL802154_PAN_SUPERFRAME_SPEC,
+	NL802154_PAN_LINK_QUALITY,
+	NL802154_PAN_GTS_PERMIT,
+	NL802154_PAN_PAYLOAD_DATA,
+	NL802154_PAN_STATUS,
+	NL802154_PAN_SEEN_MS_AGO,
+	NL802154_PAN_PAD,
+
+	/* keep last */
+	NL802154_PAN_MAX,
+};
+
 /**
  * enum nl802154_cca_modes - cca modes
  *
diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index 0c6fc3385320..c514b40b1dde 100644
--- a/net/ieee802154/nl802154.c
+++ b/net/ieee802154/nl802154.c
@@ -218,6 +218,9 @@ static const struct nla_policy nl802154_policy[NL802154_ATTR_MAX+1] = {
 	[NL802154_ATTR_NETNS_FD] = { .type = NLA_U32 },
 
 	[NL802154_ATTR_DEV_TYPE] = { .type = NLA_U8 },
+	[NL802154_ATTR_PAN] = { .type = NLA_NESTED },
+	[NL802154_ATTR_MAX_PAN_ENTRIES] = { .type = NLA_U32 },
+	[NL802154_ATTR_PANS_EXPIRATION] = { .type = NLA_U32 },
 
 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
 	[NL802154_ATTR_SEC_ENABLED] = { .type = NLA_U8, },
@@ -232,7 +235,6 @@ static const struct nla_policy nl802154_policy[NL802154_ATTR_MAX+1] = {
 #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */
 };
 
-#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
 static int
 nl802154_prepare_wpan_dev_dump(struct sk_buff *skb,
 			       struct netlink_callback *cb,
@@ -291,7 +293,6 @@ nl802154_finish_wpan_dev_dump(struct cfg802154_registered_device *rdev)
 {
 	rtnl_unlock();
 }
-#endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */
 
 /* message building helper */
 static inline void *nl802154hdr_put(struct sk_buff *skb, u32 portid, u32 seq,
@@ -1288,6 +1289,172 @@ static int nl802154_wpan_phy_netns(struct sk_buff *skb, struct genl_info *info)
 	return err;
 }
 
+static int nl802154_send_pan_info(struct sk_buff *msg,
+				  struct netlink_callback *cb,
+				  u32 seq, int flags,
+				  struct cfg802154_registered_device *rdev,
+				  struct wpan_dev *wpan_dev,
+				  struct cfg802154_internal_pan *intpan)
+{
+	struct ieee802154_pan_desc *pan = &intpan->desc;
+	struct nlattr *nla;
+	void *hdr;
+
+	ASSERT_RTNL();
+
+	hdr = nl802154hdr_put(msg, NETLINK_CB(cb->skb).portid, seq, flags,
+			      NL802154_CMD_DUMP_PANS);
+	if (!hdr)
+		return -ENOBUFS;
+
+	genl_dump_check_consistent(cb, hdr);
+
+	if (nla_put_u32(msg, NL802154_ATTR_GENERATION, rdev->pan_generation))
+		goto nla_put_failure;
+
+	if (wpan_dev->netdev &&
+	    nla_put_u32(msg, NL802154_ATTR_IFINDEX, wpan_dev->netdev->ifindex))
+		goto nla_put_failure;
+
+	if (nla_put_u64_64bit(msg, NL802154_ATTR_WPAN_DEV, wpan_dev_id(wpan_dev),
+			      NL802154_ATTR_PAD))
+		goto nla_put_failure;
+
+	nla = nla_nest_start_noflag(msg, NL802154_ATTR_PAN);
+	if (!nla)
+		goto nla_put_failure;
+
+	if (nla_put(msg, NL802154_PAN_PANID, IEEE802154_PAN_ID_LEN,
+		    &pan->coord->pan_id))
+		goto nla_put_failure;
+
+	if (pan->coord->mode == IEEE802154_ADDR_SHORT) {
+		if (nla_put(msg, NL802154_PAN_COORD_ADDR,
+			    IEEE802154_SHORT_ADDR_LEN,
+			    &pan->coord->short_addr))
+			goto nla_put_failure;
+	} else {
+		if (nla_put(msg, NL802154_PAN_COORD_ADDR,
+			    IEEE802154_EXTENDED_ADDR_LEN,
+			    &pan->coord->extended_addr))
+			goto nla_put_failure;
+	}
+
+	if (nla_put_u8(msg, NL802154_PAN_CHANNEL, pan->channel))
+		goto nla_put_failure;
+
+	if (nla_put_u8(msg, NL802154_PAN_PAGE, pan->page))
+		goto nla_put_failure;
+
+	if (nla_put_u16(msg, NL802154_PAN_SUPERFRAME_SPEC,
+			pan->superframe_spec))
+		goto nla_put_failure;
+
+	if (nla_put_u8(msg, NL802154_PAN_LINK_QUALITY, pan->link_quality))
+		goto nla_put_failure;
+
+	if (nla_put_u32(msg, NL802154_PAN_SEEN_MS_AGO,
+			jiffies_to_msecs(jiffies - intpan->discovery_ts)))
+		goto nla_put_failure;
+
+	if (pan->gts_permit && nla_put_flag(msg, NL802154_PAN_GTS_PERMIT))
+		goto nla_put_failure;
+
+	/* TODO: NL802154_PAN_PAYLOAD_DATA if any */
+
+	nla_nest_end(msg, nla);
+	genlmsg_end(msg, hdr);
+
+	return 0;
+
+ nla_put_failure:
+	genlmsg_cancel(msg, hdr);
+	return -EMSGSIZE;
+}
+
+static int nl802154_dump_pans(struct sk_buff *skb, struct netlink_callback *cb)
+{
+	struct cfg802154_registered_device *rdev;
+	struct cfg802154_internal_pan *pan;
+	struct wpan_dev *wpan_dev;
+	int err;
+
+	err = nl802154_prepare_wpan_dev_dump(skb, cb, &rdev, &wpan_dev);
+	if (err)
+		return err;
+
+	spin_lock_bh(&rdev->pan_lock);
+
+	if (cb->args[2])
+		goto out;
+
+	cb->seq = rdev->pan_generation;
+
+	ieee802154_for_each_pan(pan, rdev) {
+		err = nl802154_send_pan_info(skb, cb, cb->nlh->nlmsg_seq,
+					     NLM_F_MULTI, rdev, wpan_dev, pan);
+		if (err < 0)
+			goto out_err;
+	}
+
+	cb->args[2] = 1;
+out:
+	err = skb->len;
+out_err:
+	spin_unlock_bh(&rdev->pan_lock);
+
+	nl802154_finish_wpan_dev_dump(rdev);
+
+	return err;
+}
+
+static int nl802154_flush_pans(struct sk_buff *skb, struct genl_info *info)
+{
+	struct cfg802154_registered_device *rdev = info->user_ptr[0];
+
+	spin_lock_bh(&rdev->pan_lock);
+	cfg802154_flush_pans(rdev);
+	spin_unlock_bh(&rdev->pan_lock);
+
+	return 0;
+}
+
+static int nl802154_set_max_pan_entries(struct sk_buff *skb,
+					struct genl_info *info)
+{
+	struct cfg802154_registered_device *rdev = info->user_ptr[0];
+	unsigned int max_entries;
+
+	if (!info->attrs[NL802154_ATTR_MAX_PAN_ENTRIES])
+		return -EINVAL;
+
+	max_entries = nla_get_u32(info->attrs[NL802154_ATTR_MAX_PAN_ENTRIES]);
+
+	spin_lock_bh(&rdev->pan_lock);
+	cfg802154_set_max_pan_entries(rdev, max_entries);
+	spin_unlock_bh(&rdev->pan_lock);
+
+	return 0;
+}
+
+static int nl802154_set_pans_expiration(struct sk_buff *skb,
+					struct genl_info *info)
+{
+	struct cfg802154_registered_device *rdev = info->user_ptr[0];
+	unsigned int exp_time_s;
+
+	if (!info->attrs[NL802154_ATTR_PANS_EXPIRATION])
+		return -EINVAL;
+
+	exp_time_s = nla_get_u32(info->attrs[NL802154_ATTR_PANS_EXPIRATION]);
+
+	spin_lock_bh(&rdev->pan_lock);
+	cfg802154_set_pans_expiration(rdev, exp_time_s);
+	spin_unlock_bh(&rdev->pan_lock);
+
+	return 0;
+}
+
 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
 static const struct nla_policy nl802154_dev_addr_policy[NL802154_DEV_ADDR_ATTR_MAX + 1] = {
 	[NL802154_DEV_ADDR_ATTR_PAN_ID] = { .type = NLA_U16 },
@@ -2376,6 +2543,32 @@ static const struct genl_ops nl802154_ops[] = {
 		.internal_flags = NL802154_FLAG_NEED_NETDEV |
 				  NL802154_FLAG_NEED_RTNL,
 	},
+	{
+		.cmd = NL802154_CMD_DUMP_PANS,
+		.dumpit = nl802154_dump_pans,
+		/* can be retrieved by unprivileged users */
+	},
+	{
+		.cmd = NL802154_CMD_FLUSH_PANS,
+		.doit = nl802154_flush_pans,
+		.flags = GENL_ADMIN_PERM,
+		.internal_flags = NL802154_FLAG_NEED_NETDEV |
+				  NL802154_FLAG_NEED_RTNL,
+	},
+	{
+		.cmd = NL802154_CMD_SET_MAX_PAN_ENTRIES,
+		.doit = nl802154_set_max_pan_entries,
+		.flags = GENL_ADMIN_PERM,
+		.internal_flags = NL802154_FLAG_NEED_NETDEV |
+				  NL802154_FLAG_NEED_RTNL,
+	},
+	{
+		.cmd = NL802154_CMD_SET_PANS_EXPIRATION,
+		.doit = nl802154_set_pans_expiration,
+		.flags = GENL_ADMIN_PERM,
+		.internal_flags = NL802154_FLAG_NEED_NETDEV |
+				  NL802154_FLAG_NEED_RTNL,
+	},
 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
 	{
 		.cmd = NL802154_CMD_SET_SEC_PARAMS,
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH wpan-next v2 6/6] net: ieee802154: Trace the registration of new PANs
  2022-06-17 19:32 [PATCH wpan-next v2 0/6] net: ieee802154: PAN management Miquel Raynal
                   ` (4 preceding siblings ...)
  2022-06-17 19:32 ` [PATCH wpan-next v2 5/6] net: ieee802154: Give the user to the PAN information Miquel Raynal
@ 2022-06-17 19:32 ` Miquel Raynal
  5 siblings, 0 replies; 15+ messages in thread
From: Miquel Raynal @ 2022-06-17 19:32 UTC (permalink / raw)
  To: Alexander Aring, Stefan Schmidt, linux-wpan
  Cc: David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	netdev, David Girault, Romuald Despres, Frederic Blain,
	Nicolas Schodet, Thomas Petazzoni, Miquel Raynal

From: David Girault <david.girault@qorvo.com>

Add an internal trace when new PANs get discovered.

Signed-off-by: David Girault <david.girault@qorvo.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 net/ieee802154/pan.c   |  3 +++
 net/ieee802154/trace.h | 25 +++++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/net/ieee802154/pan.c b/net/ieee802154/pan.c
index b9f50f785960..0dd30c19c3a2 100644
--- a/net/ieee802154/pan.c
+++ b/net/ieee802154/pan.c
@@ -18,6 +18,7 @@
 
 #include "ieee802154.h"
 #include "core.h"
+#include "trace.h"
 
 static struct cfg802154_internal_pan *
 cfg802154_alloc_pan(struct ieee802154_pan_desc *desc)
@@ -205,6 +206,8 @@ static void cfg802154_pan_update(struct cfg802154_registered_device *rdev,
 	found = cfg802154_find_matching_pan(rdev, new);
 	if (found)
 		cfg802154_unlink_pan(rdev, found);
+	else
+		trace_802154_new_pan(&new->desc);
 
 	if (unlikely(cfg802154_need_to_expire_pans(rdev)))
 		cfg802154_expire_oldest_pan(rdev);
diff --git a/net/ieee802154/trace.h b/net/ieee802154/trace.h
index 19c2e5d60e76..fa989dac090d 100644
--- a/net/ieee802154/trace.h
+++ b/net/ieee802154/trace.h
@@ -295,6 +295,31 @@ TRACE_EVENT(802154_rdev_set_ackreq_default,
 		WPAN_DEV_PR_ARG, BOOL_TO_STR(__entry->ackreq))
 );
 
+DECLARE_EVENT_CLASS(802154_pan_evt,
+	TP_PROTO(struct ieee802154_pan_desc *desc),
+	TP_ARGS(desc),
+	TP_STRUCT__entry(
+		__field(u16, pan_id)
+		__field(__le64, coord_addr)
+		__field(u8, channel)
+		__field(u8, page)
+	),
+	TP_fast_assign(
+		__entry->page = desc->page;
+		__entry->channel = desc->channel;
+		memcpy(&__entry->pan_id, &desc->coord->pan_id, 2);
+		memcpy(&__entry->coord_addr, &desc->coord->extended_addr, 8);
+	),
+	TP_printk("panid: %u, coord_addr: 0x%llx, page: %u, channel: %u",
+		  __entry->pan_id, __le64_to_cpu(__entry->coord_addr),
+		  __entry->page, __entry->channel)
+);
+
+DEFINE_EVENT(802154_pan_evt, 802154_new_pan,
+	TP_PROTO(struct ieee802154_pan_desc *desc),
+	TP_ARGS(desc)
+);
+
 TRACE_EVENT(802154_rdev_return_int,
 	TP_PROTO(struct wpan_phy *wpan_phy, int ret),
 	TP_ARGS(wpan_phy, ret),
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type
  2022-06-17 19:32 ` [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type Miquel Raynal
@ 2022-06-20  0:18   ` Alexander Aring
  2022-06-20  9:26     ` Miquel Raynal
  0 siblings, 1 reply; 15+ messages in thread
From: Alexander Aring @ 2022-06-20  0:18 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Alexander Aring, Stefan Schmidt, linux-wpan - ML,
	David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	Network Development, David Girault, Romuald Despres,
	Frederic Blain, Nicolas Schodet, Thomas Petazzoni

Hi,

On Fri, Jun 17, 2022 at 3:35 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
>
> A device can be either a fully functioning device or a kind of reduced
> functioning device. Let's create a device type member. Drivers will be
> in charge of setting this value if they handle non-FFD devices.
>
> FFD are considered the default.
>
> Provide this information in the interface get netlink command.
>
> Create a helper just to check if a rdev is a FFD or not, which will
> then be useful when bringing scan support.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  include/net/nl802154.h    | 9 +++++++++
>  net/ieee802154/core.h     | 8 ++++++++
>  net/ieee802154/nl802154.c | 6 +++++-
>  3 files changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/include/net/nl802154.h b/include/net/nl802154.h
> index 145acb8f2509..5258785879e8 100644
> --- a/include/net/nl802154.h
> +++ b/include/net/nl802154.h
> @@ -133,6 +133,8 @@ enum nl802154_attrs {
>         NL802154_ATTR_PID,
>         NL802154_ATTR_NETNS_FD,
>
> +       NL802154_ATTR_DEV_TYPE,
> +
>         /* add attributes here, update the policy in nl802154.c */
>
>  #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
> @@ -163,6 +165,13 @@ enum nl802154_iftype {
>         NL802154_IFTYPE_MAX = NUM_NL802154_IFTYPES - 1
>  };
>
> +enum nl802154_dev_type {
> +       NL802154_DEV_TYPE_FFD = 0,
> +       NL802154_DEV_TYPE_RFD,
> +       NL802154_DEV_TYPE_RFD_RX,
> +       NL802154_DEV_TYPE_RFD_TX,
> +};

As I said in another mail, I think this is a "transceiver capability"
why it is required that a user sets a transceiver capability. It means
that you can actually buy hardware which is either one of those
capabilities, one reason why D in those acronyms stands for "Device".
In SoftMac you probably find only FFD but out there you would probably
find hardware which cannot run as e.g. coordinator and is a RFD.

- Alex


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators
  2022-06-17 19:32 ` [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators Miquel Raynal
@ 2022-06-20  0:24   ` Alexander Aring
  2022-06-20  0:25     ` Alexander Aring
  2022-06-20  9:28     ` Miquel Raynal
  0 siblings, 2 replies; 15+ messages in thread
From: Alexander Aring @ 2022-06-20  0:24 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Alexander Aring, Stefan Schmidt, linux-wpan - ML,
	David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	Network Development, David Girault, Romuald Despres,
	Frederic Blain, Nicolas Schodet, Thomas Petazzoni

Hi,

On Fri, Jun 17, 2022 at 3:35 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
>
> This is a limitation clearly listed in the specification. Now that we
> have device types,let's ensure that only FFDs can become PAN
> coordinators.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  net/ieee802154/nl802154.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
> index 638bf544f102..0c6fc3385320 100644
> --- a/net/ieee802154/nl802154.c
> +++ b/net/ieee802154/nl802154.c
> @@ -924,6 +924,9 @@ static int nl802154_new_interface(struct sk_buff *skb, struct genl_info *info)
>                         return -EINVAL;
>         }
>
> +       if (type == NL802154_IFTYPE_COORD && !cfg802154_is_ffd(rdev))
> +               return -EINVAL;
> +

Look at my other mail regarding why the user needs to set this device
capability, change the errno to "EOPNOTSUPP"... it would be nice to
have an identically nl80211 handling like nl80211 to see which
interfaces are supported. Please look how wireless is doing that and
probably we should not take the standard about those "wording" too
seriously. What I mean is that according to FFD or RFD it's implied on
what interfaces you can create on.

- Alex


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators
  2022-06-20  0:24   ` Alexander Aring
@ 2022-06-20  0:25     ` Alexander Aring
  2022-06-20  9:28     ` Miquel Raynal
  1 sibling, 0 replies; 15+ messages in thread
From: Alexander Aring @ 2022-06-20  0:25 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Alexander Aring, Stefan Schmidt, linux-wpan - ML,
	David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	Network Development, David Girault, Romuald Despres,
	Frederic Blain, Nicolas Schodet, Thomas Petazzoni

On Sun, Jun 19, 2022 at 8:24 PM Alexander Aring <aahringo@redhat.com> wrote:
>
> Hi,
>
> On Fri, Jun 17, 2022 at 3:35 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> >
> > This is a limitation clearly listed in the specification. Now that we
> > have device types,let's ensure that only FFDs can become PAN
> > coordinators.
> >
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > ---
> >  net/ieee802154/nl802154.c | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
> > index 638bf544f102..0c6fc3385320 100644
> > --- a/net/ieee802154/nl802154.c
> > +++ b/net/ieee802154/nl802154.c
> > @@ -924,6 +924,9 @@ static int nl802154_new_interface(struct sk_buff *skb, struct genl_info *info)
> >                         return -EINVAL;
> >         }
> >
> > +       if (type == NL802154_IFTYPE_COORD && !cfg802154_is_ffd(rdev))
> > +               return -EINVAL;
> > +
>
> Look at my other mail regarding why the user needs to set this device
> capability, change the errno to "EOPNOTSUPP"... it would be nice to
> have an identically nl80211 handling like nl80211 to see which

s/like nl80211/in nl802154/

- Alex


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type
  2022-06-20  0:18   ` Alexander Aring
@ 2022-06-20  9:26     ` Miquel Raynal
  2022-06-21  2:00       ` Alexander Aring
  0 siblings, 1 reply; 15+ messages in thread
From: Miquel Raynal @ 2022-06-20  9:26 UTC (permalink / raw)
  To: Alexander Aring
  Cc: Alexander Aring, Stefan Schmidt, linux-wpan - ML,
	David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	Network Development, David Girault, Romuald Despres,
	Frederic Blain, Nicolas Schodet, Thomas Petazzoni

Hi Alex,

aahringo@redhat.com wrote on Sun, 19 Jun 2022 20:18:43 -0400:

> Hi,
> 
> On Fri, Jun 17, 2022 at 3:35 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> >
> > A device can be either a fully functioning device or a kind of reduced
> > functioning device. Let's create a device type member. Drivers will be
> > in charge of setting this value if they handle non-FFD devices.
> >
> > FFD are considered the default.
> >
> > Provide this information in the interface get netlink command.
> >
> > Create a helper just to check if a rdev is a FFD or not, which will
> > then be useful when bringing scan support.
> >
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > ---
> >  include/net/nl802154.h    | 9 +++++++++
> >  net/ieee802154/core.h     | 8 ++++++++
> >  net/ieee802154/nl802154.c | 6 +++++-
> >  3 files changed, 22 insertions(+), 1 deletion(-)
> >
> > diff --git a/include/net/nl802154.h b/include/net/nl802154.h
> > index 145acb8f2509..5258785879e8 100644
> > --- a/include/net/nl802154.h
> > +++ b/include/net/nl802154.h
> > @@ -133,6 +133,8 @@ enum nl802154_attrs {
> >         NL802154_ATTR_PID,
> >         NL802154_ATTR_NETNS_FD,
> >
> > +       NL802154_ATTR_DEV_TYPE,
> > +
> >         /* add attributes here, update the policy in nl802154.c */
> >
> >  #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
> > @@ -163,6 +165,13 @@ enum nl802154_iftype {
> >         NL802154_IFTYPE_MAX = NUM_NL802154_IFTYPES - 1
> >  };
> >
> > +enum nl802154_dev_type {
> > +       NL802154_DEV_TYPE_FFD = 0,
> > +       NL802154_DEV_TYPE_RFD,
> > +       NL802154_DEV_TYPE_RFD_RX,
> > +       NL802154_DEV_TYPE_RFD_TX,
> > +};  
> 
> As I said in another mail, I think this is a "transceiver capability"

Maybe I can rename it to PHY_TYPE if you prefer.

> why it is required that a user sets a transceiver capability. It means
> that you can actually buy hardware which is either one of those
> capabilities, one reason why D in those acronyms stands for "Device".

The user is not supposed to set this field, but it can get this field.
This is what this enumeration is intended for. 

> In SoftMac you probably find only FFD but out there you would probably
> find hardware which cannot run as e.g. coordinator and is a RFD.

My main concern was initially to be sure that we would not try to
perform any unsupported MLME commands on these devices. But as you said
in another mail, it is highly unlikely that we will ever have to support
true RFD devices in Linux, so I can just drop this parameter.

Thanks,
Miquèl

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators
  2022-06-20  0:24   ` Alexander Aring
  2022-06-20  0:25     ` Alexander Aring
@ 2022-06-20  9:28     ` Miquel Raynal
  2022-06-21  2:03       ` Alexander Aring
  1 sibling, 1 reply; 15+ messages in thread
From: Miquel Raynal @ 2022-06-20  9:28 UTC (permalink / raw)
  To: Alexander Aring
  Cc: Alexander Aring, Stefan Schmidt, linux-wpan - ML,
	David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	Network Development, David Girault, Romuald Despres,
	Frederic Blain, Nicolas Schodet, Thomas Petazzoni

Hi Alex,

aahringo@redhat.com wrote on Sun, 19 Jun 2022 20:24:48 -0400:

> Hi,
> 
> On Fri, Jun 17, 2022 at 3:35 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> >
> > This is a limitation clearly listed in the specification. Now that we
> > have device types,let's ensure that only FFDs can become PAN
> > coordinators.
> >
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > ---
> >  net/ieee802154/nl802154.c | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
> > index 638bf544f102..0c6fc3385320 100644
> > --- a/net/ieee802154/nl802154.c
> > +++ b/net/ieee802154/nl802154.c
> > @@ -924,6 +924,9 @@ static int nl802154_new_interface(struct sk_buff *skb, struct genl_info *info)
> >                         return -EINVAL;
> >         }
> >
> > +       if (type == NL802154_IFTYPE_COORD && !cfg802154_is_ffd(rdev))
> > +               return -EINVAL;
> > +  
> 
> Look at my other mail regarding why the user needs to set this device
> capability, change the errno to "EOPNOTSUPP"... it would be nice to
> have an identically nl80211 handling like nl80211 to see which
> interfaces are supported. Please look how wireless is doing that and
> probably we should not take the standard about those "wording" too
> seriously. What I mean is that according to FFD or RFD it's implied on
> what interfaces you can create on.

This is true, I don't need this _is_ffd() helper, checking on the type
of interface should be enough. I will drop the DEV(PHY)_TYPE enum
entirely.

Thanks,
Miquèl

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type
  2022-06-20  9:26     ` Miquel Raynal
@ 2022-06-21  2:00       ` Alexander Aring
  0 siblings, 0 replies; 15+ messages in thread
From: Alexander Aring @ 2022-06-21  2:00 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Alexander Aring, Stefan Schmidt, linux-wpan - ML,
	David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	Network Development, David Girault, Romuald Despres,
	Frederic Blain, Nicolas Schodet, Thomas Petazzoni

Hi,

On Mon, Jun 20, 2022 at 5:26 AM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
>
> Hi Alex,
>
> aahringo@redhat.com wrote on Sun, 19 Jun 2022 20:18:43 -0400:
>
> > Hi,
> >
> > On Fri, Jun 17, 2022 at 3:35 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> > >
> > > A device can be either a fully functioning device or a kind of reduced
> > > functioning device. Let's create a device type member. Drivers will be
> > > in charge of setting this value if they handle non-FFD devices.
> > >
> > > FFD are considered the default.
> > >
> > > Provide this information in the interface get netlink command.
> > >
> > > Create a helper just to check if a rdev is a FFD or not, which will
> > > then be useful when bringing scan support.
> > >
> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > ---
> > >  include/net/nl802154.h    | 9 +++++++++
> > >  net/ieee802154/core.h     | 8 ++++++++
> > >  net/ieee802154/nl802154.c | 6 +++++-
> > >  3 files changed, 22 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/include/net/nl802154.h b/include/net/nl802154.h
> > > index 145acb8f2509..5258785879e8 100644
> > > --- a/include/net/nl802154.h
> > > +++ b/include/net/nl802154.h
> > > @@ -133,6 +133,8 @@ enum nl802154_attrs {
> > >         NL802154_ATTR_PID,
> > >         NL802154_ATTR_NETNS_FD,
> > >
> > > +       NL802154_ATTR_DEV_TYPE,
> > > +
> > >         /* add attributes here, update the policy in nl802154.c */
> > >
> > >  #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
> > > @@ -163,6 +165,13 @@ enum nl802154_iftype {
> > >         NL802154_IFTYPE_MAX = NUM_NL802154_IFTYPES - 1
> > >  };
> > >
> > > +enum nl802154_dev_type {
> > > +       NL802154_DEV_TYPE_FFD = 0,
> > > +       NL802154_DEV_TYPE_RFD,
> > > +       NL802154_DEV_TYPE_RFD_RX,
> > > +       NL802154_DEV_TYPE_RFD_TX,
> > > +};
> >
> > As I said in another mail, I think this is a "transceiver capability"
>
> Maybe I can rename it to PHY_TYPE if you prefer.
>
> > why it is required that a user sets a transceiver capability. It means
> > that you can actually buy hardware which is either one of those
> > capabilities, one reason why D in those acronyms stands for "Device".
>
> The user is not supposed to set this field, but it can get this field.
> This is what this enumeration is intended for.
>

I am sorry, I misunderstood it.

> > In SoftMac you probably find only FFD but out there you would probably
> > find hardware which cannot run as e.g. coordinator and is a RFD.
>
> My main concern was initially to be sure that we would not try to
> perform any unsupported MLME commands on these devices. But as you said
> in another mail, it is highly unlikely that we will ever have to support
> true RFD devices in Linux, so I can just drop this parameter.
>

oh, I think on HardMAC it can become more likely... for me is just the
question of FFD and RFD which kind of interfaces the driver supports
to create on. Forget about that RX, TX, thing... RX is your
transmitting something it will go to /dev/null and TX is for me... you
will not receive anything.
We mostly have FFD transceivers supported, except that HardMAC thing
which is somehow connected to SoftMAC and needs to be handled somehow
a little bit differently because of this situation... but I warned
them that the time will come that "just send dataframes out" will
come...

- Alex


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators
  2022-06-20  9:28     ` Miquel Raynal
@ 2022-06-21  2:03       ` Alexander Aring
  2022-06-21  6:31         ` Miquel Raynal
  0 siblings, 1 reply; 15+ messages in thread
From: Alexander Aring @ 2022-06-21  2:03 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Alexander Aring, Stefan Schmidt, linux-wpan - ML,
	David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	Network Development, David Girault, Romuald Despres,
	Frederic Blain, Nicolas Schodet, Thomas Petazzoni

Hi,

On Mon, Jun 20, 2022 at 5:28 AM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
>
> Hi Alex,
>
> aahringo@redhat.com wrote on Sun, 19 Jun 2022 20:24:48 -0400:
>
> > Hi,
> >
> > On Fri, Jun 17, 2022 at 3:35 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> > >
> > > This is a limitation clearly listed in the specification. Now that we
> > > have device types,let's ensure that only FFDs can become PAN
> > > coordinators.
> > >
> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > ---
> > >  net/ieee802154/nl802154.c | 3 +++
> > >  1 file changed, 3 insertions(+)
> > >
> > > diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
> > > index 638bf544f102..0c6fc3385320 100644
> > > --- a/net/ieee802154/nl802154.c
> > > +++ b/net/ieee802154/nl802154.c
> > > @@ -924,6 +924,9 @@ static int nl802154_new_interface(struct sk_buff *skb, struct genl_info *info)
> > >                         return -EINVAL;
> > >         }
> > >
> > > +       if (type == NL802154_IFTYPE_COORD && !cfg802154_is_ffd(rdev))
> > > +               return -EINVAL;
> > > +
> >
> > Look at my other mail regarding why the user needs to set this device
> > capability, change the errno to "EOPNOTSUPP"... it would be nice to
> > have an identically nl80211 handling like nl80211 to see which
> > interfaces are supported. Please look how wireless is doing that and
> > probably we should not take the standard about those "wording" too
> > seriously. What I mean is that according to FFD or RFD it's implied on
> > what interfaces you can create on.
>
> This is true, I don't need this _is_ffd() helper, checking on the type
> of interface should be enough. I will drop the DEV(PHY)_TYPE enum

as I said that the driver needs somehow to report which interface can
be created on the phy and such thing also exists in wireless inclusive
netlink attribute to check which iftypes are supported (by calling
iw)... you can map this information to if it's FFD or RFD. I am not
sure if such an option makes sense now because we mostly have FFD only
supported right now.

- Alex


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators
  2022-06-21  2:03       ` Alexander Aring
@ 2022-06-21  6:31         ` Miquel Raynal
  0 siblings, 0 replies; 15+ messages in thread
From: Miquel Raynal @ 2022-06-21  6:31 UTC (permalink / raw)
  To: Alexander Aring
  Cc: Alexander Aring, Stefan Schmidt, linux-wpan - ML,
	David S. Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
	Network Development, David Girault, Romuald Despres,
	Frederic Blain, Nicolas Schodet, Thomas Petazzoni

Hi Alexander,

aahringo@redhat.com wrote on Mon, 20 Jun 2022 22:03:12 -0400:

> Hi,
> 
> On Mon, Jun 20, 2022 at 5:28 AM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> >
> > Hi Alex,
> >
> > aahringo@redhat.com wrote on Sun, 19 Jun 2022 20:24:48 -0400:
> >  
> > > Hi,
> > >
> > > On Fri, Jun 17, 2022 at 3:35 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:  
> > > >
> > > > This is a limitation clearly listed in the specification. Now that we
> > > > have device types,let's ensure that only FFDs can become PAN
> > > > coordinators.
> > > >
> > > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > > ---
> > > >  net/ieee802154/nl802154.c | 3 +++
> > > >  1 file changed, 3 insertions(+)
> > > >
> > > > diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
> > > > index 638bf544f102..0c6fc3385320 100644
> > > > --- a/net/ieee802154/nl802154.c
> > > > +++ b/net/ieee802154/nl802154.c
> > > > @@ -924,6 +924,9 @@ static int nl802154_new_interface(struct sk_buff *skb, struct genl_info *info)
> > > >                         return -EINVAL;
> > > >         }
> > > >
> > > > +       if (type == NL802154_IFTYPE_COORD && !cfg802154_is_ffd(rdev))
> > > > +               return -EINVAL;
> > > > +  
> > >
> > > Look at my other mail regarding why the user needs to set this device
> > > capability, change the errno to "EOPNOTSUPP"... it would be nice to
> > > have an identically nl80211 handling like nl80211 to see which
> > > interfaces are supported. Please look how wireless is doing that and
> > > probably we should not take the standard about those "wording" too
> > > seriously. What I mean is that according to FFD or RFD it's implied on
> > > what interfaces you can create on.  
> >
> > This is true, I don't need this _is_ffd() helper, checking on the type
> > of interface should be enough. I will drop the DEV(PHY)_TYPE enum  
> 
> as I said that the driver needs somehow to report which interface can
> be created on the phy and such thing also exists in wireless inclusive
> netlink attribute to check which iftypes are supported (by calling
> iw)... you can map this information to if it's FFD or RFD.

Yes, this is how I ended up doing things, I'm checking we are on a
coordinator interface before allowing beacons, for instance.

> I am not
> sure if such an option makes sense now because we mostly have FFD only
> supported right now.

Yeah, I've dropped that part in v3 so that we can move forward, it will
not be too hard to had this information later if we ever have !FFD
devices which need to be supported anyway.

Thanks,
Miquèl

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2022-06-21  6:31 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-17 19:32 [PATCH wpan-next v2 0/6] net: ieee802154: PAN management Miquel Raynal
2022-06-17 19:32 ` [PATCH wpan-next v2 1/6] net: ieee802154: Create a device type Miquel Raynal
2022-06-20  0:18   ` Alexander Aring
2022-06-20  9:26     ` Miquel Raynal
2022-06-21  2:00       ` Alexander Aring
2022-06-17 19:32 ` [PATCH wpan-next v2 2/6] net: ieee802154: Ensure only FFDs can become PAN coordinators Miquel Raynal
2022-06-20  0:24   ` Alexander Aring
2022-06-20  0:25     ` Alexander Aring
2022-06-20  9:28     ` Miquel Raynal
2022-06-21  2:03       ` Alexander Aring
2022-06-21  6:31         ` Miquel Raynal
2022-06-17 19:32 ` [PATCH wpan-next v2 3/6] net: mac802154: Allow the creation of PAN coordinator interfaces Miquel Raynal
2022-06-17 19:32 ` [PATCH wpan-next v2 4/6] net: ieee802154: Add support for inter PAN management Miquel Raynal
2022-06-17 19:32 ` [PATCH wpan-next v2 5/6] net: ieee802154: Give the user to the PAN information Miquel Raynal
2022-06-17 19:32 ` [PATCH wpan-next v2 6/6] net: ieee802154: Trace the registration of new PANs Miquel Raynal

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).