diff options
Diffstat (limited to 'pimd/pim_rp.c')
| -rw-r--r-- | pimd/pim_rp.c | 90 |
1 files changed, 33 insertions, 57 deletions
diff --git a/pimd/pim_rp.c b/pimd/pim_rp.c index 13c63ca3f0..00a1e1b58c 100644 --- a/pimd/pim_rp.c +++ b/pimd/pim_rp.c @@ -77,26 +77,21 @@ int pim_rp_list_cmp(void *v1, void *v2) { struct rp_info *rp1 = (struct rp_info *)v1; struct rp_info *rp2 = (struct rp_info *)v2; + int ret; /* * Sort by RP IP address */ - if (rp1->rp.rpf_addr.u.prefix4.s_addr - < rp2->rp.rpf_addr.u.prefix4.s_addr) - return -1; - - if (rp1->rp.rpf_addr.u.prefix4.s_addr - > rp2->rp.rpf_addr.u.prefix4.s_addr) - return 1; + ret = prefix_cmp(&rp1->rp.rpf_addr, &rp2->rp.rpf_addr); + if (ret) + return ret; /* * Sort by group IP address */ - if (rp1->group.u.prefix4.s_addr < rp2->group.u.prefix4.s_addr) - return -1; - - if (rp1->group.u.prefix4.s_addr > rp2->group.u.prefix4.s_addr) - return 1; + ret = prefix_cmp(&rp1->group, &rp2->group); + if (ret) + return ret; return 0; } @@ -116,13 +111,12 @@ void pim_rp_init(struct pim_instance *pim) if (!pim_get_all_mcast_group(&rp_info->group)) { flog_err(EC_LIB_DEVELOPMENT, - "Unable to convert 224.0.0.0/4 to prefix"); + "Unable to convert all-multicast prefix"); list_delete(&pim->rp_list); route_table_finish(pim->rp_table); XFREE(MTYPE_PIM_RP, rp_info); return; } - rp_info->group.family = AF_INET; pim_addr_to_prefix(&rp_info->rp.rpf_addr, PIMADDR_ANY); listnode_add(pim->rp_list, rp_info); @@ -130,9 +124,9 @@ void pim_rp_init(struct pim_instance *pim) rn = route_node_get(pim->rp_table, &rp_info->group); rn->info = rp_info; if (PIM_DEBUG_PIM_TRACE) - zlog_debug( - "Allocated: %p for rp_info: %p(224.0.0.0/4) Lock: %d", - rn, rp_info, route_node_get_lock_count(rn)); + zlog_debug("Allocated: %p for rp_info: %p(%pFX) Lock: %d", rn, + rp_info, &rp_info->group, + route_node_get_lock_count(rn)); } void pim_rp_free(struct pim_instance *pim) @@ -375,7 +369,7 @@ void pim_upstream_update(struct pim_instance *pim, struct pim_upstream *up) up->sg.grp); if (PIM_DEBUG_PIM_TRACE) - zlog_debug("%s: pim upstream update for old upstream %pI4", + zlog_debug("%s: pim upstream update for old upstream %pPA", __func__, &old_upstream_addr); if (!pim_addr_cmp(old_upstream_addr, new_upstream_addr)) @@ -932,9 +926,7 @@ void pim_rp_setup(struct pim_instance *pim) if (pim_rpf_addr_is_inaddr_any(&rp_info->rp)) continue; - nht_p.family = AF_INET; - nht_p.prefixlen = IPV4_MAX_BITLEN; - nht_p.u.prefix4 = rp_info->rp.rpf_addr.u.prefix4; + nht_p = rp_info->rp.rpf_addr; pim_find_or_track_nexthop(pim, &nht_p, NULL, rp_info, NULL); if (!pim_ecmp_nexthop_lookup(pim, &rp_info->rp.source_nexthop, @@ -1159,7 +1151,6 @@ void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, bool uj) struct rp_info *prev_rp_info = NULL; struct listnode *node; char source[7]; - char buf[PREFIX_STRLEN]; json_object *json = NULL; json_object *json_rp_rows = NULL; @@ -1171,8 +1162,6 @@ void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, bool uj) vty_out(vty, "RP address group/prefix-list OIF I am RP Source\n"); for (ALL_LIST_ELEMENTS_RO(pim->rp_list, node, rp_info)) { - char buf[48]; - if (pim_rpf_addr_is_inaddr_any(&rp_info->rp)) continue; @@ -1188,15 +1177,11 @@ void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, bool uj) * entry for the previous RP */ if (prev_rp_info && - prev_rp_info->rp.rpf_addr.u.prefix4.s_addr != - rp_info->rp.rpf_addr.u.prefix4.s_addr) { - json_object_object_add( - json, - inet_ntop(AF_INET, - &prev_rp_info->rp.rpf_addr.u - .prefix4, - buf, sizeof(buf)), - json_rp_rows); + prefix_cmp(&prev_rp_info->rp.rpf_addr, + &rp_info->rp.rpf_addr)) { + json_object_object_addf( + json, json_rp_rows, "%pFXh", + &prev_rp_info->rp.rpf_addr); json_rp_rows = NULL; } @@ -1204,9 +1189,8 @@ void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, bool uj) json_rp_rows = json_object_new_array(); json_row = json_object_new_object(); - json_object_string_addf( - json_row, "rpAddress", "%pI4", - &rp_info->rp.rpf_addr.u.prefix4); + json_object_string_addf(json_row, "rpAddress", "%pFXh", + &rp_info->rp.rpf_addr); if (rp_info->rp.source_nexthop.interface) json_object_string_add( json_row, "outboundInterface", @@ -1233,10 +1217,7 @@ void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, bool uj) json_object_array_add(json_rp_rows, json_row); } else { - vty_out(vty, "%-15s ", - inet_ntop(AF_INET, - &rp_info->rp.rpf_addr.u.prefix4, buf, - sizeof(buf))); + vty_out(vty, "%-15pFXh ", &rp_info->rp.rpf_addr); if (rp_info->plist) vty_out(vty, "%-18s ", rp_info->plist); @@ -1262,12 +1243,8 @@ void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, bool uj) if (uj) { if (prev_rp_info && json_rp_rows) - json_object_object_add( - json, - inet_ntop(AF_INET, - &prev_rp_info->rp.rpf_addr.u.prefix4, - buf, sizeof(buf)), - json_rp_rows); + json_object_object_addf(json, json_rp_rows, "%pFXh", + &prev_rp_info->rp.rpf_addr); vty_json(vty, json); } @@ -1285,17 +1262,20 @@ void pim_resolve_rp_nh(struct pim_instance *pim, struct pim_neighbor *nbr) if (pim_rpf_addr_is_inaddr_any(&rp_info->rp)) continue; - nht_p.family = AF_INET; - nht_p.prefixlen = IPV4_MAX_BITLEN; - nht_p.u.prefix4 = rp_info->rp.rpf_addr.u.prefix4; + nht_p = rp_info->rp.rpf_addr; memset(&pnc, 0, sizeof(struct pim_nexthop_cache)); if (!pim_find_or_track_nexthop(pim, &nht_p, NULL, rp_info, &pnc)) continue; for (nh_node = pnc.nexthop; nh_node; nh_node = nh_node->next) { - if (nh_node->gate.ipv4.s_addr != INADDR_ANY) +#if PIM_IPV == 4 + if (!pim_addr_is_any(nh_node->gate.ipv4)) + continue; +#else + if (!pim_addr_is_any(nh_node->gate.ipv6)) continue; +#endif struct interface *ifp1 = if_lookup_by_index( nh_node->ifindex, pim->vrf->vrf_id); @@ -1308,15 +1288,11 @@ void pim_resolve_rp_nh(struct pim_instance *pim, struct pim_neighbor *nbr) #else nh_node->gate.ipv6 = nbr->source_addr; #endif - if (PIM_DEBUG_PIM_NHT_RP) { - char str[PREFIX_STRLEN]; - pim_addr_dump("<nht_addr?>", &nht_p, str, - sizeof(str)); + if (PIM_DEBUG_PIM_NHT_RP) zlog_debug( - "%s: addr %s new nexthop addr %pPAs interface %s", - __func__, str, &nbr->source_addr, + "%s: addr %pFXh new nexthop addr %pPAs interface %s", + __func__, &nht_p, &nbr->source_addr, ifp1->name); - } } } } |
