[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220603182143.692576-4-miquel.raynal@bootlin.com>
Date: Fri, 3 Jun 2022 20:21:40 +0200
From: Miquel Raynal <miquel.raynal@...tlin.com>
To: Alexander Aring <alex.aring@...il.com>,
Stefan Schmidt <stefan@...enfreihafen.org>,
linux-wpan@...r.kernel.org
Cc: "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>, netdev@...r.kernel.org,
David Girault <david.girault@...vo.com>,
Romuald Despres <romuald.despres@...vo.com>,
Frederic Blain <frederic.blain@...vo.com>,
Nicolas Schodet <nico@...fr.eu.org>,
Thomas Petazzoni <thomas.petazzoni@...tlin.com>,
Miquel Raynal <miquel.raynal@...tlin.com>
Subject: [PATCH wpan-next 3/6] net: ieee802154: Create a node type
A device can be either a fully functioning device or a kind of reduced
functioning device. Let's create a node type member. Drivers will be in
charge of setting this value if they handle non-FFD devices, which can
be considered the default for now.
Provide this information in the interface get netlink command.
Create a helper just to check if an rdev is a FFD or not, which will
then be useful when bringing scan support.
Signed-off-by: Miquel Raynal <miquel.raynal@...tlin.com>
---
include/net/nl802154.h | 9 +++++++++
net/ieee802154/core.h | 7 +++++++
net/ieee802154/nl802154.c | 6 +++++-
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/include/net/nl802154.h b/include/net/nl802154.h
index 0f508aaae126..8e4d8b7a6e24 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_NODE_TYPE,
+
/* add attributes here, update the policy in nl802154.c */
#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
@@ -162,6 +164,13 @@ enum nl802154_iftype {
NL802154_IFTYPE_MAX = NUM_NL802154_IFTYPES - 1
};
+enum nl802154_node_type {
+ NL802154_NODE_TYPE_FFD,
+ NL802154_NODE_TYPE_RFD,
+ NL802154_NODE_TYPE_RFD_RX,
+ NL802154_NODE_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 cae071bede37..019309d6a3bb 100644
--- a/net/ieee802154/core.h
+++ b/net/ieee802154/core.h
@@ -23,6 +23,7 @@ struct cfg802154_registered_device {
int devlist_generation, wpan_dev_id;
/* PAN management */
+ enum nl802154_node_type node_type;
spinlock_t pan_lock;
struct list_head pan_list;
unsigned int max_pan_entries;
@@ -73,4 +74,10 @@ void cfg802154_set_pans_expiration(struct cfg802154_registered_device *rdev,
void cfg802154_expire_pans(struct cfg802154_registered_device *rdev);
void cfg802154_flush_pans(struct cfg802154_registered_device *rdev);
+static inline bool
+cfg802154_is_ffd(struct cfg802154_registered_device *rdev)
+{
+ return rdev->node_type == NL802154_NODE_TYPE_FFD;
+}
+
#endif /* __IEEE802154_CORE_H */
diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index e0b072aecf0f..10767c3b25d7 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_NODE_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_NODE_TYPE, rdev->node_type))
goto nla_put_failure;
/* address settings */
--
2.34.1
Powered by blists - more mailing lists