Skip to content

Commit

Permalink
pimd: Indicating the rp in the msdp sa message
Browse files Browse the repository at this point in the history
Indicating the configured PIM Rendezvous Point (RP) in the MSDP SA
message.

Signed-off-by: Adriano Marto Reis <[email protected]>
  • Loading branch information
adrianomarto committed Sep 30, 2023
1 parent 3651803 commit c48e5f1
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
10 changes: 10 additions & 0 deletions pimd/pim_msdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,8 @@ void pim_msdp_sa_ref(struct pim_instance *pim, struct pim_msdp_peer *mp,
pim_sgaddr *sg, struct in_addr rp)
{
struct pim_msdp_sa *sa;
struct rp_info *rp_info;
struct prefix grp;

sa = pim_msdp_sa_add(pim, sg, rp);
if (!sa) {
Expand Down Expand Up @@ -406,6 +408,14 @@ void pim_msdp_sa_ref(struct pim_instance *pim, struct pim_msdp_peer *mp,
sa->sg_str);
}
/* send an immediate SA update to peers */
pim_addr_to_prefix(&grp, sa->sg.grp);
rp_info = pim_rp_find_match_group(pim, &grp);
if (rp_info) {
sa->rp = rp_info->rp.rpf_addr;
} else
{
sa->rp = pim->msdp.originator_id;
}
sa->rp = pim->msdp.originator_id;
pim_msdp_pkt_sa_tx_one(sa);
}
Expand Down
18 changes: 15 additions & 3 deletions pimd/pim_msdp_packet.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@

#include "pimd.h"
#include "pim_instance.h"
#include "pim_rp.h"
#include "pim_str.h"
#include "pim_util.h"
#include "pim_errors.h"

#include "pim_msdp.h"
Expand Down Expand Up @@ -387,6 +389,9 @@ static void pim_msdp_pkt_sa_gen(struct pim_instance *pim,
{
struct listnode *sanode;
struct pim_msdp_sa *sa;
struct rp_info *rp_info;
struct prefix group_all;
struct in_addr rp;
int sa_count;
int local_cnt = pim->msdp.local_cnt;

Expand All @@ -395,8 +400,15 @@ static void pim_msdp_pkt_sa_gen(struct pim_instance *pim,
zlog_debug(" sa gen %d", local_cnt);
}

local_cnt = pim_msdp_pkt_sa_fill_hdr(pim, local_cnt,
pim->msdp.originator_id);
rp = pim->msdp.originator_id;
if (pim_get_all_mcast_group(&group_all)) {
rp_info = pim_rp_find_match_group(pim, &group_all);
if (rp_info) {
rp = rp_info->rp.rpf_addr;
}
}

local_cnt = pim_msdp_pkt_sa_fill_hdr(pim, local_cnt, rp);

for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) {
if (!(sa->flags & PIM_MSDP_SAF_LOCAL)) {
Expand All @@ -418,7 +430,7 @@ static void pim_msdp_pkt_sa_gen(struct pim_instance *pim,
local_cnt);
}
local_cnt = pim_msdp_pkt_sa_fill_hdr(
pim, local_cnt, pim->msdp.originator_id);
pim, local_cnt, rp);
}
}

Expand Down

0 comments on commit c48e5f1

Please sign in to comment.