]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd:Skip RPF check for SA message received from the MSDP mesh group peers
authorusrivastava-nvidia <usrivastava@nvidia.com>
Fri, 7 Mar 2025 06:05:52 +0000 (06:05 +0000)
committerusrivastava-nvidia <usrivastava@nvidia.com>
Thu, 20 Mar 2025 16:18:02 +0000 (16:18 +0000)
Signed-off-by: Utkarsh Srivastava <usrivastava@nvidia.com>
pimd/pim_msdp_packet.c

index 8c821cb5e54833d93724dbd48bda236c5e32edb8..698add42bea35524057f128ada2f5b5c86dcc248 100644 (file)
@@ -618,6 +618,21 @@ static void pim_msdp_pkt_sa_rx(struct pim_msdp_peer *mp, int len)
        int entry_cnt;
        int i;
        struct in_addr rp; /* Last RP address associated with this SA */
+       struct pim_msdp_mg *mg;
+       struct pim_instance *pim = mp->pim;
+       bool is_mesh_group = false;
+
+       if (mp->flags & PIM_MSDP_PEERF_IN_GROUP) {
+               /* Check if source is also in the same mesh group */
+               SLIST_FOREACH (mg, &pim->msdp.mglist, mg_entry) {
+                       if (strcmp(mg->mesh_group_name, mp->mesh_group_name) == 0) {
+                               if (mg->src_ip.s_addr == mp->local.s_addr) {
+                                       is_mesh_group = true;
+                                       break;
+                               }
+                       }
+               }
+       }
 
        mp->sa_rx_cnt++;
 
@@ -645,7 +660,7 @@ static void pim_msdp_pkt_sa_rx(struct pim_msdp_peer *mp, int len)
 
        pim_msdp_peer_pkt_rxed(mp);
 
-       if (!pim_msdp_peer_rpf_check(mp, rp)) {
+       if (!is_mesh_group && !pim_msdp_peer_rpf_check(mp, rp)) {
                /* if peer-RPF check fails don't process the packet any further
                 */
                if (PIM_DEBUG_MSDP_PACKETS) {