From 0f2fbe1b5798662b9ec7b3574347724a2e3d3c56 Mon Sep 17 00:00:00 2001 From: morigawa Date: Wed, 15 Oct 2025 10:32:42 +0200 Subject: [PATCH 1/2] drivers/netdev_ieee802154_submac: set bytes_tx correctly bytes_tx should not be set to 0 at this point. It should be set to the length of the package, if there is an error after transmission it will be set to an error value in submac_tx_done. The value will be evaluated after a TX_DONE Event, so the pending state 0 that is returned from the _send function while async sending, is not relevant for bytes_tx. --- drivers/netdev_ieee802154_submac/Makefile.dep | 1 + .../netdev_ieee802154_submac/netdev_ieee802154_submac.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/netdev_ieee802154_submac/Makefile.dep b/drivers/netdev_ieee802154_submac/Makefile.dep index ded8dc4552..07827af196 100644 --- a/drivers/netdev_ieee802154_submac/Makefile.dep +++ b/drivers/netdev_ieee802154_submac/Makefile.dep @@ -2,4 +2,5 @@ USEMODULE += netdev_ieee802154 USEMODULE += netdev_new_api USEMODULE += ieee802154 USEMODULE += ieee802154_submac +USEMODULE += iolist USEMODULE += ztimer_usec diff --git a/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c b/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c index 32bc07cc64..0205f605f6 100644 --- a/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c +++ b/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c @@ -196,7 +196,14 @@ static int _send(netdev_t *netdev, const iolist_t *pkt) * inside the TX Done callback */ netdev_submac->ev = NETDEV_EVENT_TX_STARTED; } - netdev_submac->bytes_tx = res; + if (res == 0) { + uint8_t len = iolist_size(pkt); + if (len > 0) { + len += IEEE802154_FCS_LEN; + } + netdev_submac->bytes_tx = len; + } + return res; } From 073d16508d00a3ea1daded7621ee02749d889ffc Mon Sep 17 00:00:00 2001 From: morigawa Date: Wed, 15 Oct 2025 12:45:34 +0200 Subject: [PATCH 2/2] pkg/openthread: change error code Using OT_ERROR_FAILED let to unreachable code and following that a panic. --- pkg/openthread/contrib/platform_radio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/openthread/contrib/platform_radio.c b/pkg/openthread/contrib/platform_radio.c index e999d174d7..e671aa14ff 100644 --- a/pkg/openthread/contrib/platform_radio.c +++ b/pkg/openthread/contrib/platform_radio.c @@ -189,7 +189,7 @@ void send_pkt(otInstance *aInstance, netdev_t *dev, netdev_event_t event) } else if (res == -EHOSTUNREACH) { otPlatRadioTxDone(aInstance, &sTransmitFrame, NULL, OT_ERROR_NO_ACK); } else { - otPlatRadioTxDone(aInstance, &sTransmitFrame, NULL, OT_ERROR_FAILED); + otPlatRadioTxDone(aInstance, &sTransmitFrame, NULL, OT_ERROR_ABORT); } } #else