Commit graph

24,075 commits

Author SHA1 Message Date
Pieter De Gendt
16aded5d1f net: lib: sockets: tls: Use struct net_sockaddr_storage for stack variables
Replace instances of struct net_sockaddr with struct net_sockaddr_storage
for stack variables.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2026-03-06 11:34:00 +00:00
Pieter De Gendt
74732cd6fc net: lib: sockets: tls: Use struct net_sockaddr_storage for caches
Storing a socket address should be done with the designated struct
net_sockaddr_storage type instead of the opaque struct net_sockaddr.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2026-03-06 11:34:00 +00:00
Pieter De Gendt
bcc4c0bb1e net: lib: sockets: tls: Validate addrlen before memcpy
Prevent writing data that is larger than the destination struct's size.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2026-03-06 11:34:00 +00:00
Alberto Escolar Piedras
7b49dfd343 subsys/fs/fuse: Avoid using libC defined types in interface
Let's avoid using off_t in the interface between the embedded and the
host side of the FUSE driver.
off_t is a C library defined type and as such can have a different sizes
between the host C library and the embedded C library.

While at it, let's do also the same with size_t. Even though size_t is
meant to be defined in stddef.h which is provided by the compiler, it is
possible to override it in the embedded side.

We just replace them with a 64 bit type for each (signed and unsigned
respectively matching the signedness of off_t and size_t).

There was a bug in the queue type which had the read/write second
parameter as off_t while it should have been size_t, which is now fixed
to be uint64_t.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2026-03-06 10:08:41 +01:00
Pieter De Gendt
af4749d0a0 net: lib: coap_client: Store destination address in request
A CoAP client should not be limited to a single destination address for all
requests.
Store the destination address for each request or use the existing socket
directly.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2026-03-06 10:07:35 +01:00
Pieter De Gendt
a69f9e2fb9 net: lib: shell: ping: Validate identifer/sequence on response
Check if the ping reply is a response to our ping request.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2026-03-06 10:06:42 +01:00
Pieter De Gendt
50578b8aa8 net: ip: icmp: Change net_icmp_handler_t return type to enum net_verdict
Update the return type of the ICMP callback handler to enum net_verdict.
This fixes an issue where currently all ICMP handler are passed the same
pkt. Handlers could have modified the passed packet resulting in undefined
behavior.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2026-03-06 10:06:42 +01:00
Andre Heinemans
52c4fbb931 fs: shell: add mv command
Files can be moved or renamed by this 'mv' command

Signed-off-by: Andre Heinemans <andre.heinemans@nxp.com>
2026-03-06 10:05:20 +01:00
Stine Åkredalen
5dfc1b82a4 bluetooth: mesh: Fix bearer suspend/resume state
bt_mesh_suspend/resume now only re-enable provisioning bearers that
were previously active.

Adds internal bt_mesh_provisionee_suspend/resume APIs.

bt_mesh_suspend() now return -EBUSY if provisioning is active before any
suspend actions are performed.

Signed-off-by: Stine Åkredalen <stine.akredalen@nordicsemi.no>
2026-03-06 09:55:02 +01:00
Jukka Rissanen
6561cd064e net: http: Allow user to turn off HTTP/1 or HTTP/2 in server
If user does not need HTTP/1 or HTTP/2, then it is possible
to turn off support for them.

Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
2026-03-05 16:10:26 +01:00
Emil Gydesen
c97c0366e3 Bluetooth: CAP: Handover: Fix clearing wrong broadcast_source
When proc_param->is_unicast_to_broadcast == false we should clear
the broadcast_to_unicast.broadcast_source instead of the
unicast_to_broadcast.broadcast_source.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-03-05 16:09:04 +01:00
Vedant Malkar
86ff87ff81 Bluetooth: ISO: remove required_sec_level
Remove the required_sec_level for struct bt_iso_chan and
all related automatic security machinery built around it
(iso_chan_connect_security, bt_iso_security_changed,
BT_ISO_STATE_ENCRYPT_PENDING and the CONFIG_BT_SMP checks
in iso.c)

Applications can just call bt_conn_set_security() on the
ACL connection before bt_iso_chan_connect() instead.

Fixes #104751

Signed-off-by: Vedant Malkar <vedantitsme@gmail.com>
2026-03-05 11:15:32 +00:00
Zhaoxiang Jin
de97ddb0e8 pm: device: Refactor power domain add/remove logic
It turns out that power_domain_add_or_remove() when add==true only
looks for DEVICE_HANDLE_NULL empty slots to write to, and never checks
"whether this dev_handle is already in the supported handles or not".
The result is: repeated adds may insert duplicate entries; or when
there are no empty slots, even though it's "already in the domain",
it returns -ENOSPC (which conflicts with the documented semantics).

This commit adds a check: when add==true and rv[i] == dev_handle is
found, it returns -EALREADY and avoids duplicate insertion.

Signed-off-by: Zhaoxiang Jin <Zhaoxiang.Jin_1@nxp.com>
2026-03-05 10:02:30 +01:00
Robert Lubos
a909dc8296 net: ipv6: mld: Return 0 if address was already joined
In case address was already joined, return 0 instead of an error code to
avoid confusion.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
f84eeb9deb net: ipv4: igmp: Return 0 if address was already joined
In case address was already joined, return 0 instead of an error code to
avoid confusion.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
c8644d6899 net: iface: Join multicast IPv6 addresses only once on iface up
Make sure autoconfigured multicast IPv6 addresses are added (and thus
referenced) only once when the interface goes up to avoid mounting refs
for a given address.

Even if address is already present and net_ipv6_mld_join() is skipped
for a given address it's not an issue as all unjoined addresses have
their reports sent on interface going up via net_ipv6_mld_rejoin().

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
79e0a01ab1 net: iface: Clear is_joined flag when allocating mcast address
When allocating new multicast address, clear the is_joined flag as it
could've still be set from the previous allocation.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
e62a77ddf3 net: shell: ipv4: Print also multicast address details
For each interface, print also details about registered multicast
addresses.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
4ea96483b4 net: shell: ipv6: Print also multicast address details
For each interface, print also details about registered multicast
addresses.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
6ec8a43045 net: iface: Don't re-register mcast addresses on iface up
We just need to resend the report, not add the address again.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
cb4a2eb534 net: ipv6: mld: Add helper function to rejoin mcast groups
Add helper function that allows to rejoin multicast groups without
registering an address. This is needed in case we just want to send
report w/o increasing the ref count of the multicast address (when
interface goes up for example).

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
a9f78d65b1 net: ipv4: igmp: Add helper function to rejoin mcast groups
Add helper function that allows to rejoin multicast groups without
registering an address. This is needed in case we just want to send
report w/o increasing the ref count of the multicast address (when
interface goes up for example).

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
4e2abc0118 net: ipv6: mld: Remove redundant inteface state check
Network interface state is now checked down the line in
net_try_send_data() so a separate check in the MLD code was redudant,
hence remove it to simplify the code.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
2f17aaa5c7 net: ipv6: mld: Make use of mcast address ref counting
Don't send MLD report on join if the address was already joined,
only increase the ref count by calling net_if_ipv6_maddr_add().

On leave, only send report if the address was removed from the system
(i.e. is no longer in use).

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
3740a03136 net: ipv4: igmp: Make use of mcast address ref counting
Don't send IGMP report on join if the address was already joined,
only increase the ref count by calling net_if_ipv6_maddr_add().

On leave, only send report if the address was removed from the system
(i.e. is no longer in use).

For IGMPv3 specifically, if the address with non-empty include/exclude
list was already registered, return an error as registering lists from
different sources is currently not supported.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Robert Lubos
e1854efd3b net: iface: Add multicast address ref counting
Add ref counting for multicast addresses, so that if a multicast address
is registered from different subsystems, they won't interfere with each
other. That way, if one subsystem decides to remove a multicast address,
it won't affect other subsystems that may still need it.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-03-04 16:43:42 +00:00
Emil Gydesen
f5f9a0e0f3 Bluetooth: CCP: Modify get_bearer_provider_name to use output buffer
Modify bt_ccp_call_control_server_get_bearer_provider_name to
store the bearer provider name in an output buffer, instead of just
providing the pointer.

The reason for this is to make the result thread safe, and
avoid the user/application having a direct pointer to
internal storage.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-03-04 14:34:10 +00:00
Emil Gydesen
d0dae06458 Bluetooth: Host: Make ACL/CIS disconnect order deterministic
Currently the other of the ACL and CIS disconnect callbacks
depend on the order of the HCI events received. Since this
order is not specified by the core spec, it means that any
users/applications of ISO will need to wait for all CIS
disconnects callbacks and the ACL disconnect callback before
attempting to reuse any of them.

From an API perspective this is not ideal, and the API will
be much simpler if the order of ACL and ISO disconnect
callbacks were deterministic, regardless of the controller.

This change postpones the finalization of the ACL disconnect
until all the CIS associated with it has been disconnected.
This will also make the API more similar to e.g. the L2CAP
disconnect order.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-03-04 14:30:00 +00:00
Emil Gydesen
0c354b1573 Bluetooth: CAP: Handover: Add broadcast_created callback
Add a new callback for when the broadcast source has been
created. This callback is useful for the application to
configure the periodic advertising with the BASE of the
broadcast source. Configuring and starting the
periodic advertising with the BASE at that point in time
may optimize how quickly the procedure can be completed.

A callback was chosen, rather than having the stack set
up the data itself, because that the application may
want to add additional data in the periodic advertising,
and thus the owner of the data should be the application,
and not the stack.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-03-04 13:35:48 +01:00
Zhaoxiang Jin
2e9f09e12d pm: policy: change 'greater than or equal' to 'greater than'
The comment definition for pm_policy_latency_request_add
states: states that exceed the given latency are unavailable.
However, the implementation in pm_policy_latency_update_locked
does not use the greater-than operator, so according to the
semantics, it should be changed to > to be consistent.

Signed-off-by: Zhaoxiang Jin <Zhaoxiang.Jin_1@nxp.com>
2026-03-04 11:42:11 +01:00
Lyle Zhu
d3e7a8300a bluetooth: classic: obex: fix abort response handling for last client
Fix OBEX abort response handling when no active client exists by
tracking the last executing client and its previous opcode.

- Add _last_client pointer to track the most recent executing client
- Add _pre_opcode to store the opcode before clearing _opcode
- Save client state before clearing opcode in all operation handlers
- Implement obex_get_last_client() to recover client context for abort
- Handle abort responses even when _active_client is already cleared
- Clear last client tracking on transport connect/disconnect

This ensures abort responses are properly delivered to the correct
client callback even if the operation has already completed.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2026-03-03 19:13:18 +00:00
Martin Stumpf
2ef7ee567e mcumgr: Fix 'stat' group error codes
Error codes of group 'stat' were incorrectly labeled as group 'zbasic'.

Signed-off-by: Martin Stumpf <finomnis@gmail.com>
2026-03-03 18:00:54 +01:00
Lyle Zhu
9db318da9a Bluetooth: Classic: SDP: Add zero-length data element check
Add validation to detect and handle zero-length data elements during
SDP attribute parsing. When the parsed data element length is zero,
log a debug message and return early to avoid unnecessary processing.

This check is placed after parsing the data element length but before
the nesting level validation, ensuring that:
- Empty data elements are gracefully handled without errors
- The parser doesn't attempt to process or skip zero bytes of data
- Subsequent attribute parsing continues normally

This prevents potential issues when SDP records contain empty data
elements and improves parser robustness when handling malformed or
edge-case SDP attribute structures.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2026-03-03 17:57:11 +01:00
Lyle Zhu
85bbfef282 Bluetooth: Classic: SDP: Fix nesting level check timing
Move the nesting level check to occur after parsing the data element
length instead of before. This ensures that when the maximum nesting
level is exceeded, the parser can properly skip the nested data by
pulling the correct length from the buffer.

Previously, checking the nesting level before parsing the length meant
the parser would return early without consuming the nested data,
potentially causing parsing errors for subsequent attributes.

The updated logic:
- Parses the data element type and length first
- Checks if maximum nesting level is exceeded
- If exceeded, logs a warning and skips the data element entirely
- Otherwise, proceeds with recursive parsing as normal

This prevents buffer misalignment when deeply nested sequences are
encountered in SDP attribute records.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2026-03-03 17:57:11 +01:00
Lyle Zhu
f9e21462e2 Bluetooth: Classic: SDP: Fix parsing of nested sequences
Fix SDP attribute parsing to properly handle nested sequences within
attribute values. Previously, when an attribute value itself contained
a sequence, the parser would not recursively parse the nested sequence,
potentially missing nested attribute data.

Add recursive parsing logic that:
- Detects if the current value buffer contains a sequence type
- Recursively calls sdp_attr_parse() with incremented nest level
- Properly handles nested sequence structures in SDP records

This ensures complete parsing of complex SDP attribute structures that
contain sequences within sequences, such as protocol descriptor lists
or service class ID lists with nested elements.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2026-03-03 17:57:11 +01:00
Lyle Zhu
7f8064f5bc bluetooth: classic: GOEP: refactor RFCOMM initialization
Extract common GOEP RFCOMM initialization logic into a separate function
to eliminate code duplication between accept and connect paths.

- Add new goep_rfcomm_init() function containing shared initialization:
  * MTU calculation and validation
  * Transport operations registration
  * RFCOMM DLC configuration
  * GOEP state setup
- Update goep_rfcomm_accept() to use the new init function
- Update bt_goep_transport_rfcomm_connect() to use the new init function

This refactoring reduces code duplication and ensures consistent
initialization behavior for both server (accept) and client (connect)
code paths.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2026-03-03 13:27:25 +01:00
Lyle Zhu
5103438833 bluetooth: classic: GOEP: refactor L2CAP initialization
Extract common GOEP L2CAP initialization logic into a separate function
to eliminate code duplication between accept and connect paths.

- Add new goep_l2cap_init() function containing shared initialization:
  * MTU calculation and validation
  * Transport operations registration
  * L2CAP channel configuration
  * GOEP state setup
- Update goep_l2cap_accept() to use the new init function
- Update bt_goep_transport_l2cap_connect() to use the new init function

This refactoring reduces code duplication and ensures consistent
initialization behavior for both server (accept) and client (connect)
code paths.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2026-03-03 13:27:25 +01:00
Alex Ciascai
e575733f4d bluetooth: tbs: fix Dialing -> Alerting transition handling for PTS VRC
This change ensure that TBS bearers promote dialing -> alerting
independently of GTBS. GTBS no longer blocks the state transitions,
promotion only waits for the bearer's own pending notifications to
clear, preserving notification ordering. GTBS continues to aggregate
the updated state correctly

Signed-off-by: Alex Ciascai <alexandru.ciascai@nordicsemi.no>
2026-03-03 11:17:18 +01:00
Emil Gydesen
f04042714d Bluetooth: BAP: Unicast Client: Handle unexpected ASE IDs
If we receive a control point notification with an ASE ID that
does not match any existing streams, i.e. audio_stream_by_ep_id
returns NULL, we should not continue by calling the subsequent
functions like unicast_client_notify_ep_config with a NULL stream.

A single notification may contain multiple ASE IDs; if any of them
are unknown, we can either reject the entire notification, or
we can ignore the specific ASE ID. For now, ignore the
specific ASE ID to do a best effort to continue with
any other changes.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-03-03 11:15:45 +01:00
Emil Gydesen
6eb77788af Bluetooth: MCS: Dont discard notifications on read
Remove calls to atomic_clear_bit on reads. Even if a characterstic
is read while there is a pending notification, we shall
(as per the MCS spec) still send the notification.

There are 3 special cases for long (string) values, where we
need to know the difference between a changed value (pending
for notification), and a value that has changed since last
read. To support this, these 3 cases now have _DIRTY flags
to indicate that the values are dirty and must be read from
the beginning again.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-03-03 11:11:03 +01:00
Pisit Sawangvonganan
a8791c8c4d settings: make NVS and ZMS store interface instances const
Mark `settings_nvs_itf` and `settings_zms_itf` as `const` since
they are statically defined interface tables that are never
modified at runtime.

This lets the compiler place them in read-only storage and
trims RAM usage.

Signed-off-by: Pisit Sawangvonganan <pisit@ndrsolution.com>
2026-03-02 15:58:35 -08:00
Adam Wojasinski
5b32348c1b net: ptp: Fix undefined bitwise shift in port management
Add bounds checking to PTP management interval parameters to prevent
undefined behavior from bitwise shift operations.

The port_timer_set_timeout() and port_timer_set_timeout_random()
functions perform left and right shift operations using the
log_announce_interval and log_sync_interval values as shift counts.
Without bounds validation, these int8_t parameters could be set to
extreme values (e.g., via PTP management messages) that exceed the
valid shift range, causing undefined behavior.

(C11, 6.5.7p3)
> If the value of the right operand is negative or is greater than
or equal to the width of the promoted left operand,
the behavior is undefined

(C++11, 5.8p1)
> The behavior is undefined if the right operand is negative,
or greater than or equal to the length in bits of the promoted
left operand.

Limit both log_announce_interval and log_sync_interval to the range
[-63, 63] using MIN/MAX macros when accepting values from PTP management
frames. This range is preventing shift operations outside
the 64-bit width used in the timeout calculations.

Fixes: GHSA-3v98-458v-388r

Signed-off-by: Adam Wojasinski <awojasinski@baylibre.com>
2026-03-02 15:57:04 -08:00
Vinayak Kariappa Chettimada
53d053359a Bluetooth: Controller: nRF54Lx: Fix DTM when using GRTC
Fix nRF54Lx DTM implementation when using GRTC. The Radio
start needs to be offset by a maximum ISR latency value that
is less than inter-frame switching, plus minimum counter
compare offset that can be set, plus minimum CPU latency to
set the counter compare register.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2026-03-02 15:44:30 -08:00
Vinayak Kariappa Chettimada
8f77fc6e08 Bluetooth: Controller: nRF5x: Tune counter compare minimum and latency
Tune counter compare minimum and latency.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2026-03-02 15:44:30 -08:00
Vinayak Kariappa Chettimada
5e2e989cdc Bluetooth: Controller: Use clock startup time from devicetree
Use clock startup time from devicetree.

Relates to commit 72dac165d8 ("Bluetooth: Controller: Use
OVERHEAD_XTAL_US from devicetree").

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2026-03-02 15:44:30 -08:00
Zhaoxiang Jin
9834dac28a pm: policy: add NULL callback support for latency subscriptions
The comment for the API pm_policy_latency_changed_subscribe
states: "NULL to disable", but the function implementation
directly saves and subscribes to this node, and subsequently
calls it directly without null checking when changes occur.
This actually poses a risk of calling a null function pointer.

This commit fixes this issue to make the function implementation
consistent with the API description.

Signed-off-by: Zhaoxiang Jin <Zhaoxiang.Jin_1@nxp.com>
2026-03-02 11:01:47 +01:00
Zhaoxiang Jin
2865d5ce0d pm: policy: replace DT_PROP_LEN with ARRAY_SIZE
Use ARRAY_SIZE macro to determine the size of the pm_constraints
array instead of DT_PROP_LEN. Because a practical issue is that
'zephyr, disabling-power-states' may contain multiple power states,
but one of the power states is in a disabled status. In this case,
the size obtained by DT_PROP_LEN is larger than the actual size.

Signed-off-by: Zhaoxiang Jin <Zhaoxiang.Jin_1@nxp.com>
2026-03-02 10:58:56 +01:00
Zhaoxiang Jin
af746bc840 pm: policy: Improve the event implementation
1. Updated event-related API docs to fix wording and clarify
semantics ("earliest/soonest event", ticks vs cycles).

2. Improve the event implementation to prevent list corruption on misuse:
- pm_policy_event_register() is now idempotent: re-registering
  the same evt updates its time instead of appending a duplicate node.
- pm_policy_event_update() / pm_policy_event_unregister() become clean
  no-ops if evt is not currently registered.
- Kept a basic evt != NULL assertion.

Signed-off-by: Zhaoxiang Jin <Zhaoxiang.Jin_1@nxp.com>
2026-03-02 10:58:14 +01:00
Thomas Hebb
86b9ebadc6 bluetooth: classic: did: Set up logging
This file fails to compile since commit ef7b132bfd ("Bluetooth:
Classic: Fix initialization to support re-initialization"), which added
a LOG_ERR() invocation but didn't setup logging for the file.

Fixes #101810

Signed-off-by: Thomas Hebb <tommyhebb@gmail.com>
2026-03-02 10:49:56 +01:00
Robert Lubos
5ab02c7e7a net: ip: Allow to specify default router with net_if_ipv6_router_add()
Align the net_if_ipv6_router_add() behavior with its IPv4 counterpart,
where it is possible to specify whether the router is a default one
instead of making assumptions based on the lifetime value.

The current behavior was likely inspired by the Neighbor Discovery RFC,
where the lifetime parameter of 0 received in the Router Advertisement
message indicates that the router should not be treated as a default
router, however this is an implementation detail of the Neighbor
Discovery protocol and does not need to be enforced at the router API
level, as this can be used outside of this protocol (for example when
router is added manually from the application).

Therefore, allow to specify the "is_default" parameter separately just
like in the IPv4 case.The Router Advertisement handling routine will
just specify the "is_default" value based on the received lifetime
value.

Also, clarify in the function documentation what does it mean to specify
lifetime to 0 (which means the router never expires according to current
implementation).

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-02-27 21:03:52 +00:00