Skip to content

Commit eab86cd

Browse files
authored
Merge pull request FRRouting#18330 from usrivastava-nvidia/master
pimd: Skip RPF check for SA message from mesh group peer
2 parents 37fd451 + eb4c161 commit eab86cd

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

pimd/pim_msdp.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,10 +1028,11 @@ struct pim_msdp_peer *pim_msdp_peer_add(struct pim_instance *pim,
10281028
mp->peer = *peer;
10291029
pim_inet4_dump("<peer?>", mp->peer, mp->key_str, sizeof(mp->key_str));
10301030
mp->local = *local;
1031-
if (mesh_group_name)
1031+
if (mesh_group_name) {
10321032
mp->mesh_group_name =
10331033
XSTRDUP(MTYPE_PIM_MSDP_MG_NAME, mesh_group_name);
1034-
1034+
SET_FLAG(mp->flags, PIM_MSDP_PEERF_IN_GROUP);
1035+
}
10351036
mp->state = PIM_MSDP_INACTIVE;
10361037
mp->fd = -1;
10371038
mp->auth_listen_sock = -1;

pimd/pim_msdp_packet.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,21 @@ static void pim_msdp_pkt_sa_rx(struct pim_msdp_peer *mp, int len)
618618
int entry_cnt;
619619
int i;
620620
struct in_addr rp; /* Last RP address associated with this SA */
621+
struct pim_msdp_mg *mg;
622+
struct pim_instance *pim = mp->pim;
623+
bool is_mesh_group = false;
624+
625+
if (mp->flags & PIM_MSDP_PEERF_IN_GROUP) {
626+
/* Check if source is also in the same mesh group */
627+
SLIST_FOREACH (mg, &pim->msdp.mglist, mg_entry) {
628+
if (strcmp(mg->mesh_group_name, mp->mesh_group_name) == 0) {
629+
if (mg->src_ip.s_addr == mp->local.s_addr) {
630+
is_mesh_group = true;
631+
break;
632+
}
633+
}
634+
}
635+
}
621636

622637
mp->sa_rx_cnt++;
623638

@@ -645,7 +660,7 @@ static void pim_msdp_pkt_sa_rx(struct pim_msdp_peer *mp, int len)
645660

646661
pim_msdp_peer_pkt_rxed(mp);
647662

648-
if (!pim_msdp_peer_rpf_check(mp, rp)) {
663+
if (!is_mesh_group && !pim_msdp_peer_rpf_check(mp, rp)) {
649664
/* if peer-RPF check fails don't process the packet any further
650665
*/
651666
if (PIM_DEBUG_MSDP_PACKETS) {

0 commit comments

Comments
 (0)