Commit Graph

231 Commits

Author SHA1 Message Date
Simon Lin 51f9d2cb9d [tests] ignore unknown TLV (#5232)
This commit ignores unknown TLVs when parsing a message and continues
to parse the rest parts of the message.

An unknown TLV can cause the simulator to drop the whole packet, which
could lead to packet parsing issues.  For example, if a Child ID
Response message is dropped, the dissector will fail to add the Short
Address and Extended Address to the Device Descriptors, causing
subsequent secure packets unable to be decrypted.
2020-07-14 20:40:34 -07:00
Rongli Sun 32a3bef6dd [test] fix python formatting in v1_2_* tests (#5225)
In some test scripts, %s and format() are used by mistake.
2020-07-13 08:18:51 -07:00
Jonathan Hui 6e80c8b058 [tests] add test for prefix without on-mesh flag set (#5116) 2020-06-23 18:01:20 -07:00
Jonathan Hui 15c3463cec [tests] fix prefix configuration in 5_6_05 and 5_6_06 (#5116)
Prefix 3 should be configured as on-mesh.
2020-06-23 18:01:20 -07:00
Yakun Xu 8248c3d9df [posix] use real time signal for microsecond timer (#5122) 2020-06-19 16:12:55 -07:00
Simon Lin 44f1a8bf29 [tests] use longer timeouts for simulation tests (#5094)
* use longer duration for pexpect and socket
* use 10s timeouts
2020-06-15 18:11:34 -07:00
Simon Lin 8e124e6fac [cert] capitalize python class constants (#5080)
According to PEP8, constants should be written in all capital letters.

This commit capitalizes these constants:
- thread_cert.TestCase.topology
- thread_cert.TestCase.support_ncp
2020-06-10 18:14:59 -07:00
Rongli Sun b51d9100e6 [dua] support to specify iid for domain unicast address (#4900) 2020-06-09 10:38:13 -07:00
Jintao Lin 201b7b1a3d [mac] move auxiliary frame counter from Mac to SubMac (#4976)
In Thread 1.2, it is possible to receive an IEEE 802.15.4-2015
packet. Per specification, receiver should acknowledge this packet
with an IEEE 802.15.4-2015 ACK(Enh-ACK). This Enh-ACK can include
header IE with it and requires security enabled bit in FCF be set to
true. It is impractical for the host to generate the Enh-ACK and send
to RCP for transmission within AIFS time(192us). So RCP should prepare
the Enh-ACK by itself, which requires it to fill in the frame counter
and do the encryption/authentication.

This commit tries to address the need of filling auxiliary frame
counter in RCP by including the following changes:

- Move frame counter related functions from MAC layer to SubMac layer,
  which is mirrored in RCP.

- Set mMacFrameCounter to RCP using newly added spinel properties.

- RCP reports last used frame counter to host in TxDone and RxDone.

- Add a simulation test for reset verification.
2020-06-03 22:09:16 -07:00
Yakun Xu 6de8d778b7 [tests] skip running expected fail tests (#5038)
This commit skips running expected fail tests so that it will be easier
to find real failures and saves some time.
2020-06-02 21:32:00 -07:00
Yakun Xu f8f75d6d05 [posix] clean up for radio url (#5027)
* fix max-power-table documentation
* rename `baudrate` to `uart-baudrate`, `arg` to `forkpty-arg`
* update command line enumeration
* update README
* remove trailing argument from node.py
2020-06-01 08:13:46 -07:00
Jiacheng Guo 115616c6bf [posix] add radio url (#4935)
Radio url provides a unified interface for users to specify the radio
peripheral device and arguments to the OpenThread core stack.
2020-05-29 17:34:29 -07:00
Yakun Xu 3bc67ee6f9 [posix] get node id from command line argument (#5000)
This simplify manually running posix virtual time mode when debugging.
2020-05-25 16:03:27 -07:00
Simon Lin 8dbc0d9605 [test] fix python issues in tests (#4960) 2020-05-19 10:31:50 -07:00
kangping 154958aab9 [tests] fix wrong whitelist filter in commissioning tests (#4933)
This commit fixes the problem that `whitelist` is not enabled in
commissioning test cases which results in false pass of `Cert_8_2_01`
and `Cert_8_2_02`.

Without this commit, `Cert_8_2_01` and `Cert_8_2_02` will fail if we
turn on `whitelist`, because we now use random extaddress for
discovery requests.
2020-05-19 10:30:11 -07:00
kangping 092eb186e1 [joiner] add validation of joiner PSKd (#4934) 2020-05-14 08:41:51 -07:00
Duda, Lukasz 2f683e6e76 [ip6] enhance handling of IPv6 fragmentation (#4940)
This commit introduces a few enhancements:

- In NCP architecture forward the IPv6 fragments instead of the full
  reassembled IPv6 packet (which in the default configuration can't be
  forwarder due to SPINEL limitations). Without this fix the
  fragmentation does not work if Thread device wants to send more than
  MTU data through the Border Router (to the IPv6 address of NCP).

- Use OPENTHREAD_CONFIG_IP6_MAX_ASSEMBLED_DATAGRAM only for the
  receiving path. For transmitting path, relay on the message buffers
  pool. This is especially important for some of the use-cases we
  have, and also reduce a need for regenerating OpenThread libraries.

- In case receiving IPv6 packet is bigger than supported
  OPENTHREAD_CONFIG_IP6_MAX_ASSEMBLED_DATAGRAM, exit before trying to
  allocate the next message buffer.
2020-05-11 15:22:18 -07:00
Li Cao 417093e247 [tests] fix key_id_mode handling and add exception handle (#4927)
This commit fixes key_id_mode handling and added exception handling
when key_id_mode is 0.

According to IEEE Std 802.15.4-2015, when Key Id Mode is 0x00:

    Key is determined implicitly from the originator and recipient(s)
    of the frame, as indicated in the frame header.

Our test scripts cannot handle such packets. If we leave key_id_mode =
0 case unhandled, we would get some exceptions that may cause
developers to think that something is wrong. However dropping packets
in this case is a normal behavior.
2020-05-07 21:33:30 -07:00
Rongli Sun 2e85801083 [dua] Domain Unicast Address generation (#4854)
This commit includes
[Y] add `OPENTHREAD_CONFIG_DUA_ENABLE` option for DUA feature
[Y] generate DUA via SLAAC
[Y] update test script to verify communication via DUA
2020-04-29 22:57:50 -07:00
Simon Lin e5069a41d5 [scripts] update cert tests to use thread_cert.TestCase (#4874)
- Update all test cases to inherit thread_cert.TestCase and update
  topologies accordingly. The topologies should all be correct because
  they are automatically generated, not hand written.

- Use default Thread version: 1.1

- Cleanup node tmp files in tmp directory according to the current
  PORT_OFFSET in setUp. This is required by
  test_reed_address_solicit_rejected.py and test_coap_observe.py since
  they define multiple test functions in one TestCase.

- Removed call to set_extaddr64 because it's not necessary and causing
  failures.
2020-04-29 10:41:04 -07:00
kangping 80285206d2 [tests] add 5_7_01 network diagnostic test cases (#4663)
This commit adds Network Diagnostic TLV parsing and 5.7.01 test case.
2020-04-28 13:37:21 -07:00
Yakun Xu be48ea648c [thread-cert] use the same mesh local prefix as Thread harness (#4089) 2020-04-24 17:24:53 -07:00
Jonathan Hui 082f7e9fdc [docs] apply prettier changes (#4881) 2020-04-24 16:22:00 -07:00
Rongli Sun 60be2be68a [mle] 1.2 MED registers MA (scope > 3) to its parent via AR TLV (#4837) 2020-04-24 10:17:55 -07:00
Simon Lin 8efa1ee4c6 [mle] REED to handle rejected ADDR_SOL.rsp (#4834)
Currently, a REED which expects to become Router soon does not send
any SVR_DATA.ntf.  This commit handles rejecting ADDR_SOL.rsp to allow
REED to send SVR_DATA.ntf after it is rejected.
2020-04-17 17:03:45 -07:00
Rongli Sun b37528645a [bbr] (Un)Subscribe AllDomainBBRs multicast address (#4795)
This commit includes:
- cache domain prefix in the Thread Network
- subscribe/unsubscribe AllDomainBBRs Multicast address
- update test to cover AllNetworkBBRs and AllDomainBBRs subscription
2020-04-14 19:36:14 -07:00
Rongli Sun 52777fb459 [bbr] support domain prefix addition and removal (#4793) 2020-04-11 22:05:04 -07:00
Rongli Sun 132df25505 [bbr] (Un)Subscribe AllNetworkBBRs Multicast address (#4755) 2020-03-29 23:13:43 -07:00
Rongli Sun 315a27bf08 [bbr] add backbone router service (#4430)
- Introduce BACKBONE_ROUTER option for Backbone Router function.
- Implement Backbone Router service registration.
  - Add basic Backbone Router service.
  - Primary Backbone Router restores its Dataset when reattached after
    short reset, increases sequence number and re-register to Leader.
  - Add configurable jitter for Backbone Router service registration.
- Add Backbone Router service test.
2020-03-26 08:54:23 -07:00
kangping a495dea4ac [tests] initialize _initialized (#4662)
This commit initializes _initialized of Node before doing
initialization. Otherwise, we will have an AttributeError in
desctructor when initialization fails.
2020-03-13 22:16:32 -07:00
Li Cao 3b15b67886 [tests] fix logic error in net_crypto.py (#4675) 2020-03-12 08:41:50 -07:00
Rongli Sun 5d12c6247f [cli] add preferrouterid command (#4647) 2020-03-09 18:33:55 -07:00
Yakun Xu 56d0e7212b [mac] add enhanced frame pending (#4334)
This commit adds enhanced frame pending feature of Thread 1.2. This
requires the platform radio driver to correctly set frame pending bit
for Data frames and MAC Data Request frames.
2020-03-09 09:08:46 -07:00
Yakun Xu 9c6df6e541 [tests] remove unused self in map_pp (#4643) 2020-03-06 20:07:48 -08:00
Jonathan Hui f88588e4b0 [tests] enhance matching pattern (#4629)
This commit enhances the way to match patterns during tests, so that
it can also support with readline enabled.
2020-03-05 09:59:17 -08:00
Eduardo Montoya 15f6808206 [cli] allow to escape separators (#4608) 2020-03-02 08:48:31 -08:00
Jonathan Hui 5b622e690e [typos] fix typos (#4613) 2020-02-28 21:45:04 -08:00
Stuart Longland 98f930c793 [coap] add support for RFC7641 (#4396)
* [coap] Add option scanning functions

In a few places in the OpenThread code-base, the following construct is
seen:

```
    otCoapOptionIterator iterator;
    otCoapOptionIteratorInit(&iterator, message);

    for (const otCoapOption *opt = otCoapOptionIteratorGetFirstOption(&iterator);
                             opt != NULL;
                             opt = otCoapOptionIteratorGetNextOption(&iterator))
    {
        if (opt->mNumber == OT_COAP_OPTION_DESIREDOPTION)
        {
            doSomethingWith(opt);
            break;
        }
    }
```

or its equivalent.  In cases where multiple options are sought, the
above is still the better approach (using a `switch` statement), but
otherwise this seems repetitive.

`otCoapOptionIteratorGetFirstOptionMatching` basically implements the
above loop, returning the first option that matches.  This same code can
also be used for testing for presence too by comparing the resultant
pointer to the `NULL` singleton.

For completeness in cases where a software developer may want to
*resume* looking for further matching options,
`otCoapOptionIteratorGetNextOptionMatching` is also provided.

* [coap] Add function for decoding Uint options

To properly implement features such as RFC7641 and RFC7959, one must be
able to decode unsigned integer options.  It seems silly to have an
encoder but not a decoder, so here is the missing piece.

Future considerations may be a `uint32_t` version since the majority of
use cases do not call for a `uint64_t`; the type was chosen since it was
the most general case.

* [coap] Reference the RFC for the Observe option.

For the sake of completeness, reference the relevant RFC in the
documentation so that developers can read up more on how it should work.

* [coap] Add mObserve flag to metadata.

When we're implementing observations, a few exceptions to the usual CoAP
conventions apply, notably:

- when we receive the initial reply, the request is _not_ finished, we
  will receive subsequent requests until we tell the server to stop.
- when we send a confirmable notification, the observing client will
  reply with an `ACK` with no further traffic: we need to differentiate
  this from an empty `ACK` to a request meaning we should expect a reply
  later.

While we could just repeatedly scan for the `Observe` option on the
request, that is wasteful in terms of processing time.  This allows us
to scan the request just once, and set a single-bit flag to save
processing later.

* [coap] Don't expect traffic after ACK to notification

If the client sends an empty `ACK` in reply to a confirmable RFC7641
notification, we will _NOT_ see further replies with additional
information.  Consider the notification as acknowledged and pass the
details back to the application.

* [coap] Pass through notifications to handler

Ensure that all notifications sent by the CoAP server are passed back to
the application's CoAP request handler.  When we receive the first one,
the request continues -- it does not finish until the server drops the
`Observe` flag or we tell the server to stop.

* [coap] Disable expiry timer once subscribed

If a request carries `Observe=0` and we receive the first reply, ignore
future time-out events as the transaction will finish only when
explicitly terminated.

* [coap] Support eager subscription cancellation

A CoAP client may signal its intention to unsubscribe from a resource by
sending a `GET` request with a token matching that of the original
request and setting the `Observe` option to the value 1.

In the event the application does this, we should pick this up and
cancel the pending transaction locally.  The handler will be notified of
this by a final call where `aError=OT_ERROR_NONE` and no message given.

* [cli] Add RFC7641 support to CLI example

As an aide to those developing code that uses RFC7641, implement an
example client and server that supports this feature.
2020-02-27 21:46:43 -08:00
Rongli Sun b339a8946b [travis] test parent selection rules (#4423)
This commit has five scenarios to test the four Mesh Impacting
Criteria and one Child Impacting Criterion (version).
2020-02-25 14:34:53 -08:00
Yakun Xu b01754cabf [mle] add enhanced keep-alive (#4325)
This commit introduces the first Thread 1.2 feature - enhanced keep
alive.

This commit also introduces the build config
OPENTHREAD_CONFIG_THREAD_VERSION to include/exclude Thread 1.2 code.
2020-02-24 21:03:19 -08:00
Yakun Xu aa62fd8f65 [cli] always output command result (#4556)
Always output command result, i.e. "Done" on success, error message
otherwise.

Factory commands also follow the same pattern. Their existing error
messages are not removed for backward compatibility consideration.
2020-02-19 11:44:42 -08:00
Simon Lin c8dff09d3a [python] remove unnecessary calls to dict.keys() (#4576) 2020-02-18 10:16:06 -08:00
Yakun Xu 33808ebfba [style] apply google python style guide (#4501)
This commit applies and enforces Google's python style for tests.
2020-02-04 10:27:50 -08:00
Rongli Sun b4b0531433 [tests] replace get_addr_rloc() by get_rloc() (#4380) 2019-12-06 08:51:23 -08:00
Rongli Sun 76f847babc [tests] add ipv6 source selection test (#4380) 2019-12-06 08:51:23 -08:00
Rongli Sun eac27c0f45 [cli] add hex string payload for udp send (#4241) 2019-10-24 10:33:08 -07:00
Li Cao 0e45ba6d77 [tests] fix the wrong port of dtls (#4244) 2019-10-15 10:18:04 -07:00
Jonathan Hui 43be2b821f [tests] require python3 and drop support for python2 (#4220) 2019-10-04 11:03:58 -07:00
Simon Lin bf2ad6d166 [posix-sim] add method route_list & route_table to Node (#4142)
This commit implements the router_list and router_table methods for
Node in simulator.

This commit also includes a simple test to verify correctness.
2019-09-20 14:38:29 +08:00
Christian Stauffer 864e3458f5 [ip6] add IPv6 fragmentation and reassembly support (#3948) 2019-08-28 10:31:55 -07:00