* [PATCH wpan-next v2 1/4] ieee802154: Add support for user active scan requests
2023-03-10 14:53 [PATCH wpan-next v2 0/4] ieee802154: Active scan support Miquel Raynal
@ 2023-03-10 14:53 ` Miquel Raynal
2023-03-10 14:53 ` [PATCH wpan-next v2 2/4] mac802154: Handle active scanning Miquel Raynal
` (3 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Miquel Raynal @ 2023-03-10 14:53 UTC (permalink / raw)
To: Alexander Aring, Stefan Schmidt, linux-wpan
Cc: David Girault, Romuald Despres, Frederic Blain, Nicolas Schodet,
Guilhem Imberton, Thomas Petazzoni, Miquel Raynal
In case a passive scan could not discover any PAN, a device may decide
to perform an active scan to force coordinators to send a BEACON
"immediately". Allow users to request to perform an active scan.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
net/ieee802154/nl802154.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index a18fb98a4b09..ef0b48c9ed2f 100644
--- a/net/ieee802154/nl802154.c
+++ b/net/ieee802154/nl802154.c
@@ -1426,6 +1426,7 @@ static int nl802154_trigger_scan(struct sk_buff *skb, struct genl_info *info)
type = nla_get_u8(info->attrs[NL802154_ATTR_SCAN_TYPE]);
switch (type) {
+ case NL802154_SCAN_ACTIVE:
case NL802154_SCAN_PASSIVE:
request->type = type;
break;
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH wpan-next v2 2/4] mac802154: Handle active scanning
2023-03-10 14:53 [PATCH wpan-next v2 0/4] ieee802154: Active scan support Miquel Raynal
2023-03-10 14:53 ` [PATCH wpan-next v2 1/4] ieee802154: Add support for user active scan requests Miquel Raynal
@ 2023-03-10 14:53 ` Miquel Raynal
2023-03-10 14:53 ` [PATCH wpan-next v2 3/4] ieee802154: Add support for allowing to answer BEACON_REQ Miquel Raynal
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Miquel Raynal @ 2023-03-10 14:53 UTC (permalink / raw)
To: Alexander Aring, Stefan Schmidt, linux-wpan
Cc: David Girault, Romuald Despres, Frederic Blain, Nicolas Schodet,
Guilhem Imberton, Thomas Petazzoni, Miquel Raynal
Active scan support is based on the current passive scan support,
cheered up with beacon requests sent after every channel change.
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/ieee802154_netdev.h | 18 ++++++++++-
| 23 ++++++++++++++
net/mac802154/ieee802154_i.h | 1 +
net/mac802154/scan.c | 53 +++++++++++++++++++++++++++++++--
4 files changed, 92 insertions(+), 3 deletions(-)
diff --git a/include/net/ieee802154_netdev.h b/include/net/ieee802154_netdev.h
index da8a3e648c7a..257c9b2e9c9a 100644
--- a/include/net/ieee802154_netdev.h
+++ b/include/net/ieee802154_netdev.h
@@ -74,6 +74,10 @@ struct ieee802154_beacon_hdr {
#endif
} __packed;
+struct ieee802154_mac_cmd_pl {
+ u8 cmd_id;
+} __packed;
+
struct ieee802154_sechdr {
#if defined(__LITTLE_ENDIAN_BITFIELD)
u8 level:3,
@@ -149,6 +153,16 @@ struct ieee802154_beacon_frame {
struct ieee802154_beacon_hdr mac_pl;
};
+struct ieee802154_mac_cmd_frame {
+ struct ieee802154_hdr mhr;
+ struct ieee802154_mac_cmd_pl mac_pl;
+};
+
+struct ieee802154_beacon_req_frame {
+ struct ieee802154_hdr mhr;
+ struct ieee802154_mac_cmd_pl mac_pl;
+};
+
/* pushes hdr onto the skb. fields of hdr->fc that can be calculated from
* the contents of hdr will be, and the actual value of those bits in
* hdr->fc will be ignored. this includes the INTRA_PAN bit and the frame
@@ -174,9 +188,11 @@ int ieee802154_hdr_peek_addrs(const struct sk_buff *skb,
*/
int ieee802154_hdr_peek(const struct sk_buff *skb, struct ieee802154_hdr *hdr);
-/* pushes a beacon frame into an skb */
+/* pushes/pulls various frame types into/from an skb */
int ieee802154_beacon_push(struct sk_buff *skb,
struct ieee802154_beacon_frame *beacon);
+int ieee802154_mac_cmd_push(struct sk_buff *skb, void *frame,
+ const void *pl, unsigned int pl_len);
int ieee802154_max_payload(const struct ieee802154_hdr *hdr);
--git a/net/ieee802154/header_ops.c b/net/ieee802154/header_ops.c
index 35d384dfe29d..a5ff1017a4b2 100644
--- a/net/ieee802154/header_ops.c
+++ b/net/ieee802154/header_ops.c
@@ -120,6 +120,29 @@ ieee802154_hdr_push(struct sk_buff *skb, struct ieee802154_hdr *hdr)
}
EXPORT_SYMBOL_GPL(ieee802154_hdr_push);
+int ieee802154_mac_cmd_push(struct sk_buff *skb, void *f,
+ const void *pl, unsigned int pl_len)
+{
+ struct ieee802154_mac_cmd_frame *frame = f;
+ struct ieee802154_mac_cmd_pl *mac_pl = &frame->mac_pl;
+ struct ieee802154_hdr *mhr = &frame->mhr;
+ int ret;
+
+ skb_reserve(skb, sizeof(*mhr));
+ ret = ieee802154_hdr_push(skb, mhr);
+ if (ret < 0)
+ return ret;
+
+ skb_reset_mac_header(skb);
+ skb->mac_len = ret;
+
+ skb_put_data(skb, mac_pl, sizeof(*mac_pl));
+ skb_put_data(skb, pl, pl_len);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(ieee802154_mac_cmd_push);
+
int ieee802154_beacon_push(struct sk_buff *skb,
struct ieee802154_beacon_frame *beacon)
{
diff --git a/net/mac802154/ieee802154_i.h b/net/mac802154/ieee802154_i.h
index 63bab99ed368..7bfd5411a164 100644
--- a/net/mac802154/ieee802154_i.h
+++ b/net/mac802154/ieee802154_i.h
@@ -58,6 +58,7 @@ struct ieee802154_local {
/* Scanning */
u8 scan_page;
u8 scan_channel;
+ struct ieee802154_beacon_req_frame scan_beacon_req;
struct cfg802154_scan_request __rcu *scan_req;
struct delayed_work scan_work;
diff --git a/net/mac802154/scan.c b/net/mac802154/scan.c
index 9b0933a185eb..201bfc567a43 100644
--- a/net/mac802154/scan.c
+++ b/net/mac802154/scan.c
@@ -18,8 +18,12 @@
#define IEEE802154_BEACON_MHR_SZ 13
#define IEEE802154_BEACON_PL_SZ 4
+#define IEEE802154_MAC_CMD_MHR_SZ 23
+#define IEEE802154_MAC_CMD_PL_SZ 1
#define IEEE802154_BEACON_SKB_SZ (IEEE802154_BEACON_MHR_SZ + \
IEEE802154_BEACON_PL_SZ)
+#define IEEE802154_MAC_CMD_SKB_SZ (IEEE802154_MAC_CMD_MHR_SZ + \
+ IEEE802154_MAC_CMD_PL_SZ)
/* mac802154_scan_cleanup_locked() must be called upon scan completion or abort.
* - Completions are asynchronous, not locked by the rtnl and decided by the
@@ -131,6 +135,42 @@ static int mac802154_scan_find_next_chan(struct ieee802154_local *local,
return 0;
}
+static int mac802154_scan_prepare_beacon_req(struct ieee802154_local *local)
+{
+ memset(&local->scan_beacon_req, 0, sizeof(local->scan_beacon_req));
+ local->scan_beacon_req.mhr.fc.type = IEEE802154_FC_TYPE_MAC_CMD;
+ local->scan_beacon_req.mhr.fc.dest_addr_mode = IEEE802154_SHORT_ADDRESSING;
+ local->scan_beacon_req.mhr.fc.version = IEEE802154_2003_STD;
+ local->scan_beacon_req.mhr.fc.source_addr_mode = IEEE802154_NO_ADDRESSING;
+ local->scan_beacon_req.mhr.dest.mode = IEEE802154_ADDR_SHORT;
+ local->scan_beacon_req.mhr.dest.pan_id = cpu_to_le16(IEEE802154_PANID_BROADCAST);
+ local->scan_beacon_req.mhr.dest.short_addr = cpu_to_le16(IEEE802154_ADDR_BROADCAST);
+ local->scan_beacon_req.mac_pl.cmd_id = IEEE802154_CMD_BEACON_REQ;
+
+ return 0;
+}
+
+static int mac802154_transmit_beacon_req(struct ieee802154_local *local,
+ struct ieee802154_sub_if_data *sdata)
+{
+ struct sk_buff *skb;
+ int ret;
+
+ skb = alloc_skb(IEEE802154_MAC_CMD_SKB_SZ, GFP_KERNEL);
+ if (!skb)
+ return -ENOBUFS;
+
+ skb->dev = sdata->dev;
+
+ ret = ieee802154_mac_cmd_push(skb, &local->scan_beacon_req, NULL, 0);
+ if (ret) {
+ kfree_skb(skb);
+ return ret;
+ }
+
+ return ieee802154_mlme_tx(local, sdata, skb);
+}
+
void mac802154_scan_worker(struct work_struct *work)
{
struct ieee802154_local *local =
@@ -206,6 +246,13 @@ void mac802154_scan_worker(struct work_struct *work)
goto end_scan;
}
+ if (scan_req->type == NL802154_SCAN_ACTIVE) {
+ ret = mac802154_transmit_beacon_req(local, sdata);
+ if (ret)
+ dev_err(&sdata->dev->dev,
+ "Error when transmitting beacon request (%d)\n", ret);
+ }
+
ieee802154_configure_durations(wpan_phy, page, channel);
scan_duration = mac802154_scan_get_channel_time(scan_req_duration,
wpan_phy->symbol_duration);
@@ -231,8 +278,8 @@ int mac802154_trigger_scan_locked(struct ieee802154_sub_if_data *sdata,
if (mac802154_is_scanning(local))
return -EBUSY;
- /* TODO: support other scanning type */
- if (request->type != NL802154_SCAN_PASSIVE)
+ if (request->type != NL802154_SCAN_PASSIVE &&
+ request->type != NL802154_SCAN_ACTIVE)
return -EOPNOTSUPP;
/* Store scanning parameters */
@@ -247,6 +294,8 @@ int mac802154_trigger_scan_locked(struct ieee802154_sub_if_data *sdata,
local->scan_page = request->page;
local->scan_channel = -1;
set_bit(IEEE802154_IS_SCANNING, &local->ongoing);
+ if (request->type == NL802154_SCAN_ACTIVE)
+ mac802154_scan_prepare_beacon_req(local);
nl802154_scan_started(request->wpan_phy, request->wpan_dev);
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH wpan-next v2 3/4] ieee802154: Add support for allowing to answer BEACON_REQ
2023-03-10 14:53 [PATCH wpan-next v2 0/4] ieee802154: Active scan support Miquel Raynal
2023-03-10 14:53 ` [PATCH wpan-next v2 1/4] ieee802154: Add support for user active scan requests Miquel Raynal
2023-03-10 14:53 ` [PATCH wpan-next v2 2/4] mac802154: Handle active scanning Miquel Raynal
@ 2023-03-10 14:53 ` Miquel Raynal
2023-03-10 14:53 ` [PATCH wpan-next v2 4/4] mac802154: Handle received BEACON_REQ Miquel Raynal
2023-03-23 12:58 ` [PATCH wpan-next v2 0/4] ieee802154: Active scan support Alexander Aring
4 siblings, 0 replies; 9+ messages in thread
From: Miquel Raynal @ 2023-03-10 14:53 UTC (permalink / raw)
To: Alexander Aring, Stefan Schmidt, linux-wpan
Cc: David Girault, Romuald Despres, Frederic Blain, Nicolas Schodet,
Guilhem Imberton, Thomas Petazzoni, Miquel Raynal
Accept beaconing configurations from the user which involve answering
beacon requests rather than only passively sending beacons. This may
help devices to find the PAN more quickly.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
net/ieee802154/nl802154.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index ef0b48c9ed2f..0ecc49d9c8c9 100644
--- a/net/ieee802154/nl802154.c
+++ b/net/ieee802154/nl802154.c
@@ -233,7 +233,7 @@ static const struct nla_policy nl802154_policy[NL802154_ATTR_MAX+1] = {
NLA_POLICY_RANGE(NLA_U8, NL802154_SCAN_DONE_REASON_FINISHED,
NL802154_SCAN_DONE_REASON_ABORTED),
[NL802154_ATTR_BEACON_INTERVAL] =
- NLA_POLICY_MAX(NLA_U8, IEEE802154_MAX_SCAN_DURATION),
+ NLA_POLICY_MAX(NLA_U8, IEEE802154_ACTIVE_SCAN_DURATION),
#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
[NL802154_ATTR_SEC_ENABLED] = { .type = NLA_U8, },
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH wpan-next v2 4/4] mac802154: Handle received BEACON_REQ
2023-03-10 14:53 [PATCH wpan-next v2 0/4] ieee802154: Active scan support Miquel Raynal
` (2 preceding siblings ...)
2023-03-10 14:53 ` [PATCH wpan-next v2 3/4] ieee802154: Add support for allowing to answer BEACON_REQ Miquel Raynal
@ 2023-03-10 14:53 ` Miquel Raynal
2023-03-23 12:58 ` [PATCH wpan-next v2 0/4] ieee802154: Active scan support Alexander Aring
4 siblings, 0 replies; 9+ messages in thread
From: Miquel Raynal @ 2023-03-10 14:53 UTC (permalink / raw)
To: Alexander Aring, Stefan Schmidt, linux-wpan
Cc: David Girault, Romuald Despres, Frederic Blain, Nicolas Schodet,
Guilhem Imberton, Thomas Petazzoni, Miquel Raynal
When performing an active scan, devices emit BEACON_REQ which
must be answered by other PANs receiving the request, unless they are
already passively sending beacons.
Answering a beacon request becomes a duty when the user tells us to send
beacons and the request provides an interval of 15.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
include/net/ieee802154_netdev.h | 2 +
| 13 ++++++
net/mac802154/ieee802154_i.h | 20 ++++++++++
net/mac802154/main.c | 2 +
net/mac802154/rx.c | 70 ++++++++++++++++++++++++++++++++-
net/mac802154/scan.c | 15 +++++--
6 files changed, 117 insertions(+), 5 deletions(-)
diff --git a/include/net/ieee802154_netdev.h b/include/net/ieee802154_netdev.h
index 257c9b2e9c9a..063313df447d 100644
--- a/include/net/ieee802154_netdev.h
+++ b/include/net/ieee802154_netdev.h
@@ -193,6 +193,8 @@ int ieee802154_beacon_push(struct sk_buff *skb,
struct ieee802154_beacon_frame *beacon);
int ieee802154_mac_cmd_push(struct sk_buff *skb, void *frame,
const void *pl, unsigned int pl_len);
+int ieee802154_mac_cmd_pl_pull(struct sk_buff *skb,
+ struct ieee802154_mac_cmd_pl *mac_pl);
int ieee802154_max_payload(const struct ieee802154_hdr *hdr);
--git a/net/ieee802154/header_ops.c b/net/ieee802154/header_ops.c
index a5ff1017a4b2..41a556be1017 100644
--- a/net/ieee802154/header_ops.c
+++ b/net/ieee802154/header_ops.c
@@ -307,6 +307,19 @@ ieee802154_hdr_pull(struct sk_buff *skb, struct ieee802154_hdr *hdr)
}
EXPORT_SYMBOL_GPL(ieee802154_hdr_pull);
+int ieee802154_mac_cmd_pl_pull(struct sk_buff *skb,
+ struct ieee802154_mac_cmd_pl *mac_pl)
+{
+ if (!pskb_may_pull(skb, sizeof(*mac_pl)))
+ return -EINVAL;
+
+ memcpy(mac_pl, skb->data, sizeof(*mac_pl));
+ skb_pull(skb, sizeof(*mac_pl));
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(ieee802154_mac_cmd_pl_pull);
+
int
ieee802154_hdr_peek_addrs(const struct sk_buff *skb, struct ieee802154_hdr *hdr)
{
diff --git a/net/mac802154/ieee802154_i.h b/net/mac802154/ieee802154_i.h
index 7bfd5411a164..c347ec9ff8c9 100644
--- a/net/mac802154/ieee802154_i.h
+++ b/net/mac802154/ieee802154_i.h
@@ -71,6 +71,8 @@ struct ieee802154_local {
/* Asynchronous tasks */
struct list_head rx_beacon_list;
struct work_struct rx_beacon_work;
+ struct list_head rx_mac_cmd_list;
+ struct work_struct rx_mac_cmd_work;
bool started;
bool suspended;
@@ -155,6 +157,22 @@ ieee802154_sdata_running(struct ieee802154_sub_if_data *sdata)
return test_bit(SDATA_STATE_RUNNING, &sdata->state);
}
+static inline int ieee802154_get_mac_cmd(struct sk_buff *skb, u8 *mac_cmd)
+{
+ struct ieee802154_mac_cmd_pl mac_pl;
+ int ret;
+
+ if (mac_cb(skb)->type != IEEE802154_FC_TYPE_MAC_CMD)
+ return -EINVAL;
+
+ ret = ieee802154_mac_cmd_pl_pull(skb, &mac_pl);
+ if (ret)
+ return ret;
+
+ *mac_cmd = mac_pl.cmd_id;
+ return 0;
+}
+
extern struct ieee802154_mlme_ops mac802154_mlme_wpan;
void ieee802154_rx(struct ieee802154_local *local, struct sk_buff *skb);
@@ -276,6 +294,8 @@ static inline bool mac802154_is_beaconing(struct ieee802154_local *local)
return test_bit(IEEE802154_IS_BEACONING, &local->ongoing);
}
+void mac802154_rx_mac_cmd_worker(struct work_struct *work);
+
/* interface handling */
int ieee802154_iface_init(void);
void ieee802154_iface_exit(void);
diff --git a/net/mac802154/main.c b/net/mac802154/main.c
index ee23e234b998..357ece67432b 100644
--- a/net/mac802154/main.c
+++ b/net/mac802154/main.c
@@ -90,6 +90,7 @@ ieee802154_alloc_hw(size_t priv_data_len, const struct ieee802154_ops *ops)
INIT_LIST_HEAD(&local->interfaces);
INIT_LIST_HEAD(&local->rx_beacon_list);
+ INIT_LIST_HEAD(&local->rx_mac_cmd_list);
mutex_init(&local->iflist_mtx);
tasklet_setup(&local->tasklet, ieee802154_tasklet_handler);
@@ -100,6 +101,7 @@ ieee802154_alloc_hw(size_t priv_data_len, const struct ieee802154_ops *ops)
INIT_DELAYED_WORK(&local->scan_work, mac802154_scan_worker);
INIT_WORK(&local->rx_beacon_work, mac802154_rx_beacon_worker);
INIT_DELAYED_WORK(&local->beacon_work, mac802154_beacon_worker);
+ INIT_WORK(&local->rx_mac_cmd_work, mac802154_rx_mac_cmd_worker);
/* init supported flags with 802.15.4 default ranges */
phy->supported.max_minbe = 8;
diff --git a/net/mac802154/rx.c b/net/mac802154/rx.c
index da0628ee3c89..e2434b4fe514 100644
--- a/net/mac802154/rx.c
+++ b/net/mac802154/rx.c
@@ -47,6 +47,62 @@ void mac802154_rx_beacon_worker(struct work_struct *work)
kfree(mac_pkt);
}
+static bool mac802154_should_answer_beacon_req(struct ieee802154_local *local)
+{
+ struct cfg802154_beacon_request *beacon_req;
+ unsigned int interval;
+
+ rcu_read_lock();
+ beacon_req = rcu_dereference(local->beacon_req);
+ if (!beacon_req) {
+ rcu_read_unlock();
+ return false;
+ }
+
+ interval = beacon_req->interval;
+ rcu_read_unlock();
+
+ if (!mac802154_is_beaconing(local))
+ return false;
+
+ return interval == IEEE802154_ACTIVE_SCAN_DURATION;
+}
+
+void mac802154_rx_mac_cmd_worker(struct work_struct *work)
+{
+ struct ieee802154_local *local =
+ container_of(work, struct ieee802154_local, rx_mac_cmd_work);
+ struct cfg802154_mac_pkt *mac_pkt;
+ u8 mac_cmd;
+ int rc;
+
+ mac_pkt = list_first_entry_or_null(&local->rx_mac_cmd_list,
+ struct cfg802154_mac_pkt, node);
+ if (!mac_pkt)
+ return;
+
+ rc = ieee802154_get_mac_cmd(mac_pkt->skb, &mac_cmd);
+ if (rc)
+ goto out;
+
+ switch (mac_cmd) {
+ case IEEE802154_CMD_BEACON_REQ:
+ dev_dbg(&mac_pkt->sdata->dev->dev, "processing BEACON REQ\n");
+ if (!mac802154_should_answer_beacon_req(local))
+ break;
+
+ queue_delayed_work(local->mac_wq, &local->beacon_work, 0);
+ break;
+ default:
+ break;
+ }
+
+out:
+ list_del(&mac_pkt->node);
+ kfree_skb(mac_pkt->skb);
+ kfree(mac_pkt);
+}
+
static int
ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata,
struct sk_buff *skb, const struct ieee802154_hdr *hdr)
@@ -140,8 +196,20 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata,
list_add_tail(&mac_pkt->node, &sdata->local->rx_beacon_list);
queue_work(sdata->local->mac_wq, &sdata->local->rx_beacon_work);
return NET_RX_SUCCESS;
- case IEEE802154_FC_TYPE_ACK:
+
case IEEE802154_FC_TYPE_MAC_CMD:
+ dev_dbg(&sdata->dev->dev, "MAC COMMAND received\n");
+ mac_pkt = kzalloc(sizeof(*mac_pkt), GFP_ATOMIC);
+ if (!mac_pkt)
+ goto fail;
+
+ mac_pkt->skb = skb_get(skb);
+ mac_pkt->sdata = sdata;
+ list_add_tail(&mac_pkt->node, &sdata->local->rx_mac_cmd_list);
+ queue_work(sdata->local->mac_wq, &sdata->local->rx_mac_cmd_work);
+ return NET_RX_SUCCESS;
+
+ case IEEE802154_FC_TYPE_ACK:
goto fail;
case IEEE802154_FC_TYPE_DATA:
diff --git a/net/mac802154/scan.c b/net/mac802154/scan.c
index 201bfc567a43..618553a2e026 100644
--- a/net/mac802154/scan.c
+++ b/net/mac802154/scan.c
@@ -403,6 +403,7 @@ void mac802154_beacon_worker(struct work_struct *work)
struct cfg802154_beacon_request *beacon_req;
struct ieee802154_sub_if_data *sdata;
struct wpan_dev *wpan_dev;
+ u8 interval;
int ret;
rcu_read_lock();
@@ -423,6 +424,7 @@ void mac802154_beacon_worker(struct work_struct *work)
}
wpan_dev = beacon_req->wpan_dev;
+ interval = beacon_req->interval;
rcu_read_unlock();
@@ -432,8 +434,9 @@ void mac802154_beacon_worker(struct work_struct *work)
dev_err(&sdata->dev->dev,
"Beacon could not be transmitted (%d)\n", ret);
- queue_delayed_work(local->mac_wq, &local->beacon_work,
- local->beacon_interval);
+ if (interval < IEEE802154_ACTIVE_SCAN_DURATION)
+ queue_delayed_work(local->mac_wq, &local->beacon_work,
+ local->beacon_interval);
}
int mac802154_stop_beacons_locked(struct ieee802154_local *local,
@@ -488,13 +491,17 @@ int mac802154_send_beacons_locked(struct ieee802154_sub_if_data *sdata,
local->beacon.mhr.source.pan_id = request->wpan_dev->pan_id;
local->beacon.mhr.source.extended_addr = request->wpan_dev->extended_addr;
local->beacon.mac_pl.beacon_order = request->interval;
- local->beacon.mac_pl.superframe_order = request->interval;
+ if (request->interval <= IEEE802154_MAX_SCAN_DURATION)
+ local->beacon.mac_pl.superframe_order = request->interval;
local->beacon.mac_pl.final_cap_slot = 0xf;
local->beacon.mac_pl.battery_life_ext = 0;
- /* TODO: Fill this field depending on the coordinator capacity */
+ /* TODO: Fill this field with the coordinator situation in the network */
local->beacon.mac_pl.pan_coordinator = 1;
local->beacon.mac_pl.assoc_permit = 1;
+ if (request->interval == IEEE802154_ACTIVE_SCAN_DURATION)
+ return 0;
+
/* Start the beacon work */
local->beacon_interval =
mac802154_scan_get_channel_time(request->interval,
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH wpan-next v2 0/4] ieee802154: Active scan support
2023-03-10 14:53 [PATCH wpan-next v2 0/4] ieee802154: Active scan support Miquel Raynal
` (3 preceding siblings ...)
2023-03-10 14:53 ` [PATCH wpan-next v2 4/4] mac802154: Handle received BEACON_REQ Miquel Raynal
@ 2023-03-23 12:58 ` Alexander Aring
2023-03-23 20:56 ` Stefan Schmidt
2023-03-24 9:57 ` Miquel Raynal
4 siblings, 2 replies; 9+ messages in thread
From: Alexander Aring @ 2023-03-23 12:58 UTC (permalink / raw)
To: Miquel Raynal
Cc: Alexander Aring, Stefan Schmidt, linux-wpan, David Girault,
Romuald Despres, Frederic Blain, Nicolas Schodet,
Guilhem Imberton, Thomas Petazzoni
Hi,
On Fri, Mar 10, 2023 at 10:12 AM Miquel Raynal
<miquel.raynal@bootlin.com> wrote:
>
> Hello,
> Following the initial support for passive scan and beaconing, here is an
> addition to support active scans.
> Thanks,
> Miquèl
Acked-by: Alexander Aring <aahringo@redhat.com>
but I need to admit those are more scan mechanism related work and I
trust Miquel he does the right thing, because he is actually more into
this topic as me and worked previously on it.
For me, I do not see anything that will break something e.g.
overwriting framebuffer/dealing with frame filter levels and I am
pretty sure Miquel already knows to take care of it.
Even if there would later be a problem regarding that, we can
hopefully work things out.
Thanks.
Sorry for the late reply.
- Alex
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH wpan-next v2 0/4] ieee802154: Active scan support
2023-03-23 12:58 ` [PATCH wpan-next v2 0/4] ieee802154: Active scan support Alexander Aring
@ 2023-03-23 20:56 ` Stefan Schmidt
2023-03-24 9:57 ` Miquel Raynal
1 sibling, 0 replies; 9+ messages in thread
From: Stefan Schmidt @ 2023-03-23 20:56 UTC (permalink / raw)
To: Alexander Aring, Miquel Raynal
Cc: Alexander Aring, linux-wpan, David Girault, Romuald Despres,
Frederic Blain, Nicolas Schodet, Guilhem Imberton,
Thomas Petazzoni
Hello.
On 23.03.23 13:58, Alexander Aring wrote:
> Hi,
>
> On Fri, Mar 10, 2023 at 10:12 AM Miquel Raynal
> <miquel.raynal@bootlin.com> wrote:
>>
>> Hello,
>> Following the initial support for passive scan and beaconing, here is an
>> addition to support active scans.
>> Thanks,
>> Miquèl
>
> Acked-by: Alexander Aring <aahringo@redhat.com>
This patch has been applied to the wpan-next tree and will be
part of the next pull request to net-next. Thanks!
regards
Stefan Schmidt
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH wpan-next v2 0/4] ieee802154: Active scan support
2023-03-23 12:58 ` [PATCH wpan-next v2 0/4] ieee802154: Active scan support Alexander Aring
2023-03-23 20:56 ` Stefan Schmidt
@ 2023-03-24 9:57 ` Miquel Raynal
2023-03-24 12:27 ` Alexander Aring
1 sibling, 1 reply; 9+ messages in thread
From: Miquel Raynal @ 2023-03-24 9:57 UTC (permalink / raw)
To: Alexander Aring
Cc: Alexander Aring, Stefan Schmidt, linux-wpan, David Girault,
Romuald Despres, Frederic Blain, Nicolas Schodet,
Guilhem Imberton, Thomas Petazzoni
Hi,
aahringo@redhat.com wrote on Thu, 23 Mar 2023 08:58:43 -0400:
> Hi,
>
> On Fri, Mar 10, 2023 at 10:12 AM Miquel Raynal
> <miquel.raynal@bootlin.com> wrote:
> >
> > Hello,
> > Following the initial support for passive scan and beaconing, here is an
> > addition to support active scans.
> > Thanks,
> > Miquèl
>
> Acked-by: Alexander Aring <aahringo@redhat.com>
>
> but I need to admit those are more scan mechanism related work and I
> trust Miquel he does the right thing, because he is actually more into
> this topic as me and worked previously on it.
> For me, I do not see anything that will break something e.g.
> overwriting framebuffer/dealing with frame filter levels and I am
> pretty sure Miquel already knows to take care of it.
I agree with the fact that the risk is rather low on this one. Now
coming:
- Handling of limited devices (ca8210)
- Associations/dis-associations (+ additional care to avoid confusing
the devices)
>
> Even if there would later be a problem regarding that, we can
> hopefully work things out.
Of course.
>
> Thanks.
>
> Sorry for the late reply.
>
> - Alex
>
Thanks!
Miquèl
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH wpan-next v2 0/4] ieee802154: Active scan support
2023-03-24 9:57 ` Miquel Raynal
@ 2023-03-24 12:27 ` Alexander Aring
0 siblings, 0 replies; 9+ messages in thread
From: Alexander Aring @ 2023-03-24 12:27 UTC (permalink / raw)
To: Miquel Raynal
Cc: Alexander Aring, Stefan Schmidt, linux-wpan, David Girault,
Romuald Despres, Frederic Blain, Nicolas Schodet,
Guilhem Imberton, Thomas Petazzoni
Hi,
On Fri, Mar 24, 2023 at 5:57 AM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
>
> Hi,
>
> aahringo@redhat.com wrote on Thu, 23 Mar 2023 08:58:43 -0400:
>
> > Hi,
> >
> > On Fri, Mar 10, 2023 at 10:12 AM Miquel Raynal
> > <miquel.raynal@bootlin.com> wrote:
> > >
> > > Hello,
> > > Following the initial support for passive scan and beaconing, here is an
> > > addition to support active scans.
> > > Thanks,
> > > Miquèl
> >
> > Acked-by: Alexander Aring <aahringo@redhat.com>
> >
> > but I need to admit those are more scan mechanism related work and I
> > trust Miquel he does the right thing, because he is actually more into
> > this topic as me and worked previously on it.
> > For me, I do not see anything that will break something e.g.
> > overwriting framebuffer/dealing with frame filter levels and I am
> > pretty sure Miquel already knows to take care of it.
>
> I agree with the fact that the risk is rather low on this one. Now
> coming:
> - Handling of limited devices (ca8210)
> - Associations/dis-associations (+ additional care to avoid confusing
> the devices)
>
ok. Thanks for the update.
- Alex
^ permalink raw reply [flat|nested] 9+ messages in thread