The initial implementation of RPL check for Subnet Bridge wasn't fully correct. It decides whether to relay or not a PDU based on RPL of only received messages. However, the spec section 3.9.8 says: ``` In addition, a Subnet Bridge node shall implement replay protection for all Access and Transport Control messages that are sent to bridged subnets. A Subnet Bridge node shall maintain the most recent IVISeq value for each source address authorized to send messages to bridged subnets. Messages received by the Subnet Bridge node with the IVISeq value less than or equal to the last stored value from that source address shall be discarded immediately upon reception. When a message is retransmitted to a bridged subnet, the stored IVISeq value shall be updated. In this way, bridged subnets are protected against replay attacks from other subnets. ``` This was noticed with MESH/NODE/SBR/NET/BV-02-C test. It passes when PTS misses the message at step 3 and 4, and fails when PTS manages to receive the message. This commit fixes the wrong behavior by removing argument for `bt_mesh_rpl_check` function making store a new message and bypassing `local_match` check in case of Subnet Bridge node. Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no> |
||
|---|---|---|
| .. | ||
| src | ||
| CMakeLists.txt | ||
| prj.conf | ||
| testcase.yaml | ||