summaryrefslogtreecommitdiff
path: root/pimd/pim_upstream.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_upstream.c')
-rw-r--r--pimd/pim_upstream.c65
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))