mesh: Ignore Secure Network Beacon from subnet
authorIsak Westin <isak.westin@loytec.com>
Thu, 29 Sep 2022 11:03:41 +0000 (13:03 +0200)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 15 May 2023 09:25:55 +0000 (14:55 +0530)
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.

Signed-off-by: Manika Shrivastava <manika.sh@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
mesh/net.c

index faa7aa9..ca6116f 100644 (file)
@@ -2706,7 +2706,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;
 
@@ -2721,6 +2721,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;