diff options
author | Isak Westin <isak.westin@loytec.com> | 2022-09-29 13:03:41 +0200 |
---|---|---|
committer | Brian Gix <brian.gix@intel.com> | 2022-10-03 14:19:19 -0700 |
commit | 926d16db8ae4bb5c40266be5bd6b10023d932c0d (patch) | |
tree | e165fc5ef7a8f0bdb563bad8dd0673d93bb74d75 /mesh | |
parent | 25a31f5a930e0bd724cc55b0595b082a732ccd79 (diff) | |
download | bluez-926d16db8ae4bb5c40266be5bd6b10023d932c0d.tar.gz |
mesh: Ignore Secure Network Beacon from subnet
If this node is a member of a primary subnet and receives a Secure Network
beacon on a secondary subnet with an IV Index greater than the last known
IV Index of the primary subnet, the Secure Network beacon shall be ignored.
See MshPRFv1.0.1 section 3.10.5.
Diffstat (limited to 'mesh')
-rw-r--r-- | mesh/net.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/mesh/net.c b/mesh/net.c index 7fec98531..dc3d1fd80 100644 --- a/mesh/net.c +++ b/mesh/net.c @@ -2708,7 +2708,7 @@ static void process_beacon(void *net_ptr, void *user_data) struct net_beacon_data *beacon_data = user_data; uint32_t ivi; bool ivu, kr, local_kr; - struct mesh_subnet *subnet; + struct mesh_subnet *subnet, *primary_subnet; ivi = beacon_data->ivi; @@ -2723,6 +2723,17 @@ static void process_beacon(void *net_ptr, void *user_data) if (!subnet) return; + /* + * @MshPRFv1.0.1 section 3.10.5: IV Update procedure + * If this node is a member of a primary subnet and receives a Secure + * Network beacon on a secondary subnet with an IV Index greater than + * the last known IV Index of the primary subnet, the Secure Network + * beacon shall be ignored. + */ + primary_subnet = get_primary_subnet(net); + if (primary_subnet && subnet != primary_subnet && ivi > net->iv_index) + return; + /* Get IVU and KR boolean bits from beacon */ ivu = beacon_data->ivu; kr = beacon_data->kr; |