diff options
Diffstat (limited to 'pimd/pim_bsr_rpdb.c')
| -rw-r--r-- | pimd/pim_bsr_rpdb.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/pimd/pim_bsr_rpdb.c b/pimd/pim_bsr_rpdb.c index 860009312d..03ceabd733 100644 --- a/pimd/pim_bsr_rpdb.c +++ b/pimd/pim_bsr_rpdb.c @@ -455,6 +455,8 @@ int pim_crp_process(struct interface *ifp, pim_sgaddr *src_dst, uint8_t *buf, struct pim_interface *pim_ifp = NULL; struct pim_instance *pim; struct bsm_scope *scope; + size_t ngroups; + pim_addr rpaddr = {}; pim_ifp = ifp->info; if (!pim_ifp) { @@ -505,20 +507,19 @@ int pim_crp_process(struct interface *ifp, pim_sgaddr *src_dst, uint8_t *buf, /* ignore trailing data */ (void)buf; - size_t ngroups = crp_hdr->prefix_cnt; + ngroups = crp_hdr->prefix_cnt; + rpaddr = crp_hdr->rp_addr.addr; if (remain < ngroups * sizeof(struct pim_encoded_group_ipv4)) { if (PIM_DEBUG_BSM) zlog_debug("truncated Candidate-RP advertisement for RP %pPA from %pPA (too short for %zu groups)", - (pim_addr *)&crp_hdr->rp_addr.addr, - &src_dst->src, ngroups); + &rpaddr, &src_dst->src, ngroups); return -1; } if (PIM_DEBUG_BSM) zlog_debug("Candidate-RP: %pPA, prio=%u (from %pPA, %zu groups)", - (pim_addr *)&crp_hdr->rp_addr.addr, crp_hdr->rp_prio, - &src_dst->src, ngroups); + (pim_addr *)&rpaddr, crp_hdr->rp_prio, &src_dst->src, ngroups); struct bsr_crp_rp *rp, ref; @@ -529,16 +530,14 @@ int pim_crp_process(struct interface *ifp, pim_sgaddr *src_dst, uint8_t *buf, if (!rp) { if (bsr_crp_rps_count(scope->ebsr_rps) >= bsr_max_rps) { zlog_err("BSR: number of tracked Candidate RPs (%zu) exceeds DoS-protection limit (%zu), dropping advertisement for RP %pPA (packet source %pPA)", - bsr_crp_rps_count(scope->ebsr_rps), - bsr_max_rps, (pim_addr *)&crp_hdr->rp_addr.addr, - &src_dst->src); + bsr_crp_rps_count(scope->ebsr_rps), bsr_max_rps, + (pim_addr *)&rpaddr, &src_dst->src); return -1; } if (PIM_DEBUG_BSM) zlog_debug("new Candidate-RP: %pPA (from %pPA)", - (pim_addr *)&crp_hdr->rp_addr.addr, - &src_dst->src); + (pim_addr *)&rpaddr, &src_dst->src); rp = XCALLOC(MTYPE_PIM_BSR_CRP, sizeof(*rp)); rp->scope = scope; |
