Commit Graph

846 Commits

Author SHA1 Message Date
Song GUO 7971508587 [thread-cert] create internet directory for NAT64 and PD tests (#10794) 2024-10-08 20:22:55 -07:00
Yang Sun be74a3c035 [border-agent] add api to disconnect from secure sessions (#10754) 2024-10-08 09:18:05 -07:00
Przemysław Bida 213665cce0 [tcat] implementation of TCAT general class commands (#10700)
Commit introduces implementation of missing general class commands:
- PresentPskdHash
- PresentPskcHash
- PresentInstallCodeHash
- RequestRandomNumChallenge
- RequestPskdHash

Also include minor fixes in Tcat python client and refactoring of expect
tests for tcat.
2024-10-02 11:10:16 -07:00
Song GUO 7cd179e23a [routing-manager] stop PD if there is another prefix with higher preference in netdata (#10289)
This commit adds a new IDLE state to PdPrefixManager.

PdPrefixManager enters idle state when PD is enabled and there is
already a BR requesting PD prefix. When there are multiple BRs
publishing PD prefix at the same time, the one with lexcial smaller
prefix wins.
2024-09-29 23:27:30 -07:00
Yakun Xu c6a4657178 [diag] add flag to enable CSMA/CA (#10723) 2024-09-18 11:20:11 -07:00
Abtin Keshavarzian 67b8f5c821 [routing-manager] set SNAC Router Flag in emitted RA (#10695)
This commit updates the `RouteingManager` to set the newly
allocated "SNAC Router Flag" (bit 6) in emitted RA messages from
Thread BR. The flag is also parsed and tracked in received RA
messages.

This replaces the previous model where an experimental flag bit
in "Flags Extension Option" indicated a "stub router". This commit
also removes the `STUB_ROUTER_FLAG_IN_EMITTED_RA_ENABLE` confg
(no longer optional/experimental) and renames `mStubRouterFlag` to
`mSnacRouterFlag`.
2024-09-16 13:33:32 -07:00
Yang Sun 97a3f7648f [trel] add cli to get TREL UDP port (#10702)
The test software for certification currently uses the mDNS packets of
trel service responses to find out the trel port, and then use the port
number to determine which packets in a capture should be decoded as TREL
packets. However this may not be reliable since it depends on when the
capture starts. Added a cli to get trel port, so this can be used by
a THCI function.
2024-09-13 09:54:33 -07:00
Jonathan Hui 2f51cababf [github-actions] migrate version 1.3 checks to 1.4 (#10694) 2024-09-11 07:25:32 -07:00
Yakun Xu c0690e78fc [build] set default Thread version to 1.4 (#10690)
This commit updates the default Thread version to 1.4, so that most
latest features will be enabled by default. This commit also explicitly
enable the epskc feature just like other features in the build script.
2024-09-10 13:39:38 -07:00
Mason Tran 928074c538 [tests] add a expect test for coaps disconnect (#10655) 2024-09-03 11:08:08 -07:00
Handa Wang e19c775ce3 [doc] fix typos in comments (#10664)
Done by `script/code-spell` with some manual fixes.
2024-09-02 14:05:54 -07:00
Yakun Xu 95a4c338e0 [diag] support send security processed frames (#10640)
This commit extends the `diag frame` command by adding an argument `-s`
to indicate whether the frame has been encrypted or not, so that the
diag commands can be used to test frames having security processed in
the host.
2024-08-27 18:35:04 -07:00
Jason Zhang 4465c9b57a [tests] optimize multi-ail test case to run three BRs on two infra link (#10637)
This commit:
1. update the topology to make 3 BRs running on 2 AILs;
2. specify the test name as `test_multi_backbone_infra`, which is
  focusing on verifying the multiple backbone framework works good
3. fix bug that previously pinging throught ethernet does not actually
   work.

For 3, previous `br1.ping(br2_infra_link_local, interface=br1_infra_link_local)`
actually send ping command via ot-ctl instead of the docker bash. The
new `br1.ping(br2_onlink_ula, backbone=True)` actually send a docker
bash command to ping another node via ethernet. Here we choose to use
onlink ULA address (9100::) instead of the link local address because
only "ping [link-local-addr]%eth0" (by specifying the zone index) can
work for link-local address, but this is not currently supported by
`LinuxHost.ping_ether()` method.
2024-08-27 09:41:55 -07:00
Abtin Keshavarzian 8f2ddf93c3 [thread-cert] relax TLV type checks in pktverify (#10627)
This commit modifies thread-cert scripts utilizing `pktverify` to
adopt a more flexible approach to TLV type checking. Specifically, it
replaces strict equality (`==`) or strict subset (`<`) checks with a
subset or equal check (`<=`) when verifying the presence of TLVs in a
message. This adjustment ensures that test scripts adhere to the
principle of ignoring extra or unknown TLVs, thereby future-proofing
them against potential protocol updates that might introduce new
TLVs.
2024-08-27 08:18:45 -07:00
Yang Sun 24e930654e [epskc] add API for ePSKc telemetry (#10608)
Adds API to get border agent counters which include counters for
ePSKc, PSKc and coap messages.
2024-08-21 23:02:44 -07:00
Przemysław Bida 8a0ea2b692 [tcat] implement new tcat General commands (#10526)
New General TLV's implemented:
- Get network name
- Get device id
- Get ext pan ID
- get provisioning URL
2024-08-21 19:21:10 -07:00
Jason Zhang b5c57e6ad7 [thread-cert] wrap command br peers and br routers (#10613)
This commit adds functions to read peer BRs and routers on infra link by
wrapping the ot-ctl command `br peers` and `br routers`.

`test_multi_ail.py` is also updated to test the new added functions.
2024-08-16 07:23:53 -07:00
Jason Zhang 93e838102c [thread-cert] support to get link-local address of the infra interface (#10603)
This commit targets to support getting infra link-local address of a
OtbrNode in docker test, which is usefully for future test cases.

The test_multi_ail.py is also updated to test the new method added.
2024-08-15 07:35:18 -07:00
Abtin Keshavarzian 1645880b8e [dsnsd-server] support handling of "A record" queries (#10364)
This commit adds support for responding to "A record" queries in the
DNS-SD server and discovery proxy.

If the query matches a host registered with the SRP server, the host's
IPv6 addresses are returned in the Additional Data section of the
response. If the query is resolved by the proxy, the `otPlatDnssd`
APIs are used to start/stop IPv4 address resolvers for the hostname
on the infrastructure network.

The `test_dnssd_discovery_proxy` unit test is updated to validate the
new functionality.
2024-08-14 12:40:48 -07:00
Mia Yang fa26102fe5 [test] verify ephemeral key settings and _meshcop-e (#10537) 2024-08-13 21:40:40 -07:00
Jason Zhang 509596fe2c [test] fix potential backbone name conflict when running cert suite (#10596)
### Background

https://github.com/openthread/openthread/pull/10550 introduced a new
way to support multiple backbone nework in otbr docker test. Though it
works good while running a single test, a bug exists when running
cert-suite, which runs a batch of tests in parallel.

cert-suite allocates the name of the backbone interfaces dynamically
by setting env PORT_OFFSET for each test, so there is potentially
conflict exists if we hard code the `backbone_network` name in
TOPOLOGY. This PR is targeting to fix this potential naming conflict.

### Fix

We fix it by assigning a number for `backbone_network_id` in each BR
definition in TOPOLOGY, instead of setting a fixed `backbone network`
name. The final backbone network name is decided by both `PORT_OFFSET`
env and the number of `backbone_network` (in
`backbone{PORT_OFFSET}.{backbone_network}` format)

For example, if `PORT_OFFSET` is 0 and `backbone_network_id` is 1,
then backbone network name will be `backbone0.1`. For the tests that
only use one backbone network and the `backbone_network_id` is not
given, the backbone network name is by default
`backbone{PORT_OFFSET}.0`.

### New test case format
```
class NewTestCase(thread_cert.TestCase):
    ...
    BR = 1
    ...
    TOPOLOGY = {
        BR: {
            ...
            'is_otbr': True,
            'backbone_network_id': <backbone-id>,
            ...
        }
        ...
    }
    ...
```

`<backbone-id>` is any integer from 0, for each BR inside a single
test, if `<backbone-id>` is different, the BR use different backbone
interfaces; the same `<backbone-id>` inside a single test case means
the same backbone network interface.

`'backbone_network_id': <backbone-id>` is optional for single backbone
test cases, when it's not given while defining a otbr node, the
backbone is default as `backbone{PORT_OFFSET}.0`.

For developers, if you are defining a new test which has multiple
backbone interfaces, please ensure `backbone_network_id` is explicitly
defined in each BR, otherwize an error is reported.
2024-08-13 09:21:43 -07:00
Jason Zhang 28b6011433 [thread-cert] print elapsed time of each test when running cert suite (#10593)
This is helpful to know the exact time that each test take when running
bunch of tests in cert suite.
2024-08-09 14:55:36 -07:00
Jason Zhang 67717618b7 [test] support multiple backbone interfaces in otbr docker test (#10550)
In previous otbr docker tests, when creating docker containers, all the
containers(otbr nodes) are connected to the same docker network bridge `backbone0`
(when the env PORT_OFFSET is not set or set to 0), this means all the
otbr nodes are connected to the same infrastructures.

This commit adds support to enable user to config otbr instance
infrastructures seperately in `TOPOLOGY` when defining test cases, this
provides flexibility to run multi-ail related test cases.

The format to define backbone interface per node is:

```
class NewTestCase(thread_cert.TestCase):
    ...
    BR = 1
    ...
    TOPOLOGY = {
        BR: {
            ...
	    'is_otbr': True,
	    'backbone': <backbone-name>,
	    ...
	}
	...
    }
    ...
```

`'backbone': <backbone-name>` is optional, when it's not given when
defining a otbr node, the backbone is default as
`BACKBONE_DOCKER_NETWORK_NAME`. The `<backbone-name>` is suggested to be
defined as `backbone[0-9]` to make it more easy to read and understand.

This commit also adds test_multi_ail.py as an example test case to use
this new method, this test case checks the two otbr nodes are connected
to the different infra and are in the same Thread mesh network.
2024-08-08 07:44:26 -07:00
Jason Zhang 6635201aa1 [thread-cert] fix bug that docker network is not removed (#10590)
In some cases that `_do_packet_verification` is False (e.g. verify() is
not defined), the docker network is not correctly removed.

docker network interface should always be removed at the end of the test
if it was created at the begin of the test
2024-08-08 08:37:57 -06:00
Mia Yang 634745dd72 [test] verify state bitmap when runtime enable/disable EphemeralKey mode (#10503)
Meshcop ePSKc mode supported bitmap check.
2024-08-06 08:54:02 -06:00
Jason Zhang 1d35e30e0e [thread-cert] output docker stdout/stderr only when VERBOSE is non-zero (#10574)
This commit supresses the docker output unless verbose mode is enabled,
which helps preventing unnecessary output from cluttering the console.

docker output is enabled when:
 * env VERBOSE is set to a non-zero value

docker output is suppressed (redirecting to /dev/null) when:
 * VERBOSE is not explicitly set in env, or
 * env VERBOSE is set to 0
2024-08-06 08:49:27 -06:00
Zhanglong Xia c5ad131028 [cli] add the sync option to the linkmetrics cli commands (#10518)
The cli command `linkmetrics` only provides an asynchronous output
method. It is difficult for scripts to call the `ot-ctl` to capture
the results of asynchronous output.

This commit replaces the command `linkmetrics mgmt` and `linkmetrics
query` with commands `linkmetrics config` and `linkmetrics
request`. Both the commands `linkmetrics config` and `linkmetrics
request` are set to the `sync` mode by default, and an option `async`
is added to these commands to support `async` mode.
2024-08-02 13:37:18 -07:00
Yakun Xu af18582b4e [test] set default paths of expect scripts (#10530)
This commit adds default paths for expect scripts to make it easier for
running expect scripts. With this change, we can run expect tests as
follows:

```bash
./script/cmake-build simulation
./script/cmake-build posix
./tests/scripts/expect/cli-ping.exp
OT_NODE_TYPE=rcp ./tests/scripts/expect/cli-ping.exp
```

This commit also updates an existing test to cover the change.
2024-07-24 06:50:17 -07:00
Abtin Keshavarzian 171f94c307 [srp-client] defer SRP update on SLAAC address deprecation (#10505)
This commit updates SRP client's `AutoHostAddress` behavior to
defer SRP updates on SLAAC address deprecation events.

Under `AutoHostAddressMode`, all preferred addresses on Thread Netif,
excluding link-local and mesh-local addresses, are registered. If no
eligible address is available, then the ML-EID will be registered.

This commit adds a new mechanism where if a previously registered
address starts being deprecated (e.g., due to an OMR prefix removal
from Network Data), the SRP update is deferred. The client will
re-register after the deprecation time has elapsed and the address is
removed. In the meantime, if any other event triggers the client to
send an SRP update, the updated address list will be included in that
update.

This commit also updates `test_srp_auto_host_address` to validate the
newly added behavior.
2024-07-17 11:14:09 -07:00
Przemysław Bida bf5ddb908e [tcat] implementation of tcat Ping command (#10484)
Commit implements Tcat ping command `kTlvPing`.

Signed-off-by: Przemyslaw Bida <przemyslaw.bida@nordicsemi.no>
2024-07-09 10:11:39 -07:00
Rongli Sun fbdb4b6c8f [test] supplement state bitmap test (#10318) 2024-07-05 09:51:33 -07:00
Abtin Keshavarzian e72ef4354a [test] harden test_advertising_proxy (#10474)
This commit makes two changes in `test_advertising_proxy`:

- In the test step where the server is restarted, a longer wait time
  is used to account for the longer jitter interval used by SRP
  client in such a case.
- Due to the use of short lease time (10 seconds) in this test, the
  client will refresh the registered services quickly. Therefore, in
  `check_host_and_service()`, any of `Registered`, `ToRefresh`, or
  `Refreshing` states are accepted as indicating successful
  registration.
2024-07-05 09:49:03 -07:00
Abtin Keshavarzian d87be657c6 [srp-client] enhance selection of TX jitter based on trigger reason (#10357)
This commit improves the `Srp::Client` mechanism for applying random
jitter delays before sending update messages to the server. It now
supports different jitter ranges based on specific triggers. Since
trigger events are often network-wide, potentially causing
simultaneous SRP re-registration from many nodes, longer jitter
intervals are used to distribute the resulting SRP update
transmissions and avoid congestion.

The following triggers are covered:

- Server switch: Client switching to a new server while already
  connected to a discovered server. This occurs when a new server
  entry appears in Network Data which is preferred over the current
  selection.

- Server restart: Client was previously connected to a server that
  disappeared from Network Data. Later, the same or a new server is
  discovered in Network Data.

- SLAAC address add or remove: This is generally triggered by updates
  to SLAAC prefixes in Network Data (e.g., OMR prefix changes).

- First registration after attach:

  - If the device is attaching to an established Thread mesh
    (e.g., after a reboot or initial pairing), the Network Data it
    receives should already include a server entry, leading to a
    quick server selection after attach. If server selection occurs
    within a short window, a shorter TX jitter is used, allowing the
    device to register quickly and become discoverable.

  - If server discovery takes longer, a longer TX jitter is used. This
    situation can indicate a server/BR starting up or a network-wide
    restart of many nodes (e.g., due to a power outage).

This commit introduces `TxJitter` class to manage the requested TX
jitter based on a trigger reason. It tracks the time of the event
that triggered a longer jitter request. If the update message is sent
immediately after the trigger event, the requested maximum jitter is
applied. However, if the update message is sent later, the maximum
jitter is adjusted proportionally to the time elapsed since the
trigger event. If the elapsed time exceeds the requested maximum
jitter interval, the default short jitter is applied to avoid
unnecessary registration delay.
2024-07-02 08:52:28 -07:00
Przemysław Bida 6aa6f45606 [tcat] implement decommissioning in tcat_agent (#10415)
Commits adds handling of TCAT TLV 0x60 `kTlvDecommission`.
2024-07-01 19:14:53 -07:00
Konrad Derda 8a8a4d8e31 [netif] remove multicast promiscuous mode configuration (#10338)
Since 74c833b623 was introduced all IPv6
multicast packets are passed to the host. Previously used promiscuous
mode configuration is now unused. This commit removes the dead code and
corresponding elements as there is no use case for them at the moment
(and they can confuse a user).

Signed-off-by: Konrad Derda <konrad.derda@nordicsemi.no>
2024-06-14 10:08:44 -07:00
Yakun Xu fa71a8afa3 [diag] specify sending frame (#10359)
This commit adds an extra command `diag frame` to specify the frame
used for `diag send` and `diag repeat`, so that we can use this
command to send arbitrary 802.15.4 frames.
2024-06-13 07:53:48 -07:00
Abtin Keshavarzian 4a0d6b7b64 [test] update key-increment test scripts to align with cert test (#10347)
This commit removes the option to set `key_switch_guardtime` when
constructing nodes and network topology in test scripts. The
following tests are updated to reflect this change:

- `Cert_5_8_02_KeyIncrement.py`
- `Cert_5_8_03_KeyIncrementRollOver.py`
- `Cert_6_6_01_KeyIncrement.py`
- `Cert_6_6_02_KeyIncrementRollOver.py`
2024-06-12 10:56:00 -07:00
Przemysław Bida 398df8c408 [tcat] implement tcat advertisement (#9858)
Commit introduces implementation of TCAT advertisement over BLE
compliant with Thread 1.3.1 specification.
2024-06-06 11:26:59 -07:00
Yakun Xu 39ce8117a5 [simulation] support simulating radio over IPv6 (#10194)
This commit adds support to simulate Thread radio over IPv6.

With this commit, a simulation will be simulated over either IPv6 or IPv4.
If it's simulated on IPv6, it communicates with other simulation nodes
in IPv6 group `ff02::116`. And if it's simulated on IPv4, it communicates
with other simulation nodes in IPv4 group `224.0.0.116`.

Note that simulating virtual time is not included in this commit.
2024-05-13 09:27:54 -07:00
Abtin Keshavarzian efb80c0b83 [routing-manager] exclude on-link prefixes with short preferred lifetime (#10062)
This commit updates `FindFavoredOnLinkPrefix()` to exclude discovered
on-link prefixes with preferred lifetimes under 30 minutes.
2024-04-29 09:11:27 -07:00
Li Cao 93f3113764 [link-metrics] add cli command to show link metrics manager state (#10046) 2024-04-25 08:31:18 -07:00
Li Cao b6a1dc8fe8 [tests] enhance expect test for link metrics manager feature (#10035)
This commit enhances the expect test against link metrics manager
feature to ensure that the feature can be continuously turned on or
off and work well. Because the feature will be controlled by the
feature flag in ot-br-posix.
2024-04-17 12:56:44 -07:00
Abtin Keshavarzian e3f97e2362 [netdata-publisher] distinguish SRP/DNS unicast entries (#9937)
This commit refines the `NetworkData::Publisher` to differentiate
between DNS/SRP unicast entries based on whether the address
information resides in service data (part of service TLV) or server
data (part of server sub-TLV).

Additionally, if another BR adds a service data unicast entry,
`Publisher` will zero out the desired count for server data unicast
entries, effectively removing any previously published server data
unicast entries.

The `test_netdata_publisher` has been updated to validate all the
newly added behaviors.
2024-04-05 09:30:26 -07:00
Handa Wang 843db1e82d [srp-server] retry other ports when failing to prepareSocket (#9981)
Unicast SRP dataset uses a ephemeral UDP port which could be taken by
another process. Currently SRP server creates the socket at the port
after the server is added into netdata. However, at that moment the
port may not be available on the platform so it may fail to create the
socket and start the server.

This commit adds the logic to restart the enabling process with
another port candidate if SRP server fails to create the socket.
2024-04-03 10:51:50 -07:00
Martin Zimmermann 4db6520d17 [channel-manager] add local csl channel selection on SSED (#9641)
This commit enables channel manager on SSED, together with channel monitor,
auto-selecting a better CSL channel for the link between child and its parent.

It also fixes tracking of CcaSuccessRate on CslChannel and adds toranj tests
for auto-channel selection and thread_cert test for autocsl-channel selection.
2024-03-25 14:06:29 -07:00
Przemysław Bida 3ae275f1ac [simulation] add simulation tests framework for tcat (#9724)
This commit adds simulation framework for tcat based on posix udp
sockets.
2024-03-22 10:30:59 -07:00
Jonathan Hui 148fa47bde [thread-cert] use unittest assert methods (#9936) 2024-03-15 11:11:51 -07:00
Abtin Keshavarzian 4c34a0e4a4 [test] enhance test_netdata_publisher robustness (#9932)
Updates validation logic after published route entry replacement to
prevent occasional failures due to a race condition. This increases
test stability.
2024-03-14 13:43:19 -07:00
Jonathan Hui 542be0f798 [thread-cert] use ROUTER_STARTUP_DELAY in test_detach (#9933) 2024-03-14 13:02:04 -07:00
Yakun Xu 3ebc3d3a06 [simulation] allow specify local host (#9925)
This commit adds a argument `-L`/`--local-host` to simulation platform
to specify the source IP address for packets simulating 15.4
frames. This allows the simulation packets being transmitted over
different network interfaces, so that the simulation can run on
different hosts.

This can be used to enable multiple emulation devices(e.g. Android
Virtual Device) communicating to each other over emulated Thread
radio.

The argument accepts either an IPv4 address or a network interface
name. In the latter case, the first found IPv4 address on that
interface will be used will be used.
2024-03-13 11:42:53 -07:00