Message ID | 20221007085310.503366-9-miquel.raynal@bootlin.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | net: ieee802154: Improve filtering support | expand |
Hello Miquel. On 07.10.22 10:53, Miquel Raynal wrote: > We now have a fine grained filtering information so let's ensure proper > filtering in scan mode, which means that only beacons are processed. > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> > --- > net/mac802154/rx.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/net/mac802154/rx.c b/net/mac802154/rx.c > index 14bc646b9ab7..4d799b477a7f 100644 > --- a/net/mac802154/rx.c > +++ b/net/mac802154/rx.c > @@ -34,6 +34,7 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata, > struct sk_buff *skb, const struct ieee802154_hdr *hdr) > { > struct wpan_dev *wpan_dev = &sdata->wpan_dev; > + struct wpan_phy *wpan_phy = sdata->local->hw.phy; > __le16 span, sshort; > int rc; > > @@ -42,6 +43,17 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata, > span = wpan_dev->pan_id; > sshort = wpan_dev->short_addr; > > + /* Level 3 filtering: Only beacons are accepted during scans */ > + if (sdata->required_filtering == IEEE802154_FILTERING_3_SCAN && > + sdata->required_filtering > wpan_phy->filtering) { > + if (mac_cb(skb)->type != IEEE802154_FC_TYPE_BEACON) { > + dev_dbg(&sdata->dev->dev, > + "drop !beacon frame (0x%x) during scan\n", This ! before the beacon looks like a typo. Please fix. > + mac_cb(skb)->type); > + goto fail; > + } > + } > + > switch (mac_cb(skb)->dest.mode) { > case IEEE802154_ADDR_NONE: > if (hdr->source.mode != IEEE802154_ADDR_NONE) > @@ -277,10 +289,6 @@ void ieee802154_rx(struct ieee802154_local *local, struct sk_buff *skb) > > ieee802154_monitors_rx(local, skb); > > - /* TODO: Handle upcomming receive path where the PHY is at the > - * IEEE802154_FILTERING_NONE level during a scan. > - */ > - > /* Level 1 filtering: Check the FCS by software when relevant */ > if (local->hw.phy->filtering == IEEE802154_FILTERING_NONE) { > crc = crc_ccitt(0, skb->data, skb->len); When trying to apply the patch it did not work: Failed to apply patch: error: patch failed: net/mac802154/rx.c:42 error: net/mac802154/rx.c: patch does not apply hint: Use 'git am --show-current-patch=diff' to see the failed patch Applying: mac802154: Ensure proper scan-level filtering Patch failed at 0001 mac802154: Ensure proper scan-level filtering On top of what tree or branch is this? Maybe you based it on some not applied patches? Please rebase against wpan-next and re-submit. The rest of the patches got applied. Thanks for the ongoing work on this. regards Stefan Schmidt
Hi Stefan, stefan@datenfreihafen.org wrote on Wed, 12 Oct 2022 12:50:34 +0200: > Hello Miquel. > > On 07.10.22 10:53, Miquel Raynal wrote: > > We now have a fine grained filtering information so let's ensure proper > > filtering in scan mode, which means that only beacons are processed. > > > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> > > --- > > net/mac802154/rx.c | 16 ++++++++++++---- > > 1 file changed, 12 insertions(+), 4 deletions(-) > > > > diff --git a/net/mac802154/rx.c b/net/mac802154/rx.c > > index 14bc646b9ab7..4d799b477a7f 100644 > > --- a/net/mac802154/rx.c > > +++ b/net/mac802154/rx.c > > @@ -34,6 +34,7 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata, > > struct sk_buff *skb, const struct ieee802154_hdr *hdr) > > { > > struct wpan_dev *wpan_dev = &sdata->wpan_dev; > > + struct wpan_phy *wpan_phy = sdata->local->hw.phy; > > __le16 span, sshort; > > int rc; > > > @@ -42,6 +43,17 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata, > > span = wpan_dev->pan_id; > > sshort = wpan_dev->short_addr; > > > + /* Level 3 filtering: Only beacons are accepted during scans */ > > + if (sdata->required_filtering == IEEE802154_FILTERING_3_SCAN && > > + sdata->required_filtering > wpan_phy->filtering) { > > + if (mac_cb(skb)->type != IEEE802154_FC_TYPE_BEACON) { > > + dev_dbg(&sdata->dev->dev, > > + "drop !beacon frame (0x%x) during scan\n", > > This ! before the beacon looks like a typo. Please fix. Actually it's not, I meant "this is a non-beacon frame", but I might have been too lazy to write it in plain english. But you're right, it looks like a typo, so I'll rephrase this string. > > > + mac_cb(skb)->type); > > + goto fail; > > + } > > + } > > + > > switch (mac_cb(skb)->dest.mode) { > > case IEEE802154_ADDR_NONE: > > if (hdr->source.mode != IEEE802154_ADDR_NONE) > > @@ -277,10 +289,6 @@ void ieee802154_rx(struct ieee802154_local *local, struct sk_buff *skb) > > > ieee802154_monitors_rx(local, skb); > > > - /* TODO: Handle upcomming receive path where the PHY is at the > > - * IEEE802154_FILTERING_NONE level during a scan. > > - */ > > - > > /* Level 1 filtering: Check the FCS by software when relevant */ > > if (local->hw.phy->filtering == IEEE802154_FILTERING_NONE) { > > crc = crc_ccitt(0, skb->data, skb->len); > > When trying to apply the patch it did not work: > > Failed to apply patch: > error: patch failed: net/mac802154/rx.c:42 > error: net/mac802154/rx.c: patch does not apply > hint: Use 'git am --show-current-patch=diff' to see the failed patch > Applying: mac802154: Ensure proper scan-level filtering > Patch failed at 0001 mac802154: Ensure proper scan-level filtering > > On top of what tree or branch is this? Maybe you based it on some not applied patches? Please rebase against wpan-next and re-submit. The rest of the patches got applied. This series was based on top of wpan/next, but I assumed it would have been applied on top of this fix that was picked up a month ago: https://lkml.kernel.org/stable/57b7d918-1da1-f490-4882-5ed25ea17503@datenfreihafen.org/ I will update the above dev_dbg string, but I suggest we wait for 6.1-rc1 to be out before applying it? Otherwise if I "fix" it for immediate appliance on the current wpan-next branch, it will likely conflict with linux-next. > > Thanks for the ongoing work on this. You're welcome, thank you both for the reviews and time spent on your side as well! Thanks, Miquèl
diff --git a/net/mac802154/rx.c b/net/mac802154/rx.c index 14bc646b9ab7..4d799b477a7f 100644 --- a/net/mac802154/rx.c +++ b/net/mac802154/rx.c @@ -34,6 +34,7 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata, struct sk_buff *skb, const struct ieee802154_hdr *hdr) { struct wpan_dev *wpan_dev = &sdata->wpan_dev; + struct wpan_phy *wpan_phy = sdata->local->hw.phy; __le16 span, sshort; int rc; @@ -42,6 +43,17 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata, span = wpan_dev->pan_id; sshort = wpan_dev->short_addr; + /* Level 3 filtering: Only beacons are accepted during scans */ + if (sdata->required_filtering == IEEE802154_FILTERING_3_SCAN && + sdata->required_filtering > wpan_phy->filtering) { + if (mac_cb(skb)->type != IEEE802154_FC_TYPE_BEACON) { + dev_dbg(&sdata->dev->dev, + "drop !beacon frame (0x%x) during scan\n", + mac_cb(skb)->type); + goto fail; + } + } + switch (mac_cb(skb)->dest.mode) { case IEEE802154_ADDR_NONE: if (hdr->source.mode != IEEE802154_ADDR_NONE) @@ -277,10 +289,6 @@ void ieee802154_rx(struct ieee802154_local *local, struct sk_buff *skb) ieee802154_monitors_rx(local, skb); - /* TODO: Handle upcomming receive path where the PHY is at the - * IEEE802154_FILTERING_NONE level during a scan. - */ - /* Level 1 filtering: Check the FCS by software when relevant */ if (local->hw.phy->filtering == IEEE802154_FILTERING_NONE) { crc = crc_ccitt(0, skb->data, skb->len);
We now have a fine grained filtering information so let's ensure proper filtering in scan mode, which means that only beacons are processed. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> --- net/mac802154/rx.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)