diff options
Diffstat (limited to 'pimd/pim_upstream.c')
| -rw-r--r-- | pimd/pim_upstream.c | 65 |
1 files changed, 23 insertions, 42 deletions
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index ef356213e6..800ec9c45c 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -101,18 +101,15 @@ static void pim_upstream_find_new_children(struct pim_instance *pim, { struct pim_upstream *child; - if ((up->sg.src.s_addr != INADDR_ANY) - && (up->sg.grp.s_addr != INADDR_ANY)) + if (!pim_addr_is_any(up->sg.src) && !pim_addr_is_any(up->sg.grp)) return; - if ((up->sg.src.s_addr == INADDR_ANY) - && (up->sg.grp.s_addr == INADDR_ANY)) + if (pim_addr_is_any(up->sg.src) && pim_addr_is_any(up->sg.grp)) return; frr_each (rb_pim_upstream, &pim->upstream_head, child) { - if ((up->sg.grp.s_addr != INADDR_ANY) - && (child->sg.grp.s_addr == up->sg.grp.s_addr) - && (child != up)) { + if (!pim_addr_is_any(up->sg.grp) && + !pim_addr_cmp(child->sg.grp, up->sg.grp) && (child != up)) { child->parent = up; listnode_add_sort(up->sources, child); if (PIM_UPSTREAM_FLAG_TEST_USE_RPT(child->flags)) @@ -135,9 +132,9 @@ static struct pim_upstream *pim_upstream_find_parent(struct pim_instance *pim, struct pim_upstream *up = NULL; // (S,G) - if ((child->sg.src.s_addr != INADDR_ANY) - && (child->sg.grp.s_addr != INADDR_ANY)) { - any.src.s_addr = INADDR_ANY; + if (!pim_addr_is_any(child->sg.src) && + !pim_addr_is_any(child->sg.grp)) { + any.src = PIMADDR_ANY; up = pim_upstream_find(pim, &any); if (up) @@ -217,7 +214,7 @@ struct pim_upstream *pim_upstream_del(struct pim_instance *pim, if (up->join_state == PIM_UPSTREAM_JOINED) { pim_jp_agg_single_upstream_send(&up->rpf, up, 0); - if (up->sg.src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(up->sg.src)) { /* if a (*, G) entry in the joined state is being * deleted we * need to notify MSDP */ @@ -229,7 +226,7 @@ struct pim_upstream *pim_upstream_del(struct pim_instance *pim, pim_jp_agg_upstream_verification(up, false); up->rpf.source_nexthop.interface = NULL; - if (up->sg.src.s_addr != INADDR_ANY) { + if (!pim_addr_is_any(up->sg.src)) { if (pim->upstream_sg_wheel) wheel_remove_item(pim->upstream_sg_wheel, up); notify_msdp = true; @@ -656,7 +653,7 @@ void pim_upstream_update_use_rpt(struct pim_upstream *up, bool old_use_rpt; bool new_use_rpt; - if (up->sg.src.s_addr == INADDR_ANY) + if (pim_addr_is_any(up->sg.src)) return; old_use_rpt = !!PIM_UPSTREAM_FLAG_TEST_USE_RPT(up->flags); @@ -704,7 +701,7 @@ void pim_upstream_reeval_use_rpt(struct pim_instance *pim) struct pim_upstream *up; frr_each (rb_pim_upstream, &pim->upstream_head, up) { - if (up->sg.src.s_addr == INADDR_ANY) + if (pim_addr_is_any(up->sg.src)) continue; pim_upstream_update_use_rpt(up, true /*update_mroute*/); @@ -775,7 +772,7 @@ void pim_upstream_switch(struct pim_instance *pim, struct pim_upstream *up, * RFC 4601 Sec 4.5.7: * JoinDesired(S,G) -> False, set SPTbit to false. */ - if (up->sg.src.s_addr != INADDR_ANY) + if (!pim_addr_is_any(up->sg.src)) up->sptbit = PIM_UPSTREAM_SPTBIT_FALSE; if (old_state == PIM_UPSTREAM_JOINED) @@ -827,19 +824,7 @@ void pim_upstream_switch(struct pim_instance *pim, struct pim_upstream *up, int pim_upstream_compare(const struct pim_upstream *up1, const struct pim_upstream *up2) { - if (ntohl(up1->sg.grp.s_addr) < ntohl(up2->sg.grp.s_addr)) - return -1; - - if (ntohl(up1->sg.grp.s_addr) > ntohl(up2->sg.grp.s_addr)) - return 1; - - if (ntohl(up1->sg.src.s_addr) < ntohl(up2->sg.src.s_addr)) - return -1; - - if (ntohl(up1->sg.src.s_addr) > ntohl(up2->sg.src.s_addr)) - return 1; - - return 0; + return pim_sgaddr_cmp(up1->sg, up2->sg); } void pim_upstream_fill_static_iif(struct pim_upstream *up, @@ -873,7 +858,7 @@ static struct pim_upstream *pim_upstream_new(struct pim_instance *pim, up->pim = pim; up->sg = *sg; - pim_str_sg_set(sg, up->sg_str); + snprintfrr(up->sg_str, sizeof(up->sg_str), "%pSG", sg); if (ch) ch->upstream = up; @@ -889,7 +874,7 @@ static struct pim_upstream *pim_upstream_new(struct pim_instance *pim, } up->parent = pim_upstream_find_parent(pim, up); - if (up->sg.src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(up->sg.src)) { up->sources = list_new(); up->sources->cmp = (int (*)(void *, void *))pim_upstream_compare; @@ -923,7 +908,7 @@ static struct pim_upstream *pim_upstream_new(struct pim_instance *pim, up->ifchannels = list_new(); up->ifchannels->cmp = (int (*)(void *, void *))pim_ifchannel_compare; - if (up->sg.src.s_addr != INADDR_ANY) { + if (!pim_addr_is_any(up->sg.src)) { wheel_add_item(pim->upstream_sg_wheel, up); /* Inherit the DF role from the parent (*, G) entry for @@ -1092,8 +1077,8 @@ struct pim_upstream *pim_upstream_add(struct pim_instance *pim, pim_sgaddr *sg, up->rpf.source_nexthop.interface->name : "Unknown" , found, up->ref_count); else - zlog_debug("%s(%s): (%s) failure to create", __func__, - name, pim_str_sg_dump(sg)); + zlog_debug("%s(%s): (%pSG) failure to create", __func__, + name, sg); } return up; @@ -1225,7 +1210,7 @@ bool pim_upstream_evaluate_join_desired(struct pim_instance *pim, empty_imm_oil = pim_upstream_empty_immediate_olist(pim, up); /* (*,G) */ - if (up->sg.src.s_addr == INADDR_ANY) + if (pim_addr_is_any(up->sg.src)) return !empty_imm_oil; /* (S,G) */ @@ -1961,7 +1946,7 @@ unsigned int pim_upstream_hash_key(const void *arg) { const struct pim_upstream *up = arg; - return jhash_2words(up->sg.src.s_addr, up->sg.grp.s_addr, 0); + return pim_sgaddr_hash(up->sg, 0); } void pim_upstream_terminate(struct pim_instance *pim) @@ -1984,11 +1969,7 @@ bool pim_upstream_equal(const void *arg1, const void *arg2) const struct pim_upstream *up1 = (const struct pim_upstream *)arg1; const struct pim_upstream *up2 = (const struct pim_upstream *)arg2; - if ((up1->sg.grp.s_addr == up2->sg.grp.s_addr) - && (up1->sg.src.s_addr == up2->sg.src.s_addr)) - return true; - - return false; + return !pim_sgaddr_cmp(up1->sg, up2->sg); } /* rfc4601:section-4.2:"Data Packet Forwarding Rules" defines @@ -2131,7 +2112,7 @@ void pim_upstream_add_lhr_star_pimreg(struct pim_instance *pim) struct pim_upstream *up; frr_each (rb_pim_upstream, &pim->upstream_head, up) { - if (up->sg.src.s_addr != INADDR_ANY) + if (!pim_addr_is_any(up->sg.src)) continue; if (!PIM_UPSTREAM_FLAG_TEST_CAN_BE_LHR(up->flags)) @@ -2178,7 +2159,7 @@ void pim_upstream_remove_lhr_star_pimreg(struct pim_instance *pim, g.prefixlen = IPV4_MAX_BITLEN; frr_each (rb_pim_upstream, &pim->upstream_head, up) { - if (up->sg.src.s_addr != INADDR_ANY) + if (!pim_addr_is_any(up->sg.src)) continue; if (!PIM_UPSTREAM_FLAG_TEST_CAN_BE_LHR(up->flags)) |
