From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Alexander Aring <aahringo@redhat.com>
Cc: Stefan Schmidt <stefan@datenfreihafen.org>,
Alexander Aring <alex.aring@gmail.com>,
linux-wpan@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <edumazet@google.com>,
netdev@vger.kernel.org, David Girault <david.girault@qorvo.com>,
Romuald Despres <romuald.despres@qorvo.com>,
Frederic Blain <frederic.blain@qorvo.com>,
Nicolas Schodet <nico@ni.fr.eu.org>,
Guilhem Imberton <guilhem.imberton@qorvo.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH wpan-next v2 02/11] ieee802154: Internal PAN management
Date: Mon, 18 Sep 2023 11:01:02 +0200 [thread overview]
Message-ID: <20230918110102.19a43db1@xps-13> (raw)
In-Reply-To: <CAK-6q+h1rbG+6=M+ZZfUznHq9GxOwtA1i0c=C9dgQH1qC7sQ=A@mail.gmail.com>
Hello,
aahringo@redhat.com wrote on Sun, 17 Sep 2023 07:50:55 -0400:
> Hi,
>
> On Sat, Sep 16, 2023 at 11:39 AM Stefan Schmidt
> <stefan@datenfreihafen.org> wrote:
> >
> > Hello Miquel.
> >
> > On 01.09.23 19:04, Miquel Raynal wrote:
> > > Introduce structures to describe peer devices in a PAN as well as a few
> > > related helpers. We basically care about:
> > > - Our unique parent after associating with a coordinator.
> > > - Peer devices, children, which successfully associated with us.
> > >
> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > ---
> > > include/net/cfg802154.h | 46 ++++++++++++++++++++++++++++
> > > net/ieee802154/Makefile | 2 +-
> > > net/ieee802154/core.c | 2 ++
> > > net/ieee802154/pan.c | 66 +++++++++++++++++++++++++++++++++++++++++
> > > 4 files changed, 115 insertions(+), 1 deletion(-)
> > > create mode 100644 net/ieee802154/pan.c
> > >
> > > diff --git a/include/net/cfg802154.h b/include/net/cfg802154.h
> > > index f79ce133e51a..6c7193b4873c 100644
> > > --- a/include/net/cfg802154.h
> > > +++ b/include/net/cfg802154.h
> > > @@ -303,6 +303,22 @@ struct ieee802154_coord_desc {
> > > bool gts_permit;
> > > };
> > >
> > > +/**
> > > + * struct ieee802154_pan_device - PAN device information
> > > + * @pan_id: the PAN ID of this device
> > > + * @mode: the preferred mode to reach the device
> > > + * @short_addr: the short address of this device
> > > + * @extended_addr: the extended address of this device
> > > + * @node: the list node
> > > + */
> > > +struct ieee802154_pan_device {
> > > + __le16 pan_id;
> > > + u8 mode;
> > > + __le16 short_addr;
> > > + __le64 extended_addr;
> > > + struct list_head node;
> > > +};
> > > +
> > > /**
> > > * struct cfg802154_scan_request - Scan request
> > > *
> > > @@ -478,6 +494,11 @@ struct wpan_dev {
> > >
> > > /* fallback for acknowledgment bit setting */
> > > bool ackreq;
> > > +
> > > + /* Associations */
> > > + struct mutex association_lock;
> > > + struct ieee802154_pan_device *parent;
> > > + struct list_head children;
> > > };
> > >
> > > #define to_phy(_dev) container_of(_dev, struct wpan_phy, dev)
> > > @@ -529,4 +550,29 @@ static inline const char *wpan_phy_name(struct wpan_phy *phy)
> > > void ieee802154_configure_durations(struct wpan_phy *phy,
> > > unsigned int page, unsigned int channel);
> > >
> > > +/**
> > > + * cfg802154_device_is_associated - Checks whether we are associated to any device
> > > + * @wpan_dev: the wpan device
> >
> > Missing return value documentation.
> >
> > > + */
> > > +bool cfg802154_device_is_associated(struct wpan_dev *wpan_dev);
> > > +
> > > +/**
> > > + * cfg802154_device_is_parent - Checks if a device is our coordinator
> > > + * @wpan_dev: the wpan device
> > > + * @target: the expected parent
> > > + * @return: true if @target is our coordinator
> > > + */
> > > +bool cfg802154_device_is_parent(struct wpan_dev *wpan_dev,
> > > + struct ieee802154_addr *target);
> > > +
> > > +/**
> > > + * cfg802154_device_is_child - Checks whether a device is associated to us
> > > + * @wpan_dev: the wpan device
> > > + * @target: the expected child
> > > + * @return: the PAN device
> > > + */
> > > +struct ieee802154_pan_device *
> > > +cfg802154_device_is_child(struct wpan_dev *wpan_dev,
> > > + struct ieee802154_addr *target);
> > > +
> > > #endif /* __NET_CFG802154_H */
> > > diff --git a/net/ieee802154/Makefile b/net/ieee802154/Makefile
> > > index f05b7bdae2aa..7bce67673e83 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 trace.o pan.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..cd69bdbfd59f 100644
> > > --- a/net/ieee802154/core.c
> > > +++ b/net/ieee802154/core.c
> > > @@ -276,6 +276,8 @@ static int cfg802154_netdev_notifier_call(struct notifier_block *nb,
> > > wpan_dev->identifier = ++rdev->wpan_dev_id;
> > > list_add_rcu(&wpan_dev->list, &rdev->wpan_dev_list);
> > > rdev->devlist_generation++;
> > > + mutex_init(&wpan_dev->association_lock);
> > > + INIT_LIST_HEAD(&wpan_dev->children);
> > >
> > > wpan_dev->netdev = dev;
> > > break;
> > > diff --git a/net/ieee802154/pan.c b/net/ieee802154/pan.c
> > > new file mode 100644
> > > index 000000000000..e2a12a42ba2b
> > > --- /dev/null
> > > +++ b/net/ieee802154/pan.c
> > > @@ -0,0 +1,66 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * IEEE 802.15.4 PAN management
> > > + *
> > > + * Copyright (C) 2021 Qorvo US, Inc
> > > + * Authors:
> > > + * - David Girault <david.girault@qorvo.com>
> > > + * - Miquel Raynal <miquel.raynal@bootlin.com>
> > > + */
> > > +
> > > +#include <linux/kernel.h>
> > > +#include <net/cfg802154.h>
> > > +#include <net/af_ieee802154.h>
> > > +
> > > +static bool cfg802154_same_addr(struct ieee802154_pan_device *a,
> > > + struct ieee802154_addr *b)
> > > +{
> > > + if (!a || !b)
> > > + return false;
> > > +
> > > + switch (b->mode) {
> > > + case IEEE802154_ADDR_SHORT:
> > > + return a->short_addr == b->short_addr;
> > > + case IEEE802154_ADDR_LONG:
> > > + return a->extended_addr == b->extended_addr;
> > > + default:
> > > + return false;
> > > + }
> > > +}
> >
> > Don't we already have such a helper already?
>
> There must also be a check on (a->mode != b->mode) because short_addr
> and extended_addr share memory in this struct.
True.
Actually the ieee802154_addr structure uses an enum to store either
the short address or the extended addres, while at the MAC level I'd
like to compare with what I call a ieee802154_pan_device: the PAN
device is part of a list defining the associated neighbors and contains
both an extended address and a short address once associated.
I do not want to compare the PAN ID here and I do not need to compare
if the modes are different because the device the code is running on
is known to have both an extended address and a short address field
which have been initialized.
With all these constraints, I think it would require more code to
re-use that small function than just writing a slightly different one
here which fully covers the "under association/disassociation" case, no?
> We have something "similar" [0] to this with also checks on panid,
> however it depends what Miquel tries to do here. I can imagine that we
> extend the helper with an enum opt about what to compare.
>
> - Alex
>
> [0]
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/net/ieee802154_netdev.h?h=v6.6-rc1#n232
Thanks for the link!
Thanks,
Miquèl
next prev parent reply other threads:[~2023-09-18 9:02 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-01 17:04 [PATCH wpan-next v2 00/11] ieee802154: Associations between devices Miquel Raynal
2023-09-01 17:04 ` [PATCH wpan-next v2 01/11] ieee802154: Let PAN IDs be reset Miquel Raynal
2023-09-01 17:04 ` [PATCH wpan-next v2 02/11] ieee802154: Internal PAN management Miquel Raynal
2023-09-16 15:36 ` Stefan Schmidt
2023-09-17 11:50 ` Alexander Aring
2023-09-18 9:01 ` Miquel Raynal [this message]
2023-09-18 11:11 ` Alexander Aring
2023-09-18 14:15 ` Miquel Raynal
2023-09-18 23:01 ` Alexander Aring
2023-09-19 7:14 ` Miquel Raynal
2023-09-01 17:04 ` [PATCH wpan-next v2 03/11] ieee802154: Add support for user association requests Miquel Raynal
2023-09-01 17:04 ` [PATCH wpan-next v2 04/11] mac802154: Handle associating Miquel Raynal
2023-09-16 15:36 ` Stefan Schmidt
2023-09-01 17:04 ` [PATCH wpan-next v2 05/11] ieee802154: Add support for user disassociation requests Miquel Raynal
2023-09-01 17:04 ` [PATCH wpan-next v2 06/11] mac802154: Handle disassociations Miquel Raynal
2023-09-01 17:04 ` [PATCH wpan-next v2 07/11] mac802154: Handle association requests from peers Miquel Raynal
2023-09-16 15:36 ` Stefan Schmidt
2023-09-18 7:36 ` Miquel Raynal
2023-09-01 17:04 ` [PATCH wpan-next v2 08/11] ieee802154: Add support for limiting the number of associated devices Miquel Raynal
2023-09-01 17:04 ` [PATCH wpan-next v2 09/11] mac802154: Follow " Miquel Raynal
2023-09-01 17:05 ` [PATCH wpan-next v2 10/11] mac802154: Handle disassociation notifications from peers Miquel Raynal
2023-09-01 17:05 ` [PATCH wpan-next v2 11/11] ieee802154: Give the user the association list Miquel Raynal
2023-09-16 15:36 ` Stefan Schmidt
2023-09-18 7:08 ` Miquel Raynal
2023-09-18 15:41 ` Stefan Schmidt
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=20230918110102.19a43db1@xps-13 \
--to=miquel.raynal@bootlin.com \
--cc=aahringo@redhat.com \
--cc=alex.aring@gmail.com \
--cc=davem@davemloft.net \
--cc=david.girault@qorvo.com \
--cc=edumazet@google.com \
--cc=frederic.blain@qorvo.com \
--cc=guilhem.imberton@qorvo.com \
--cc=kuba@kernel.org \
--cc=linux-wpan@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nico@ni.fr.eu.org \
--cc=pabeni@redhat.com \
--cc=romuald.despres@qorvo.com \
--cc=stefan@datenfreihafen.org \
--cc=thomas.petazzoni@bootlin.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.