diff options
44 files changed, 504 insertions, 625 deletions
diff --git a/lib/prefix.h b/lib/prefix.h index f2773240d2..b3545a72b4 100644 --- a/lib/prefix.h +++ b/lib/prefix.h @@ -341,9 +341,6 @@ union prefixconstptr { prefixtype(prefixconstptr, const struct prefix_rd, rd) } TRANSPARENT_UNION; -#undef prefixtype -#undef TRANSPARENT_UNION - #ifndef INET_ADDRSTRLEN #define INET_ADDRSTRLEN 16 #endif /* INET_ADDRSTRLEN */ diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index e113c4265d..32d87b9a91 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -652,20 +652,22 @@ DEFUN (ospf_area_range, DEFUN (ospf_area_range_cost, ospf_area_range_cost_cmd, - "area <A.B.C.D|(0-4294967295)> range A.B.C.D/M cost (0-16777215)", + "area <A.B.C.D|(0-4294967295)> range A.B.C.D/M {cost (0-16777215)|substitute A.B.C.D/M}", "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Summarize routes matching address/mask (border routers only)\n" "Area range prefix\n" "User specified metric for this range\n" - "Advertised metric for this range\n") + "Advertised metric for this range\n" + "Announce area range as another prefix\n" + "Network prefix to be announced instead of range\n") { VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); int idx_ipv4_number = 1; int idx_ipv4_prefixlen = 3; - int idx_cost = 5; - struct prefix_ipv4 p; + int idx = 4; + struct prefix_ipv4 p, s; struct in_addr area_id; int format; uint32_t cost; @@ -677,8 +679,16 @@ DEFUN (ospf_area_range_cost, ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id), format); - cost = strtoul(argv[idx_cost]->arg, NULL, 10); - ospf_area_range_cost_set(ospf, area_id, &p, cost); + if (argv_find(argv, argc, "cost", &idx)) { + cost = strtoul(argv[idx + 1]->arg, NULL, 10); + ospf_area_range_cost_set(ospf, area_id, &p, cost); + } + + idx = 4; + if (argv_find(argv, argc, "substitute", &idx)) { + str2prefix_ipv4(argv[idx + 1]->arg, &s); + ospf_area_range_substitute_set(ospf, area_id, &p, &s); + } return CMD_SUCCESS; } @@ -742,36 +752,6 @@ DEFUN (no_ospf_area_range, return CMD_SUCCESS; } -DEFUN (ospf_area_range_substitute, - ospf_area_range_substitute_cmd, - "area <A.B.C.D|(0-4294967295)> range A.B.C.D/M substitute A.B.C.D/M", - "OSPF area parameters\n" - "OSPF area ID in IP address format\n" - "OSPF area ID as a decimal value\n" - "Summarize routes matching address/mask (border routers only)\n" - "Area range prefix\n" - "Announce area range as another prefix\n" - "Network prefix to be announced instead of range\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - int idx_ipv4_number = 1; - int idx_ipv4_prefixlen = 3; - int idx_ipv4_prefixlen_2 = 5; - struct prefix_ipv4 p, s; - struct in_addr area_id; - int format; - - VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg); - str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p); - str2prefix_ipv4(argv[idx_ipv4_prefixlen_2]->arg, &s); - - ospf_area_range_substitute_set(ospf, area_id, &p, &s); - ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id), - format); - - return CMD_SUCCESS; -} - DEFUN (no_ospf_area_range_substitute, no_ospf_area_range_substitute_cmd, "no area <A.B.C.D|(0-4294967295)> range A.B.C.D/M substitute A.B.C.D/M", @@ -12792,7 +12772,6 @@ void ospf_vty_init(void) install_element(OSPF_NODE, &ospf_area_range_cost_cmd); install_element(OSPF_NODE, &ospf_area_range_not_advertise_cmd); install_element(OSPF_NODE, &no_ospf_area_range_cmd); - install_element(OSPF_NODE, &ospf_area_range_substitute_cmd); install_element(OSPF_NODE, &no_ospf_area_range_substitute_cmd); /* "area virtual-link" commands. */ diff --git a/pimd/pim_addr.c b/pimd/pim_addr.c index 8d89b57141..2a6b4fe20f 100644 --- a/pimd/pim_addr.c +++ b/pimd/pim_addr.c @@ -39,12 +39,8 @@ static ssize_t printfrr_pimaddr(struct fbuf *buf, struct printfrr_eargs *ea, if (!addr) return bputs(buf, "(null)"); - if (use_star) { - pim_addr zero = {}; - - if (memcmp(addr, &zero, sizeof(zero)) == 0) - return bputch(buf, '*'); - } + if (use_star && pim_addr_is_any(*addr)) + return bputch(buf, '*'); #if PIM_IPV == 4 return bprintfrr(buf, "%pI4", addr); diff --git a/pimd/pim_addr.h b/pimd/pim_addr.h index a1a8b55a5c..3c4b5a84d1 100644 --- a/pimd/pim_addr.h +++ b/pimd/pim_addr.h @@ -21,6 +21,9 @@ #define _PIMD_PIM_ADDR_H #include "jhash.h" +#include "prefix.h" + +/* clang-format off */ /* temporarily disable IPv6 types to keep code compiling. * Defining PIM_V6_TEMP_BREAK will show a lot of compile errors - they are @@ -28,12 +31,78 @@ */ #if PIM_IPV == 4 || !defined(PIM_V6_TEMP_BREAK) typedef struct in_addr pim_addr; -#define PIM_ADDRSTRLEN INET_ADDRSTRLEN + +#define PIM_ADDRSTRLEN INET_ADDRSTRLEN +#define PIM_AF AF_INET +#define PIM_AFI AFI_IP +#define PIM_MAX_BITLEN IPV4_MAX_BITLEN + +union pimprefixptr { + prefixtype(pimprefixptr, struct prefix, p) + prefixtype(pimprefixptr, struct prefix_ipv4, p4) +} TRANSPARENT_UNION; + +union pimprefixconstptr { + prefixtype(pimprefixconstptr, const struct prefix, p) + prefixtype(pimprefixconstptr, const struct prefix_ipv4, p4) +} TRANSPARENT_UNION; + #else typedef struct in6_addr pim_addr; -#define PIM_ADDRSTRLEN INET6_ADDRSTRLEN + +#define PIM_ADDRSTRLEN INET6_ADDRSTRLEN +#define PIM_AF AF_INET6 +#define PIM_AFI AFI_IP6 +#define PIM_MAX_BITLEN IPV6_MAX_BITLEN + +union pimprefixptr { + prefixtype(pimprefixptr, struct prefix, p) + prefixtype(pimprefixptr, struct prefix_ipv6, p6) +} TRANSPARENT_UNION; + +union pimprefixconstptr { + prefixtype(pimprefixconstptr, const struct prefix, p) + prefixtype(pimprefixconstptr, const struct prefix_ipv6, p6) +} TRANSPARENT_UNION; #endif +/* for assignment/initialization (C99 compound literal) + * named PIMADDR_ANY (not PIM_ADDR_ANY) to match INADDR_ANY + */ +#define PIMADDR_ANY (pim_addr){ } + +/* clang-format on */ + +static inline bool pim_addr_is_any(pim_addr addr) +{ + pim_addr zero = {}; + + return memcmp(&addr, &zero, sizeof(zero)) == 0; +} + +static inline int pim_addr_cmp(pim_addr a, pim_addr b) +{ + return memcmp(&a, &b, sizeof(a)); +} + +static inline void pim_addr_to_prefix(union pimprefixptr out, pim_addr in) +{ + out.p->family = PIM_AF; + out.p->prefixlen = PIM_MAX_BITLEN; + memcpy(out.p->u.val, &in, sizeof(in)); +} + +static inline pim_addr pim_addr_from_prefix(union pimprefixconstptr in) +{ + pim_addr ret; + + if (in.p->family != PIM_AF) + return PIMADDR_ANY; + + memcpy(&ret, in.p->u.val, sizeof(ret)); + return ret; +} + /* don't use this struct directly, use the pim_sgaddr typedef */ struct _pim_sgaddr { pim_addr grp; diff --git a/pimd/pim_assert.c b/pimd/pim_assert.c index 79b46994aa..3c38ebd76b 100644 --- a/pimd/pim_assert.c +++ b/pimd/pim_assert.c @@ -287,15 +287,13 @@ int pim_assert_recv(struct interface *ifp, struct pim_neighbor *neigh, if (PIM_DEBUG_PIM_TRACE) { char neigh_str[INET_ADDRSTRLEN]; char source_str[INET_ADDRSTRLEN]; - char group_str[INET_ADDRSTRLEN]; pim_inet4_dump("<neigh?>", src_addr, neigh_str, sizeof(neigh_str)); pim_inet4_dump("<src?>", msg_source_addr.u.prefix4, source_str, sizeof(source_str)); - pim_inet4_dump("<grp?>", sg.grp, group_str, sizeof(group_str)); zlog_debug( - "%s: from %s on %s: (S,G)=(%s,%s) pref=%u metric=%u rpt_bit=%u", - __func__, neigh_str, ifp->name, source_str, group_str, + "%s: from %s on %s: (S,G)=(%s,%pPAs) pref=%u metric=%u rpt_bit=%u", + __func__, neigh_str, ifp->name, source_str, &sg.grp, msg_metric.metric_preference, msg_metric.route_metric, PIM_FORCE_BOOLEAN(msg_metric.rpt_bit_flag)); } diff --git a/pimd/pim_br.c b/pimd/pim_br.c index b3fc8969b8..3e64296deb 100644 --- a/pimd/pim_br.c +++ b/pimd/pim_br.c @@ -43,8 +43,7 @@ struct in_addr pim_br_get_pmbr(pim_sgaddr *sg) struct pim_br *pim_br; for (ALL_LIST_ELEMENTS_RO(pim_br_list, node, pim_br)) { - if (sg->src.s_addr == pim_br->sg.src.s_addr - && sg->grp.s_addr == pim_br->sg.grp.s_addr) + if (!pim_sgaddr_cmp(*sg, pim_br->sg)) return pim_br->pmbr; } @@ -57,8 +56,7 @@ void pim_br_set_pmbr(pim_sgaddr *sg, struct in_addr br) struct pim_br *pim_br; for (ALL_LIST_ELEMENTS(pim_br_list, node, next, pim_br)) { - if (sg->src.s_addr == pim_br->sg.src.s_addr - && sg->grp.s_addr == pim_br->sg.grp.s_addr) + if (!pim_sgaddr_cmp(*sg, pim_br->sg)) break; } @@ -81,8 +79,7 @@ void pim_br_clear_pmbr(pim_sgaddr *sg) struct pim_br *pim_br; for (ALL_LIST_ELEMENTS(pim_br_list, node, next, pim_br)) { - if (sg->src.s_addr == pim_br->sg.src.s_addr - && sg->grp.s_addr == pim_br->sg.grp.s_addr) + if (!pim_sgaddr_cmp(*sg, pim_br->sg)) break; } diff --git a/pimd/pim_bsm.c b/pimd/pim_bsm.c index c8b6d4e404..4214790476 100644 --- a/pimd/pim_bsm.c +++ b/pimd/pim_bsm.c @@ -661,7 +661,7 @@ void pim_bsm_clear(struct pim_instance *pim) /* Find the upstream (*, G) whose upstream address is same as * the RP */ - if (up->sg.src.s_addr != INADDR_ANY) + if (!pim_addr_is_any(up->sg.src)) continue; struct prefix grp; diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 90c0257483..2baaca1c9f 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -79,6 +79,14 @@ static struct cmd_node debug_node = { .config_write = pim_debug_config_write, }; +static inline bool pim_sgaddr_match(pim_sgaddr item, pim_sgaddr match) +{ + return (pim_addr_is_any(match.grp) || + !pim_addr_cmp(match.grp, item.grp)) && + (pim_addr_is_any(match.src) || + !pim_addr_cmp(match.src, item.src)); +} + static struct vrf *pim_cmd_lookup_vrf(struct vty *vty, struct cmd_token *argv[], const int argc, int *idx) { @@ -100,8 +108,6 @@ static void pim_show_assert_helper(struct vty *vty, struct pim_interface *pim_ifp, struct pim_ifchannel *ch, time_t now) { - char ch_src_str[INET_ADDRSTRLEN]; - char ch_grp_str[INET_ADDRSTRLEN]; char winner_str[INET_ADDRSTRLEN]; struct in_addr ifaddr; char uptime[10]; @@ -110,18 +116,16 @@ static void pim_show_assert_helper(struct vty *vty, ifaddr = pim_ifp->primary_address; - pim_inet4_dump("<ch_src?>", ch->sg.src, ch_src_str, sizeof(ch_src_str)); - pim_inet4_dump("<ch_grp?>", ch->sg.grp, ch_grp_str, sizeof(ch_grp_str)); pim_inet4_dump("<assrt_win?>", ch->ifassert_winner, winner_str, sizeof(winner_str)); pim_time_uptime(uptime, sizeof(uptime), now - ch->ifassert_creation); pim_time_timer_to_mmss(timer, sizeof(timer), ch->t_ifassert_timer); - vty_out(vty, "%-16s %-15s %-15s %-15s %-6s %-15s %-8s %-5s\n", + vty_out(vty, "%-16s %-15s %-15pPAs %-15pPAs %-6s %-15s %-8s %-5s\n", ch->interface->name, - inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), ch_src_str, - ch_grp_str, pim_ifchannel_ifassert_name(ch->ifassert_state), + inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), &ch->sg.src, + &ch->sg.grp, pim_ifchannel_ifassert_name(ch->ifassert_state), winner_str, uptime, timer); } @@ -155,19 +159,15 @@ static void pim_show_assert_internal_helper(struct vty *vty, struct pim_interface *pim_ifp, struct pim_ifchannel *ch) { - char ch_src_str[INET_ADDRSTRLEN]; - char ch_grp_str[INET_ADDRSTRLEN]; struct in_addr ifaddr; char buf[PREFIX_STRLEN]; ifaddr = pim_ifp->primary_address; - pim_inet4_dump("<ch_src?>", ch->sg.src, ch_src_str, sizeof(ch_src_str)); - pim_inet4_dump("<ch_grp?>", ch->sg.grp, ch_grp_str, sizeof(ch_grp_str)); - vty_out(vty, "%-16s %-15s %-15s %-15s %-3s %-3s %-3s %-4s\n", + vty_out(vty, "%-16s %-15s %-15pPAs %-15pPAs %-3s %-3s %-3s %-4s\n", ch->interface->name, - inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), - ch_src_str, ch_grp_str, + inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), &ch->sg.src, + &ch->sg.grp, PIM_IF_FLAG_TEST_COULD_ASSERT(ch->flags) ? "yes" : "no", pim_macro_ch_could_assert_eval(ch) ? "yes" : "no", PIM_IF_FLAG_TEST_ASSERT_TRACKING_DESIRED(ch->flags) ? "yes" @@ -204,8 +204,6 @@ static void pim_show_assert_metric_helper(struct vty *vty, struct pim_interface *pim_ifp, struct pim_ifchannel *ch) { - char ch_src_str[INET_ADDRSTRLEN]; - char ch_grp_str[INET_ADDRSTRLEN]; char addr_str[INET_ADDRSTRLEN]; struct pim_assert_metric am; struct in_addr ifaddr; @@ -216,14 +214,12 @@ static void pim_show_assert_metric_helper(struct vty *vty, am = pim_macro_spt_assert_metric(&ch->upstream->rpf, pim_ifp->primary_address); - pim_inet4_dump("<ch_src?>", ch->sg.src, ch_src_str, sizeof(ch_src_str)); - pim_inet4_dump("<ch_grp?>", ch->sg.grp, ch_grp_str, sizeof(ch_grp_str)); pim_inet4_dump("<addr?>", am.ip_address, addr_str, sizeof(addr_str)); - vty_out(vty, "%-16s %-15s %-15s %-15s %-3s %4u %6u %-15s\n", + vty_out(vty, "%-16s %-15s %-15pPAs %-15pPAs %-3s %4u %6u %-15s\n", ch->interface->name, - inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), - ch_src_str, ch_grp_str, am.rpt_bit_flag ? "yes" : "no", + inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), &ch->sg.src, + &ch->sg.grp, am.rpt_bit_flag ? "yes" : "no", am.metric_preference, am.route_metric, addr_str); } @@ -251,8 +247,6 @@ static void pim_show_assert_winner_metric_helper(struct vty *vty, struct pim_interface *pim_ifp, struct pim_ifchannel *ch) { - char ch_src_str[INET_ADDRSTRLEN]; - char ch_grp_str[INET_ADDRSTRLEN]; char addr_str[INET_ADDRSTRLEN]; struct pim_assert_metric *am; struct in_addr ifaddr; @@ -264,8 +258,6 @@ static void pim_show_assert_winner_metric_helper(struct vty *vty, am = &ch->ifassert_winner_metric; - pim_inet4_dump("<ch_src?>", ch->sg.src, ch_src_str, sizeof(ch_src_str)); - pim_inet4_dump("<ch_grp?>", ch->sg.grp, ch_grp_str, sizeof(ch_grp_str)); pim_inet4_dump("<addr?>", am->ip_address, addr_str, sizeof(addr_str)); if (am->metric_preference == PIM_ASSERT_METRIC_PREFERENCE_MAX) @@ -279,11 +271,11 @@ static void pim_show_assert_winner_metric_helper(struct vty *vty, else snprintf(metr_str, sizeof(metr_str), "%6u", am->route_metric); - vty_out(vty, "%-16s %-15s %-15s %-15s %-3s %-4s %-6s %-15s\n", + vty_out(vty, "%-16s %-15s %-15pPAs %-15pPAs %-3s %-4s %-6s %-15s\n", ch->interface->name, - inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), ch_src_str, - ch_grp_str, am->rpt_bit_flag ? "yes" : "no", pref_str, metr_str, - addr_str); + inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), &ch->sg.src, + &ch->sg.grp, am->rpt_bit_flag ? "yes" : "no", pref_str, + metr_str, addr_str); } static void pim_show_assert_winner_metric(struct pim_instance *pim, @@ -343,14 +335,10 @@ static void pim_show_membership_helper(struct vty *vty, struct pim_ifchannel *ch, struct json_object *json) { - char ch_src_str[INET_ADDRSTRLEN]; - char ch_grp_str[INET_ADDRSTRLEN]; + char ch_grp_str[PIM_ADDRSTRLEN]; json_object *json_iface = NULL; json_object *json_row = NULL; - pim_inet4_dump("<ch_src?>", ch->sg.src, ch_src_str, sizeof(ch_src_str)); - pim_inet4_dump("<ch_grp?>", ch->sg.grp, ch_grp_str, sizeof(ch_grp_str)); - json_object_object_get_ex(json, ch->interface->name, &json_iface); if (!json_iface) { json_iface = json_object_new_object(); @@ -358,8 +346,10 @@ static void pim_show_membership_helper(struct vty *vty, json_object_object_add(json, ch->interface->name, json_iface); } + snprintfrr(ch_grp_str, sizeof(ch_grp_str), "%pPAs", &ch->sg.grp); + json_row = json_object_new_object(); - json_object_string_add(json_row, "source", ch_src_str); + json_object_string_addf(json_row, "source", "%pPAs", &ch->sg.src); json_object_string_add(json_row, "group", ch_grp_str); json_object_string_add(json_row, "localMembership", ch->local_ifmembership == PIM_IFMEMBERSHIP_NOINFO @@ -367,6 +357,7 @@ static void pim_show_membership_helper(struct vty *vty, : "INCLUDE"); json_object_object_add(json_iface, ch_grp_str, json_row); } + static void pim_show_membership(struct pim_instance *pim, struct vty *vty, bool uj) { @@ -1048,10 +1039,10 @@ static void pim_show_interfaces_single(struct pim_instance *pim, json_fhr_sources = json_object_new_object(); - pim_inet4_dump("<src?>", up->sg.src, src_str, - sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, - sizeof(grp_str)); + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", + &up->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", + &up->sg.src); pim_time_uptime(uptime, sizeof(uptime), now - up->state_transition); @@ -1225,15 +1216,11 @@ static void pim_show_interfaces_single(struct pim_instance *pim, print_header = 0; } - pim_inet4_dump("<src?>", up->sg.src, src_str, - sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, - sizeof(grp_str)); pim_time_uptime(uptime, sizeof(uptime), now - up->state_transition); vty_out(vty, - "%s : %s is a source, uptime is %s\n", - grp_str, src_str, uptime); + "%pPAs : %pPAs is a source, uptime is %s\n", + &up->sg.grp, &up->sg.src, uptime); } if (!print_header) { @@ -1653,8 +1640,6 @@ static void pim_show_join_helper(struct vty *vty, struct pim_interface *pim_ifp, struct pim_ifchannel *ch, json_object *json, time_t now, bool uj) { - char ch_src_str[INET_ADDRSTRLEN]; - char ch_grp_str[INET_ADDRSTRLEN]; json_object *json_iface = NULL; json_object *json_row = NULL; json_object *json_grp = NULL; @@ -1666,9 +1651,6 @@ static void pim_show_join_helper(struct vty *vty, struct pim_interface *pim_ifp, ifaddr = pim_ifp->primary_address; - pim_inet4_dump("<ch_src?>", ch->sg.src, ch_src_str, sizeof(ch_src_str)); - pim_inet4_dump("<ch_grp?>", ch->sg.grp, ch_grp_str, sizeof(ch_grp_str)); - pim_time_uptime_begin(uptime, sizeof(uptime), now, ch->ifjoin_creation); pim_time_timer_to_mmss(expire, sizeof(expire), ch->t_ifjoin_expiry_timer); @@ -1676,6 +1658,14 @@ static void pim_show_join_helper(struct vty *vty, struct pim_interface *pim_ifp, ch->t_ifjoin_prune_pending_timer); if (uj) { + char ch_grp_str[PIM_ADDRSTRLEN]; + char ch_src_str[PIM_ADDRSTRLEN]; + + snprintfrr(ch_grp_str, sizeof(ch_grp_str), "%pPAs", + &ch->sg.grp); + snprintfrr(ch_src_str, sizeof(ch_src_str), "%pPAs", + &ch->sg.src); + json_object_object_get_ex(json, ch->interface->name, &json_iface); @@ -1710,10 +1700,10 @@ static void pim_show_join_helper(struct vty *vty, struct pim_interface *pim_ifp, } else json_object_object_add(json_grp, ch_src_str, json_row); } else { - vty_out(vty, "%-16s %-15s %-15s %-15s %-10s %8s %-6s %5s\n", + vty_out(vty, "%-16s %-15s %-15pPAs %-15pPAs %-10s %8s %-6s %5s\n", ch->interface->name, inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), - ch_src_str, ch_grp_str, + &ch->sg.src, &ch->sg.grp, pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags), uptime, expire, prune); } @@ -1742,11 +1732,7 @@ static void pim_show_join(struct pim_instance *pim, struct vty *vty, continue; RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) { - if (sg->grp.s_addr != INADDR_ANY - && sg->grp.s_addr != ch->sg.grp.s_addr) - continue; - if (sg->src.s_addr != INADDR_ANY - && sg->src.s_addr != ch->sg.src.s_addr) + if (!pim_sgaddr_match(ch->sg, *sg)) continue; pim_show_join_helper(vty, pim_ifp, ch, json, now, uj); } /* scan interface channels */ @@ -2419,8 +2405,6 @@ static void pim_show_upstream(struct pim_instance *pim, struct vty *vty, "Iif Source Group State Uptime JoinTimer RSTimer KATimer RefCnt\n"); frr_each (rb_pim_upstream, &pim->upstream_head, up) { - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; char uptime[10]; char join_timer[10]; char rs_timer[10]; @@ -2428,15 +2412,9 @@ static void pim_show_upstream(struct pim_instance *pim, struct vty *vty, char msdp_reg_timer[10]; char state_str[PIM_REG_STATE_STR_LEN]; - if (sg->grp.s_addr != INADDR_ANY - && sg->grp.s_addr != up->sg.grp.s_addr) - continue; - if (sg->src.s_addr != INADDR_ANY - && sg->src.s_addr != up->sg.src.s_addr) + if (!pim_sgaddr_match(up->sg, *sg)) continue; - pim_inet4_dump("<src?>", up->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, sizeof(grp_str)); pim_time_uptime(uptime, sizeof(uptime), now - up->state_transition); pim_time_timer_to_hhmmss(join_timer, sizeof(join_timer), @@ -2477,6 +2455,14 @@ static void pim_show_upstream(struct pim_instance *pim, struct vty *vty, } if (uj) { + char grp_str[PIM_ADDRSTRLEN]; + char src_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", + &up->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", + &up->sg.src); + json_object_object_get_ex(json, grp_str, &json_group); if (!json_group) { @@ -2500,8 +2486,8 @@ static void pim_show_upstream(struct pim_instance *pim, struct vty *vty, * we are the FHR, else we just put * the RP as the rpfAddress */ - if (up->flags & PIM_UPSTREAM_FLAG_MASK_FHR - || up->sg.src.s_addr == INADDR_ANY) { + if (up->flags & PIM_UPSTREAM_FLAG_MASK_FHR || + pim_addr_is_any(up->sg.src)) { char rpf[PREFIX_STRLEN]; struct pim_rpf *rpg; @@ -2540,12 +2526,12 @@ static void pim_show_upstream(struct pim_instance *pim, struct vty *vty, json_object_object_add(json_group, src_str, json_row); } else { vty_out(vty, - "%-16s%-15s %-15s %-11s %-8s %-9s %-9s %-9s %6d\n", + "%-16s%-15pPAs %-15pPAs %-11s %-8s %-9s %-9s %-9s %6d\n", up->rpf.source_nexthop.interface ? up->rpf.source_nexthop.interface->name : "Unknown", - src_str, grp_str, state_str, uptime, join_timer, - rs_timer, ka_timer, up->ref_count); + &up->sg.src, &up->sg.grp, state_str, uptime, + join_timer, rs_timer, ka_timer, up->ref_count); } } @@ -2561,14 +2547,15 @@ static void pim_show_channel_helper(struct pim_instance *pim, { struct pim_upstream *up = ch->upstream; json_object *json_group = NULL; - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; json_object *json_row = NULL; - pim_inet4_dump("<src?>", up->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, sizeof(grp_str)); - if (uj) { + char grp_str[PIM_ADDRSTRLEN]; + char src_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", &up->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", &up->sg.src); + json_object_object_get_ex(json, grp_str, &json_group); if (!json_group) { @@ -2599,8 +2586,8 @@ static void pim_show_channel_helper(struct pim_instance *pim, json_object_object_add(json_group, src_str, json_row); } else { - vty_out(vty, "%-16s %-15s %-15s %-10s %-5s %-10s %-11s %-6s\n", - ch->interface->name, src_str, grp_str, + vty_out(vty, "%-16s %-15pPAs %-15pPAs %-10s %-5s %-10s %-11s %-6s\n", + ch->interface->name, &up->sg.src, &up->sg.grp, pim_macro_ch_lost_assert(ch) ? "yes" : "no", pim_macro_chisin_joins(ch) ? "yes" : "no", pim_macro_chisin_pim_include(ch) ? "yes" : "no", @@ -2651,14 +2638,15 @@ static void pim_show_join_desired_helper(struct pim_instance *pim, json_object *json, bool uj) { json_object *json_group = NULL; - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; json_object *json_row = NULL; - pim_inet4_dump("<src?>", up->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, sizeof(grp_str)); - if (uj) { + char grp_str[PIM_ADDRSTRLEN]; + char src_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", &up->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", &up->sg.src); + json_object_object_get_ex(json, grp_str, &json_group); if (!json_group) { @@ -2678,8 +2666,8 @@ static void pim_show_join_desired_helper(struct pim_instance *pim, json_object_object_add(json_group, src_str, json_row); } else { - vty_out(vty, "%-15s %-15s %-6s\n", - src_str, grp_str, + vty_out(vty, "%-15pPAs %-15pPAs %-6s\n", + &up->sg.src, &up->sg.grp, pim_upstream_evaluate_join_desired(pim, up) ? "yes" : "no"); } @@ -2723,8 +2711,6 @@ static void pim_show_upstream_rpf(struct pim_instance *pim, struct vty *vty, "Source Group RpfIface RibNextHop RpfAddress \n"); frr_each (rb_pim_upstream, &pim->upstream_head, up) { - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; char rpf_nexthop_str[PREFIX_STRLEN]; char rpf_addr_str[PREFIX_STRLEN]; struct pim_rpf *rpf; @@ -2732,8 +2718,6 @@ static void pim_show_upstream_rpf(struct pim_instance *pim, struct vty *vty, rpf = &up->rpf; - pim_inet4_dump("<src?>", up->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, sizeof(grp_str)); pim_addr_dump("<nexthop?>", &rpf->source_nexthop.mrib_nexthop_addr, rpf_nexthop_str, sizeof(rpf_nexthop_str)); @@ -2743,6 +2727,14 @@ static void pim_show_upstream_rpf(struct pim_instance *pim, struct vty *vty, rpf_ifname = rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<ifname?>"; if (uj) { + char grp_str[PIM_ADDRSTRLEN]; + char src_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", + &up->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", + &up->sg.src); + json_object_object_get_ex(json, grp_str, &json_group); if (!json_group) { @@ -2763,9 +2755,9 @@ static void pim_show_upstream_rpf(struct pim_instance *pim, struct vty *vty, rpf_addr_str); json_object_object_add(json_group, src_str, json_row); } else { - vty_out(vty, "%-15s %-15s %-16s %-15s %-15s\n", src_str, - grp_str, rpf_ifname, rpf_nexthop_str, - rpf_addr_str); + vty_out(vty, "%-15pPAs %-15pPAs %-16s %-15s %-15s\n", + &up->sg.src, &up->sg.grp, rpf_ifname, + rpf_nexthop_str, rpf_addr_str); } } @@ -2857,15 +2849,11 @@ static void pim_show_rpf(struct pim_instance *pim, struct vty *vty, bool uj) } frr_each (rb_pim_upstream, &pim->upstream_head, up) { - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; char rpf_addr_str[PREFIX_STRLEN]; char rib_nexthop_str[PREFIX_STRLEN]; const char *rpf_ifname; struct pim_rpf *rpf = &up->rpf; - pim_inet4_dump("<src?>", up->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, sizeof(grp_str)); pim_addr_dump("<rpf?>", &rpf->rpf_addr, rpf_addr_str, sizeof(rpf_addr_str)); pim_addr_dump("<nexthop?>", @@ -2875,6 +2863,14 @@ static void pim_show_rpf(struct pim_instance *pim, struct vty *vty, bool uj) rpf_ifname = rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<ifname?>"; if (uj) { + char grp_str[PIM_ADDRSTRLEN]; + char src_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", + &up->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", + &up->sg.src); + json_object_object_get_ex(json, grp_str, &json_group); if (!json_group) { @@ -2901,9 +2897,9 @@ static void pim_show_rpf(struct pim_instance *pim, struct vty *vty, bool uj) json_object_object_add(json_group, src_str, json_row); } else { - vty_out(vty, "%-15s %-15s %-16s %-15s %-15s %6d %4d\n", - src_str, grp_str, rpf_ifname, rpf_addr_str, - rib_nexthop_str, + vty_out(vty, "%-15pPAs %-15pPAs %-16s %-15s %-15s %6d %4d\n", + &up->sg.src, &up->sg.grp, rpf_ifname, + rpf_addr_str, rib_nexthop_str, rpf->source_nexthop.mrib_route_metric, rpf->source_nexthop.mrib_metric_preference); } @@ -4606,18 +4602,13 @@ static void pim_show_jp_agg_helper(struct vty *vty, struct pim_upstream *up, int is_join) { - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; char rpf_str[INET_ADDRSTRLEN]; - pim_inet4_dump("<src?>", up->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, sizeof(grp_str)); /* pius->address.s_addr */ pim_inet4_dump("<rpf?>", neigh->source_addr, rpf_str, sizeof(rpf_str)); - vty_out(vty, "%-16s %-15s %-15s %-15s %5s\n", - ifp->name, rpf_str, src_str, - grp_str, is_join?"J":"P"); + vty_out(vty, "%-16s %-15s %-15pPAs %-15pPAs %5s\n", ifp->name, rpf_str, + &up->sg.src, &up->sg.grp, is_join ? "J" : "P"); } static void pim_show_jp_agg_list(struct pim_instance *pim, struct vty *vty) @@ -4775,8 +4766,8 @@ static void pim_show_mlag_up_detail(struct vrf *vrf, struct vty *vty, const char *src_or_group, const char *group, bool uj) { - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; + char src_str[PIM_ADDRSTRLEN]; + char grp_str[PIM_ADDRSTRLEN]; struct pim_upstream *up; struct pim_instance *pim = vrf->info; json_object *json = NULL; @@ -4793,8 +4784,9 @@ static void pim_show_mlag_up_detail(struct vrf *vrf, && !pim_up_mlag_is_local(up)) continue; - pim_inet4_dump("<src?>", up->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, sizeof(grp_str)); + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", &up->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", &up->sg.src); + /* XXX: strcmps are clearly inefficient. we should do uint comps * here instead. */ @@ -4820,8 +4812,6 @@ static void pim_show_mlag_up_vrf(struct vrf *vrf, struct vty *vty, bool uj) json_object *json = NULL; json_object *json_row; struct pim_upstream *up; - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; struct pim_instance *pim = vrf->info; json_object *json_group = NULL; @@ -4837,11 +4827,16 @@ static void pim_show_mlag_up_vrf(struct vrf *vrf, struct vty *vty, bool uj) && !(up->flags & PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE) && !pim_up_mlag_is_local(up)) continue; - pim_inet4_dump("<src?>", up->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", up->sg.grp, grp_str, sizeof(grp_str)); if (uj) { + char src_str[PIM_ADDRSTRLEN]; + char grp_str[PIM_ADDRSTRLEN]; json_object *own_list = NULL; + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", + &up->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", + &up->sg.src); + json_object_object_get_ex(json, grp_str, &json_group); if (!json_group) { json_group = json_object_new_object(); @@ -4888,8 +4883,8 @@ static void pim_show_mlag_up_vrf(struct vrf *vrf, struct vty *vty, bool uj) if (up->flags & (PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)) strlcat(own_str, "I", sizeof(own_str)); vty_out(vty, - "%-15s %-15s %-6s %-11u %-10u %2s\n", - src_str, grp_str, own_str, + "%-15pPAs %-15pPAs %-6s %-11u %-10u %2s\n", + &up->sg.src, &up->sg.grp, own_str, pim_up_mlag_local_cost(up), pim_up_mlag_peer_cost(up), PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(up->flags) @@ -5854,11 +5849,11 @@ static void show_mroute(struct pim_instance *pim, struct vty *vty, if (!c_oil->installed) continue; - if (sg->grp.s_addr != INADDR_ANY - && sg->grp.s_addr != c_oil->oil.mfcc_mcastgrp.s_addr) + if (!pim_addr_is_any(sg->grp) && + pim_addr_cmp(sg->grp, c_oil->oil.mfcc_mcastgrp)) continue; - if (sg->src.s_addr != INADDR_ANY - && sg->src.s_addr != c_oil->oil.mfcc_origin.s_addr) + if (!pim_addr_is_any(sg->src) && + pim_addr_cmp(sg->src, c_oil->oil.mfcc_origin)) continue; pim_inet4_dump("<group?>", c_oil->oil.mfcc_mcastgrp, grp_str, @@ -8233,13 +8228,12 @@ DEFPY_HIDDEN (pim_test_sg_keepalive, up = pim_upstream_find(pim, &sg); if (!up) { - vty_out(vty, "%% Unable to find %s specified\n", - pim_str_sg_dump(&sg)); + vty_out(vty, "%% Unable to find %pSG specified\n", &sg); return CMD_WARNING; } - vty_out(vty, "Setting %s to current keep alive time: %d\n", - pim_str_sg_dump(&sg), pim->keep_alive_time); + vty_out(vty, "Setting %pSG to current keep alive time: %d\n", &sg, + pim->keep_alive_time); pim_upstream_keep_alive_timer_start(up, pim->keep_alive_time); return CMD_SUCCESS; @@ -10149,8 +10143,6 @@ static void ip_msdp_show_sa(struct pim_instance *pim, struct vty *vty, bool uj) { struct listnode *sanode; struct pim_msdp_sa *sa; - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; char rp_str[INET_ADDRSTRLEN]; char timebuf[PIM_MSDP_UPTIME_STRLEN]; char spt_str[8]; @@ -10170,8 +10162,6 @@ static void ip_msdp_show_sa(struct pim_instance *pim, struct vty *vty, bool uj) for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) { now = pim_time_monotonic_sec(); pim_time_uptime(timebuf, sizeof(timebuf), now - sa->uptime); - pim_inet4_dump("<src?>", sa->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", sa->sg.grp, grp_str, sizeof(grp_str)); if (sa->flags & PIM_MSDP_SAF_PEER) { pim_inet4_dump("<rp?>", sa->rp, rp_str, sizeof(rp_str)); if (sa->up) { @@ -10189,6 +10179,14 @@ static void ip_msdp_show_sa(struct pim_instance *pim, struct vty *vty, bool uj) strlcpy(local_str, "no", sizeof(local_str)); } if (uj) { + char src_str[PIM_ADDRSTRLEN]; + char grp_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", + &sa->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", + &sa->sg.src); + json_object_object_get_ex(json, grp_str, &json_group); if (!json_group) { @@ -10206,8 +10204,8 @@ static void ip_msdp_show_sa(struct pim_instance *pim, struct vty *vty, bool uj) json_object_string_add(json_row, "upTime", timebuf); json_object_object_add(json_group, src_str, json_row); } else { - vty_out(vty, "%-15s %15s %15s %5c %3c %8s\n", - src_str, grp_str, rp_str, local_str[0], + vty_out(vty, "%-15pPAs %15pPAs %15s %5c %3c %8s\n", + &sa->sg.src, &sa->sg.grp, rp_str, local_str[0], spt_str[0], timebuf); } } @@ -10287,8 +10285,6 @@ static void ip_msdp_show_sa_detail(struct pim_instance *pim, struct vty *vty, { struct listnode *sanode; struct pim_msdp_sa *sa; - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; json_object *json = NULL; if (uj) { @@ -10296,8 +10292,12 @@ static void ip_msdp_show_sa_detail(struct pim_instance *pim, struct vty *vty, } for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) { - pim_inet4_dump("<src?>", sa->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", sa->sg.grp, grp_str, sizeof(grp_str)); + char src_str[PIM_ADDRSTRLEN]; + char grp_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", &sa->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", &sa->sg.src); + ip_msdp_show_sa_entry_detail(sa, src_str, grp_str, vty, uj, json); } @@ -10367,8 +10367,6 @@ static void ip_msdp_show_sa_addr(struct pim_instance *pim, struct vty *vty, { struct listnode *sanode; struct pim_msdp_sa *sa; - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; json_object *json = NULL; if (uj) { @@ -10376,8 +10374,12 @@ static void ip_msdp_show_sa_addr(struct pim_instance *pim, struct vty *vty, } for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) { - pim_inet4_dump("<src?>", sa->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", sa->sg.grp, grp_str, sizeof(grp_str)); + char src_str[PIM_ADDRSTRLEN]; + char grp_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", &sa->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", &sa->sg.src); + if (!strcmp(addr, src_str) || !strcmp(addr, grp_str)) { ip_msdp_show_sa_entry_detail(sa, src_str, grp_str, vty, uj, json); @@ -10393,8 +10395,6 @@ static void ip_msdp_show_sa_sg(struct pim_instance *pim, struct vty *vty, { struct listnode *sanode; struct pim_msdp_sa *sa; - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; json_object *json = NULL; if (uj) { @@ -10402,8 +10402,12 @@ static void ip_msdp_show_sa_sg(struct pim_instance *pim, struct vty *vty, } for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) { - pim_inet4_dump("<src?>", sa->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", sa->sg.grp, grp_str, sizeof(grp_str)); + char src_str[PIM_ADDRSTRLEN]; + char grp_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", &sa->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", &sa->sg.src); + if (!strcmp(src, src_str) && !strcmp(grp, grp_str)) { ip_msdp_show_sa_entry_detail(sa, src_str, grp_str, vty, uj, json); @@ -10512,8 +10516,6 @@ static void pim_show_vxlan_sg_entry(struct pim_vxlan_sg *vxlan_sg, { struct vty *vty = cwd->vty; json_object *json = cwd->json; - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; json_object *json_row; bool installed = (vxlan_sg->up) ? true : false; const char *iif_name = vxlan_sg->iif?vxlan_sg->iif->name:"-"; @@ -10524,13 +10526,19 @@ static void pim_show_vxlan_sg_entry(struct pim_vxlan_sg *vxlan_sg, else oif_name = vxlan_sg->term_oif?vxlan_sg->term_oif->name:""; - if (cwd->addr_match && (vxlan_sg->sg.src.s_addr != cwd->addr.s_addr) && - (vxlan_sg->sg.grp.s_addr != cwd->addr.s_addr)) { + if (cwd->addr_match && pim_addr_cmp(vxlan_sg->sg.src, cwd->addr) && + pim_addr_cmp(vxlan_sg->sg.grp, cwd->addr)) { return; } - pim_inet4_dump("<src?>", vxlan_sg->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", vxlan_sg->sg.grp, grp_str, sizeof(grp_str)); if (json) { + char src_str[PIM_ADDRSTRLEN]; + char grp_str[PIM_ADDRSTRLEN]; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", + &vxlan_sg->sg.grp); + snprintfrr(src_str, sizeof(src_str), "%pPAs", + &vxlan_sg->sg.src); + json_object_object_get_ex(json, grp_str, &cwd->json_group); if (!cwd->json_group) { @@ -10550,9 +10558,9 @@ static void pim_show_vxlan_sg_entry(struct pim_vxlan_sg *vxlan_sg, json_object_boolean_false_add(json_row, "installed"); json_object_object_add(cwd->json_group, src_str, json_row); } else { - vty_out(vty, "%-15s %-15s %-15s %-15s %-5s\n", - src_str, grp_str, iif_name, oif_name, - installed?"I":""); + vty_out(vty, "%-15pPAs %-15pPAs %-15s %-15s %-5s\n", + &vxlan_sg->sg.src, &vxlan_sg->sg.grp, iif_name, + oif_name, installed ? "I" : ""); } } diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index 72e04460d5..3f138e22e5 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -403,7 +403,7 @@ static int pim_sec_addr_update(struct interface *ifp) for (ALL_LIST_ELEMENTS_RO(ifp->connected, node, ifc)) { struct prefix *p = ifc->address; - if (PIM_INADDR_IS_ANY(p->u.prefix4)) { + if (p->u.prefix4.s_addr == INADDR_ANY) { continue; } @@ -598,7 +598,7 @@ void pim_if_addr_add(struct connected *ifc) if (PIM_IF_TEST_PIM(pim_ifp->options)) { - if (PIM_INADDR_ISNOT_ANY(pim_ifp->primary_address)) { + if (!pim_addr_is_any(pim_ifp->primary_address)) { /* Interface has a valid socket ? */ if (pim_ifp->pim_sock_fd < 0) { @@ -684,7 +684,7 @@ static void pim_if_addr_del_pim(struct connected *ifc) return; } - if (PIM_INADDR_ISNOT_ANY(pim_ifp->primary_address)) { + if (!pim_addr_is_any(pim_ifp->primary_address)) { /* Interface keeps a valid primary address */ return; } @@ -752,7 +752,7 @@ void pim_if_addr_add_all(struct interface *ifp) if (PIM_IF_TEST_PIM(pim_ifp->options)) { /* Interface has a valid primary address ? */ - if (PIM_INADDR_ISNOT_ANY(pim_ifp->primary_address)) { + if (!pim_addr_is_any(pim_ifp->primary_address)) { /* Interface has a valid socket ? */ if (pim_ifp->pim_sock_fd < 0) { @@ -836,7 +836,7 @@ struct in_addr pim_find_primary_addr(struct interface *ifp) int v6_addrs = 0; struct pim_interface *pim_ifp = ifp->info; - if (pim_ifp && PIM_INADDR_ISNOT_ANY(pim_ifp->update_source)) { + if (pim_ifp && !pim_addr_is_any(pim_ifp->update_source)) { return pim_ifp->update_source; } @@ -848,7 +848,7 @@ struct in_addr pim_find_primary_addr(struct interface *ifp) continue; } - if (PIM_INADDR_IS_ANY(p->u.prefix4)) { + if (p->u.prefix4.s_addr == INADDR_ANY) { zlog_warn( "%s: null IPv4 address connected to interface %s", __func__, ifp->name); @@ -916,7 +916,7 @@ static int pim_iface_next_vif_index(struct interface *ifp) int pim_if_add_vif(struct interface *ifp, bool ispimreg, bool is_vxlan_term) { struct pim_interface *pim_ifp = ifp->info; - struct in_addr ifaddr; + pim_addr ifaddr; unsigned char flags = 0; assert(pim_ifp); @@ -935,7 +935,7 @@ int pim_if_add_vif(struct interface *ifp, bool ispimreg, bool is_vxlan_term) } ifaddr = pim_ifp->primary_address; - if (!ispimreg && !is_vxlan_term && PIM_INADDR_IS_ANY(ifaddr)) { + if (!ispimreg && !is_vxlan_term && pim_addr_is_any(ifaddr)) { zlog_warn( "%s: could not get address for interface %s ifindex=%d", __func__, ifp->name, ifp->ifindex); diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c index c0d693071f..9248177724 100644 --- a/pimd/pim_ifchannel.c +++ b/pimd/pim_ifchannel.c @@ -62,19 +62,7 @@ int pim_ifchannel_compare(const struct pim_ifchannel *ch1, if (pim_ifp1->mroute_vif_index > pim_ifp2->mroute_vif_index) return 1; - if (ntohl(ch1->sg.grp.s_addr) < ntohl(ch2->sg.grp.s_addr)) - return -1; - - if (ntohl(ch1->sg.grp.s_addr) > ntohl(ch2->sg.grp.s_addr)) - return 1; - - if (ntohl(ch1->sg.src.s_addr) < ntohl(ch2->sg.src.s_addr)) - return -1; - - if (ntohl(ch1->sg.src.s_addr) > ntohl(ch2->sg.src.s_addr)) - return 1; - - return 0; + return pim_sgaddr_cmp(ch1->sg, ch2->sg); } /* @@ -107,18 +95,15 @@ static void pim_ifchannel_find_new_children(struct pim_ifchannel *ch) struct pim_ifchannel *child; // Basic Sanity that we are not being silly - if ((ch->sg.src.s_addr != INADDR_ANY) - && (ch->sg.grp.s_addr != INADDR_ANY)) + if (!pim_addr_is_any(ch->sg.src) && !pim_addr_is_any(ch->sg.grp)) return; - if ((ch->sg.src.s_addr == INADDR_ANY) - && (ch->sg.grp.s_addr == INADDR_ANY)) + if (pim_addr_is_any(ch->sg.src) && pim_addr_is_any(ch->sg.grp)) return; RB_FOREACH (child, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) { - if ((ch->sg.grp.s_addr != INADDR_ANY) - && (child->sg.grp.s_addr == ch->sg.grp.s_addr) - && (child != ch)) { + if (!pim_addr_is_any(ch->sg.grp) && + !pim_addr_cmp(child->sg.grp, ch->sg.grp) && (child != ch)) { child->parent = ch; listnode_add_sort(ch->sources, child); } @@ -162,9 +147,9 @@ void pim_ifchannel_delete(struct pim_ifchannel *ch) * being inherited. So let's figure out what * needs to be done here */ - if ((ch->sg.src.s_addr != INADDR_ANY) && - pim_upstream_evaluate_join_desired_interface( - ch->upstream, ch, ch->parent)) + if (!pim_addr_is_any(ch->sg.src) && + pim_upstream_evaluate_join_desired_interface( + ch->upstream, ch, ch->parent)) pim_channel_add_oif(ch->upstream->channel_oil, ch->interface, PIM_OIF_FLAG_PROTO_STAR, @@ -293,7 +278,7 @@ void pim_ifchannel_ifjoin_switch(const char *caller, struct pim_ifchannel *ch, ch->ifjoin_state = new_state; - if (ch->sg.src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(ch->sg.src)) { struct pim_upstream *up = ch->upstream; struct pim_upstream *child; struct listnode *up_node; @@ -455,8 +440,8 @@ struct pim_ifchannel *pim_ifchannel_find(struct interface *ifp, pim_sgaddr *sg) pim_ifp = ifp->info; if (!pim_ifp) { - zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s", - __func__, pim_str_sg_dump(sg), ifp->name); + zlog_warn("%s: (S,G)=%pSG: multicast not enabled on interface %s", + __func__, sg, ifp->name); return NULL; } @@ -527,9 +512,9 @@ static struct pim_ifchannel *pim_ifchannel_find_parent(struct pim_ifchannel *ch) struct pim_ifchannel *parent = NULL; // (S,G) - if ((parent_sg.src.s_addr != INADDR_ANY) - && (parent_sg.grp.s_addr != INADDR_ANY)) { - parent_sg.src.s_addr = INADDR_ANY; + if (!pim_addr_is_any(parent_sg.src) && + !pim_addr_is_any(parent_sg.grp)) { + parent_sg.src = PIMADDR_ANY; parent = pim_ifchannel_find(ch->interface, &parent_sg); if (parent) @@ -558,8 +543,7 @@ struct pim_ifchannel *pim_ifchannel_add(struct interface *ifp, pim_sgaddr *sg, if (ch->upstream) ch->upstream->flags |= up_flags; else if (PIM_DEBUG_EVENTS) - zlog_debug("%s:%s No Upstream found", __func__, - pim_str_sg_dump(sg)); + zlog_debug("%s:%pSG No Upstream found", __func__, sg); return ch; } @@ -575,9 +559,9 @@ struct pim_ifchannel *pim_ifchannel_add(struct interface *ifp, pim_sgaddr *sg, ch->interface = ifp; ch->sg = *sg; - pim_str_sg_set(sg, ch->sg_str); + snprintfrr(ch->sg_str, sizeof(ch->sg_str), "%pSG", sg); ch->parent = pim_ifchannel_find_parent(ch); - if (ch->sg.src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(ch->sg.src)) { ch->sources = list_new(); ch->sources->cmp = (int (*)(void *, void *))pim_ifchannel_compare; @@ -688,10 +672,9 @@ static int on_ifjoin_prune_pending_timer(struct thread *t) ch = THREAD_ARG(t); if (PIM_DEBUG_PIM_TRACE) - zlog_debug( - "%s: IFCHANNEL%s %s Prune Pending Timer Popped", - __func__, pim_str_sg_dump(&ch->sg), - pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags)); + zlog_debug("%s: IFCHANNEL%pSG %s Prune Pending Timer Popped", + __func__, &ch->sg, + pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags)); if (ch->ifjoin_state == PIM_IFJOIN_PRUNE_PENDING) { ifp = ch->interface; @@ -832,9 +815,9 @@ static int nonlocal_upstream(int is_join, struct interface *recv_ifp, if (PIM_DEBUG_PIM_TRACE_DETAIL) { char up_str[INET_ADDRSTRLEN]; pim_inet4_dump("<upstream?>", upstream, up_str, sizeof(up_str)); - zlog_warn("%s: recv %s (S,G)=%s to non-local upstream=%s on %s", + zlog_warn("%s: recv %s (S,G)=%pSG to non-local upstream=%s on %s", __func__, is_join ? "join" : "prune", - pim_str_sg_dump(sg), up_str, recv_ifp->name); + sg, up_str, recv_ifp->name); } /* @@ -994,8 +977,8 @@ void pim_ifchannel_join_add(struct interface *ifp, struct in_addr neigh_addr, THREAD_OFF(ch->t_ifjoin_prune_pending_timer); /* Check if SGRpt join Received */ - if ((source_flags & PIM_ENCODE_RPT_BIT) - && (sg->src.s_addr != INADDR_ANY)) { + if ((source_flags & PIM_ENCODE_RPT_BIT) && + !pim_addr_is_any(sg->src)) { /* * Transitions from Prune-Pending State (Rcv SGRpt Join) * RFC 7761 Sec 4.5.3: @@ -1049,10 +1032,9 @@ void pim_ifchannel_prune(struct interface *ifp, struct in_addr upstream, ch = pim_ifchannel_find(ifp, sg); if (!ch && !(source_flags & PIM_ENCODE_RPT_BIT)) { if (PIM_DEBUG_PIM_TRACE) - zlog_debug( - "%s: Received prune with no relevant ifchannel %s%s state: %d", - __func__, ifp->name, pim_str_sg_dump(sg), - source_flags); + zlog_debug("%s: Received prune with no relevant ifchannel %s%pSG state: %d", + __func__, ifp->name, sg, + source_flags); return; } @@ -1182,28 +1164,26 @@ int pim_ifchannel_local_membership_add(struct interface *ifp, pim_sgaddr *sg, pim_ifp = ifp->info; if (!pim_ifp) { if (PIM_DEBUG_EVENTS) - zlog_debug("%s:%s Expected pim interface setup for %s", - __func__, pim_str_sg_dump(sg), ifp->name); + zlog_debug("%s:%pSG Expected pim interface setup for %s", + __func__, sg, ifp->name); return 0; } if (!PIM_IF_TEST_PIM(pim_ifp->options)) { if (PIM_DEBUG_EVENTS) - zlog_debug( - "%s:%s PIM is not configured on this interface %s", - __func__, pim_str_sg_dump(sg), ifp->name); + zlog_debug("%s:%pSG PIM is not configured on this interface %s", + __func__, sg, ifp->name); return 0; } pim = pim_ifp->pim; /* skip (*,G) ch creation if G is of type SSM */ - if (sg->src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(sg->src)) { if (pim_is_grp_ssm(pim, sg->grp)) { if (PIM_DEBUG_PIM_EVENTS) - zlog_debug( - "%s: local membership (S,G)=%s ignored as group is SSM", - __func__, pim_str_sg_dump(sg)); + zlog_debug("%s: local membership (S,G)=%pSG ignored as group is SSM", + __func__, sg); return 1; } } @@ -1217,7 +1197,7 @@ int pim_ifchannel_local_membership_add(struct interface *ifp, pim_sgaddr *sg, ifmembership_set(ch, PIM_IFMEMBERSHIP_INCLUDE); - if (sg->src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(sg->src)) { struct pim_upstream *up = pim_upstream_find(pim, sg); struct pim_upstream *child; struct listnode *up_node; @@ -1293,7 +1273,7 @@ void pim_ifchannel_local_membership_del(struct interface *ifp, pim_sgaddr *sg) return; ifmembership_set(ch, PIM_IFMEMBERSHIP_NOINFO); - if (sg->src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(sg->src)) { struct pim_upstream *up = pim_upstream_find(pim_ifp->pim, sg); struct pim_upstream *child; struct listnode *up_node, *up_nnode; @@ -1351,15 +1331,11 @@ void pim_ifchannel_update_could_assert(struct pim_ifchannel *ch) if (new_couldassert == old_couldassert) return; - if (PIM_DEBUG_PIM_EVENTS) { - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; - pim_inet4_dump("<src?>", ch->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", ch->sg.grp, grp_str, sizeof(grp_str)); - zlog_debug("%s: CouldAssert(%s,%s,%s) changed from %d to %d", - __func__, src_str, grp_str, ch->interface->name, - old_couldassert, new_couldassert); - } + if (PIM_DEBUG_PIM_EVENTS) + zlog_debug("%s: CouldAssert(%pPAs,%pPAs,%s) changed from %d to %d", + __func__, &ch->sg.src, &ch->sg.grp, + ch->interface->name, old_couldassert, + new_couldassert); if (new_couldassert) { /* CouldAssert(S,G,I) switched from false to true */ @@ -1393,19 +1369,15 @@ void pim_ifchannel_update_my_assert_metric(struct pim_ifchannel *ch) return; if (PIM_DEBUG_PIM_EVENTS) { - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; char old_addr_str[INET_ADDRSTRLEN]; char new_addr_str[INET_ADDRSTRLEN]; - pim_inet4_dump("<src?>", ch->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", ch->sg.grp, grp_str, sizeof(grp_str)); pim_inet4_dump("<old_addr?>", ch->ifassert_my_metric.ip_address, old_addr_str, sizeof(old_addr_str)); pim_inet4_dump("<new_addr?>", my_metric_new.ip_address, new_addr_str, sizeof(new_addr_str)); zlog_debug( - "%s: my_assert_metric(%s,%s,%s) changed from %u,%u,%u,%s to %u,%u,%u,%s", - __func__, src_str, grp_str, ch->interface->name, + "%s: my_assert_metric(%pPAs,%pPAs,%s) changed from %u,%u,%u,%s to %u,%u,%u,%s", + __func__, &ch->sg.src, &ch->sg.grp, ch->interface->name, ch->ifassert_my_metric.rpt_bit_flag, ch->ifassert_my_metric.metric_preference, ch->ifassert_my_metric.route_metric, old_addr_str, @@ -1432,16 +1404,11 @@ void pim_ifchannel_update_assert_tracking_desired(struct pim_ifchannel *ch) if (new_atd == old_atd) return; - if (PIM_DEBUG_PIM_EVENTS) { - char src_str[INET_ADDRSTRLEN]; - char grp_str[INET_ADDRSTRLEN]; - pim_inet4_dump("<src?>", ch->sg.src, src_str, sizeof(src_str)); - pim_inet4_dump("<grp?>", ch->sg.grp, grp_str, sizeof(grp_str)); + if (PIM_DEBUG_PIM_EVENTS) zlog_debug( - "%s: AssertTrackingDesired(%s,%s,%s) changed from %d to %d", - __func__, src_str, grp_str, ch->interface->name, + "%s: AssertTrackingDesired(%pPAs,%pPAs,%s) changed from %d to %d", + __func__, &ch->sg.src, &ch->sg.grp, ch->interface->name, old_atd, new_atd); - } if (new_atd) { /* AssertTrackingDesired(S,G,I) switched from false to true */ diff --git a/pimd/pim_igmp_mtrace.c b/pimd/pim_igmp_mtrace.c index 1518ef2322..d8210168e2 100644 --- a/pimd/pim_igmp_mtrace.c +++ b/pimd/pim_igmp_mtrace.c @@ -119,7 +119,7 @@ static bool mtrace_fwd_info(struct pim_instance *pim, up = pim_upstream_find(pim, &sg); if (!up) { - sg.src.s_addr = INADDR_ANY; + sg.src = PIMADDR_ANY; up = pim_upstream_find(pim, &sg); } @@ -154,7 +154,7 @@ static bool mtrace_fwd_info(struct pim_instance *pim, rspp->rtg_proto = MTRACE_RTG_PROTO_PIM; /* 6.2.2. 4. Fill in ... S, and Src Mask */ - if (sg.src.s_addr != INADDR_ANY) { + if (!pim_addr_is_any(sg.src)) { rspp->s = 1; rspp->src_mask = MTRACE_SRC_MASK_SOURCE; } else { diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c index 492af5f2d2..fafca5a148 100644 --- a/pimd/pim_igmpv3.c +++ b/pimd/pim_igmpv3.c @@ -1675,7 +1675,7 @@ void igmp_v3_send_query(struct gm_group *group, int fd, const char *ifname, */ if (!s_flag) { /* general query? */ - if (PIM_INADDR_IS_ANY(group_addr)) { + if (group_addr.s_addr == INADDR_ANY) { char dst_str[INET_ADDRSTRLEN]; char group_str[INET_ADDRSTRLEN]; pim_inet4_dump("<dst?>", dst_addr, dst_str, @@ -1762,7 +1762,7 @@ void igmp_v3_recv_query(struct gm_sock *igmp, const char *from_str, if (!s_flag) { /* s_flag is clear */ - if (PIM_INADDR_IS_ANY(group_addr)) { + if (group_addr.s_addr == INADDR_ANY) { /* this is a general query */ /* log that general query should have the s_flag set */ zlog_warn( diff --git a/pimd/pim_join.c b/pimd/pim_join.c index 5e96d39e8f..fa2d8d462b 100644 --- a/pimd/pim_join.c +++ b/pimd/pim_join.c @@ -65,12 +65,11 @@ static void recv_join(struct interface *ifp, struct pim_neighbor *neigh, pim_inet4_dump("<upstream?>", upstream, up_str, sizeof(up_str)); pim_inet4_dump("<neigh?>", neigh->source_addr, neigh_str, sizeof(neigh_str)); - zlog_debug( - "%s: join (S,G)=%s rpt=%d wc=%d upstream=%s holdtime=%d from %s on %s", - __func__, pim_str_sg_dump(sg), - !!(source_flags & PIM_RPT_BIT_MASK), - !!(source_flags & PIM_WILDCARD_BIT_MASK), up_str, - holdtime, neigh_str, ifp->name); + zlog_debug("%s: join (S,G)=%pSG rpt=%d wc=%d upstream=%s holdtime=%d from %s on %s", + __func__, sg, + !!(source_flags & PIM_RPT_BIT_MASK), + !!(source_flags & PIM_WILDCARD_BIT_MASK), up_str, + holdtime, neigh_str, ifp->name); } pim_ifp = ifp->info; @@ -96,26 +95,23 @@ static void recv_join(struct interface *ifp, struct pim_neighbor *neigh, * our RP for the group, drop the message */ if (sg->src.s_addr != rp->rpf_addr.u.prefix4.s_addr) { - char received_rp[INET_ADDRSTRLEN]; char local_rp[INET_ADDRSTRLEN]; - pim_inet4_dump("<received?>", sg->src, received_rp, - sizeof(received_rp)); pim_inet4_dump("<local?>", rp->rpf_addr.u.prefix4, local_rp, sizeof(local_rp)); zlog_warn( - "%s: Specified RP(%s) in join is different than our configured RP(%s)", - __func__, received_rp, local_rp); + "%s: Specified RP(%pPAs) in join is different than our configured RP(%s)", + __func__, &sg->src, local_rp); return; } if (pim_is_grp_ssm(pim_ifp->pim, sg->grp)) { zlog_warn( - "%s: Specified Group(%pI4) in join is now in SSM, not allowed to create PIM state", + "%s: Specified Group(%pPA) in join is now in SSM, not allowed to create PIM state", __func__, &sg->grp); return; } - sg->src.s_addr = INADDR_ANY; + sg->src = PIMADDR_ANY; } /* Restart join expiry timer */ @@ -135,12 +131,12 @@ static void recv_prune(struct interface *ifp, struct pim_neighbor *neigh, pim_inet4_dump("<upstream?>", upstream, up_str, sizeof(up_str)); pim_inet4_dump("<neigh?>", neigh->source_addr, neigh_str, sizeof(neigh_str)); - zlog_debug( - "%s: prune (S,G)=%s rpt=%d wc=%d upstream=%s holdtime=%d from %s on %s", - __func__, pim_str_sg_dump(sg), - source_flags & PIM_RPT_BIT_MASK, - source_flags & PIM_WILDCARD_BIT_MASK, up_str, holdtime, - neigh_str, ifp->name); + zlog_debug("%s: prune (S,G)=%pSG rpt=%d wc=%d upstream=%s holdtime=%d from %s on %s", + __func__, sg, + source_flags & PIM_RPT_BIT_MASK, + source_flags & PIM_WILDCARD_BIT_MASK, up_str, + holdtime, + neigh_str, ifp->name); } pim_ifp = ifp->info; @@ -155,16 +151,11 @@ static void recv_prune(struct interface *ifp, struct pim_neighbor *neigh, * Received Prune(*,G) messages are processed even if the * RP in the message does not match RP(G). */ - if (PIM_DEBUG_PIM_TRACE) { - char received_rp[INET_ADDRSTRLEN]; - - pim_inet4_dump("<received?>", sg->src, received_rp, - sizeof(received_rp)); - zlog_debug("%s: Prune received with RP(%s) for %pSG", - __func__, received_rp, sg); - } + if (PIM_DEBUG_PIM_TRACE) + zlog_debug("%s: Prune received with RP(%pPAs) for %pSG", + __func__, &sg->src, sg); - sg->src.s_addr = INADDR_ANY; + sg->src = PIMADDR_ANY; } pim_ifchannel_prune(ifp, upstream, sg, source_flags, holdtime); @@ -281,16 +272,13 @@ int pim_joinprune_recv(struct interface *ifp, struct pim_neighbor *neigh, if (PIM_DEBUG_PIM_J_P) { char src_str[INET_ADDRSTRLEN]; char upstream_str[INET_ADDRSTRLEN]; - char group_str[INET_ADDRSTRLEN]; pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str)); pim_inet4_dump("<addr?>", msg_upstream_addr.u.prefix4, upstream_str, sizeof(upstream_str)); - pim_inet4_dump("<grp?>", sg.grp, group_str, - sizeof(group_str)); zlog_debug( - "%s: join/prune upstream=%s group=%s/32 join_src=%d prune_src=%d from %s on %s", - __func__, upstream_str, group_str, + "%s: join/prune upstream=%s group=%pPA/32 join_src=%d prune_src=%d from %s on %s", + __func__, upstream_str, &sg.grp, msg_num_joined_sources, msg_num_pruned_sources, src_str, ifp->name); } @@ -316,7 +304,7 @@ int pim_joinprune_recv(struct interface *ifp, struct pim_neighbor *neigh, msg_upstream_addr.u.prefix4, &sg, msg_source_flags); - if (sg.src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(sg.src)) { starg_ch = pim_ifchannel_find(ifp, &sg); if (starg_ch) pim_ifchannel_set_star_g_join_state( @@ -489,7 +477,7 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups) return -1; } - if (PIM_INADDR_IS_ANY(rpf->rpf_addr.u.prefix4)) { + if (rpf->rpf_addr.u.prefix4.s_addr == INADDR_ANY) { if (PIM_DEBUG_PIM_J_P) { char dst_str[INET_ADDRSTRLEN]; pim_inet4_dump("<dst?>", rpf->rpf_addr.u.prefix4, diff --git a/pimd/pim_jp_agg.c b/pimd/pim_jp_agg.c index 5c6f55e99d..feeef15f81 100644 --- a/pimd/pim_jp_agg.c +++ b/pimd/pim_jp_agg.c @@ -80,13 +80,7 @@ static int pim_jp_agg_src_cmp(void *arg1, void *arg2) if (!js1->is_join && js2->is_join) return 1; - if ((uint32_t)js1->up->sg.src.s_addr < (uint32_t)js2->up->sg.src.s_addr) - return -1; - - if ((uint32_t)js1->up->sg.src.s_addr > (uint32_t)js2->up->sg.src.s_addr) - return 1; - - return 0; + return pim_addr_cmp(js1->up->sg.src, js2->up->sg.src); } /* @@ -156,7 +150,7 @@ void pim_jp_agg_remove_group(struct list *group, struct pim_upstream *up, struct pim_jp_sources *js = NULL; for (ALL_LIST_ELEMENTS(group, node, nnode, jag)) { - if (jag->group.s_addr == up->sg.grp.s_addr) + if (!pim_addr_cmp(jag->group, up->sg.grp)) break; } @@ -202,7 +196,7 @@ int pim_jp_agg_is_in_list(struct list *group, struct pim_upstream *up) struct pim_jp_sources *js = NULL; for (ALL_LIST_ELEMENTS(group, node, nnode, jag)) { - if (jag->group.s_addr == up->sg.grp.s_addr) + if (!pim_addr_cmp(jag->group, up->sg.grp)) break; } @@ -276,14 +270,14 @@ void pim_jp_agg_add_group(struct list *group, struct pim_upstream *up, struct pim_jp_sources *js = NULL; for (ALL_LIST_ELEMENTS(group, node, nnode, jag)) { - if (jag->group.s_addr == up->sg.grp.s_addr) + if (!pim_addr_cmp(jag->group, up->sg.grp)) break; } if (!jag) { jag = XCALLOC(MTYPE_PIM_JP_AGG_GROUP, sizeof(struct pim_jp_agg_group)); - jag->group.s_addr = up->sg.grp.s_addr; + jag->group = up->sg.grp; jag->sources = list_new(); jag->sources->cmp = pim_jp_agg_src_cmp; jag->sources->del = (void (*)(void *))pim_jp_agg_src_free; @@ -378,7 +372,7 @@ void pim_jp_agg_single_upstream_send(struct pim_rpf *rpf, listnode_add(&groups, &jag); listnode_add(jag.sources, &js); - jag.group.s_addr = up->sg.grp.s_addr; + jag.group = up->sg.grp; js.up = up; js.is_join = is_join; diff --git a/pimd/pim_macro.c b/pimd/pim_macro.c index 81ef6962de..aa41033cea 100644 --- a/pimd/pim_macro.c +++ b/pimd/pim_macro.c @@ -128,7 +128,7 @@ int pim_macro_ch_lost_assert(const struct pim_ifchannel *ch) return 0; /* false */ } - if (PIM_INADDR_IS_ANY(ch->ifassert_winner)) + if (pim_addr_is_any(ch->ifassert_winner)) return 0; /* false */ /* AssertWinner(S,G,I) == me ? */ diff --git a/pimd/pim_mlag.c b/pimd/pim_mlag.c index 1f38b1c93d..f4ddc1bf64 100644 --- a/pimd/pim_mlag.c +++ b/pimd/pim_mlag.c @@ -174,8 +174,8 @@ bool pim_mlag_up_df_role_update(struct pim_instance *pim, /* If DF role changed on a (*,G) termination mroute update the * associated DF role on the inherited (S,G) entries */ - if ((up->sg.src.s_addr == INADDR_ANY) && - PIM_UPSTREAM_FLAG_TEST_MLAG_VXLAN(up->flags)) + if (pim_addr_is_any(up->sg.src) && + PIM_UPSTREAM_FLAG_TEST_MLAG_VXLAN(up->flags)) pim_vxlan_inherit_mlag_flags(pim, up, true /* inherit */); return true; @@ -255,17 +255,14 @@ static void pim_mlag_up_peer_add(struct mlag_mroute_add *msg) int flags = 0; pim_sgaddr sg; struct vrf *vrf; - char sg_str[PIM_SG_LEN]; memset(&sg, 0, sizeof(sg)); sg.src.s_addr = htonl(msg->source_ip); sg.grp.s_addr = htonl(msg->group_ip); - if (PIM_DEBUG_MLAG) - pim_str_sg_set(&sg, sg_str); if (PIM_DEBUG_MLAG) - zlog_debug("peer MLAG mroute add %s:%s cost %d", - msg->vrf_name, sg_str, msg->cost_to_rp); + zlog_debug("peer MLAG mroute add %s:%pSG cost %d", + msg->vrf_name, &sg, msg->cost_to_rp); /* XXX - this is not correct. we MUST cache updates to avoid losing * an entry because of race conditions with the peer switch. @@ -273,8 +270,9 @@ static void pim_mlag_up_peer_add(struct mlag_mroute_add *msg) vrf = vrf_lookup_by_name(msg->vrf_name); if (!vrf) { if (PIM_DEBUG_MLAG) - zlog_debug("peer MLAG mroute add failed %s:%s; no vrf", - msg->vrf_name, sg_str); + zlog_debug( + "peer MLAG mroute add failed %s:%pSG; no vrf", + msg->vrf_name, &sg); return; } pim = vrf->info; @@ -294,8 +292,9 @@ static void pim_mlag_up_peer_add(struct mlag_mroute_add *msg) if (!up) { if (PIM_DEBUG_MLAG) - zlog_debug("peer MLAG mroute add failed %s:%s", - vrf->name, sg_str); + zlog_debug( + "peer MLAG mroute add failed %s:%pSG", + vrf->name, &sg); return; } } @@ -329,23 +328,20 @@ static void pim_mlag_up_peer_del(struct mlag_mroute_del *msg) struct pim_instance *pim; pim_sgaddr sg; struct vrf *vrf; - char sg_str[PIM_SG_LEN]; memset(&sg, 0, sizeof(sg)); sg.src.s_addr = htonl(msg->source_ip); sg.grp.s_addr = htonl(msg->group_ip); - if (PIM_DEBUG_MLAG) - pim_str_sg_set(&sg, sg_str); if (PIM_DEBUG_MLAG) - zlog_debug("peer MLAG mroute del %s:%s", msg->vrf_name, - sg_str); + zlog_debug("peer MLAG mroute del %s:%pSG", msg->vrf_name, &sg); vrf = vrf_lookup_by_name(msg->vrf_name); if (!vrf) { if (PIM_DEBUG_MLAG) - zlog_debug("peer MLAG mroute del skipped %s:%s; no vrf", - msg->vrf_name, sg_str); + zlog_debug( + "peer MLAG mroute del skipped %s:%pSG; no vrf", + msg->vrf_name, &sg); return; } pim = vrf->info; @@ -353,8 +349,9 @@ static void pim_mlag_up_peer_del(struct mlag_mroute_del *msg) up = pim_upstream_find(pim, &sg); if (!up) { if (PIM_DEBUG_MLAG) - zlog_debug("peer MLAG mroute del skipped %s:%s; no up", - vrf->name, sg_str); + zlog_debug( + "peer MLAG mroute del skipped %s:%pSG; no up", + vrf->name, &sg); return; } diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index a01256dfb1..91b997f44a 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -189,9 +189,8 @@ static int pim_mroute_msg_nocache(int fd, struct interface *ifp, if (!(PIM_I_am_DR(pim_ifp))) { if (PIM_DEBUG_MROUTE_DETAIL) - zlog_debug( - "%s: Interface is not the DR blackholing incoming traffic for %s", - __func__, pim_str_sg_dump(&sg)); + zlog_debug("%s: Interface is not the DR blackholing incoming traffic for %pSG", + __func__, &sg); /* * We are not the DR, but we are still receiving packets @@ -258,7 +257,7 @@ static int pim_mroute_msg_wholepkt(int fd, struct interface *ifp, up = pim_upstream_find(pim_ifp->pim, &sg); if (!up) { pim_sgaddr star = sg; - star.src.s_addr = INADDR_ANY; + star.src = PIMADDR_ANY; up = pim_upstream_find(pim_ifp->pim, &star); @@ -268,9 +267,8 @@ static int pim_mroute_msg_wholepkt(int fd, struct interface *ifp, __func__, NULL); if (!up) { if (PIM_DEBUG_MROUTE) - zlog_debug( - "%s: Unable to create upstream information for %s", - __func__, pim_str_sg_dump(&sg)); + zlog_debug("%s: Unable to create upstream information for %pSG", + __func__, &sg); return 0; } pim_upstream_keep_alive_timer_start( @@ -284,9 +282,8 @@ static int pim_mroute_msg_wholepkt(int fd, struct interface *ifp, return 0; } if (PIM_DEBUG_MROUTE_DETAIL) { - zlog_debug( - "%s: Unable to find upstream channel WHOLEPKT%s", - __func__, pim_str_sg_dump(&sg)); + zlog_debug("%s: Unable to find upstream channel WHOLEPKT%pSG", + __func__, &sg); } return 0; } @@ -316,9 +313,8 @@ static int pim_mroute_msg_wholepkt(int fd, struct interface *ifp, if (!up->t_rs_timer) { if (pim_is_grp_ssm(pim_ifp->pim, sg.grp)) { if (PIM_DEBUG_PIM_REG) - zlog_debug( - "%s register forward skipped as group is SSM", - pim_str_sg_dump(&sg)); + zlog_debug("%pSG register forward skipped as group is SSM", + &sg); return 0; } @@ -361,18 +357,16 @@ static int pim_mroute_msg_wrongvif(int fd, struct interface *ifp, if (!ifp) { if (PIM_DEBUG_MROUTE) - zlog_debug( - "%s: WRONGVIF (S,G)=%s could not find input interface for input_vif_index=%d", - __func__, pim_str_sg_dump(&sg), msg->im_vif); + zlog_debug("%s: WRONGVIF (S,G)=%pSG could not find input interface for input_vif_index=%d", + __func__, &sg, msg->im_vif); return -1; } pim_ifp = ifp->info; if (!pim_ifp) { if (PIM_DEBUG_MROUTE) - zlog_debug( - "%s: WRONGVIF (S,G)=%s multicast not enabled on interface %s", - __func__, pim_str_sg_dump(&sg), ifp->name); + zlog_debug("%s: WRONGVIF (S,G)=%pSG multicast not enabled on interface %s", + __func__, &sg, ifp->name); return -2; } @@ -380,18 +374,16 @@ static int pim_mroute_msg_wrongvif(int fd, struct interface *ifp, if (!ch) { pim_sgaddr star_g = sg; if (PIM_DEBUG_MROUTE) - zlog_debug( - "%s: WRONGVIF (S,G)=%s could not find channel on interface %s", - __func__, pim_str_sg_dump(&sg), ifp->name); + zlog_debug("%s: WRONGVIF (S,G)=%pSG could not find channel on interface %s", + __func__, &sg, ifp->name); - star_g.src.s_addr = INADDR_ANY; + star_g.src = PIMADDR_ANY; ch = pim_ifchannel_find(ifp, &star_g); if (!ch) { if (PIM_DEBUG_MROUTE) - zlog_debug( - "%s: WRONGVIF (*,G)=%s could not find channel on interface %s", - __func__, pim_str_sg_dump(&star_g), - ifp->name); + zlog_debug("%s: WRONGVIF (*,G)=%pSG could not find channel on interface %s", + __func__, &star_g, + ifp->name); return -3; } } @@ -467,7 +459,7 @@ static int pim_mroute_msg_wrvifwhole(int fd, struct interface *ifp, } star_g = sg; - star_g.src.s_addr = INADDR_ANY; + star_g.src = PIMADDR_ANY; pim = pim_ifp->pim; /* @@ -558,9 +550,8 @@ static int pim_mroute_msg_wrvifwhole(int fd, struct interface *ifp, NULL); if (!up) { if (PIM_DEBUG_MROUTE) - zlog_debug( - "%s: WRONGVIF%s unable to create upstream on interface", - pim_str_sg_dump(&sg), ifp->name); + zlog_debug("%pSG: WRONGVIF%s unable to create upstream on interface", + &sg, ifp->name); return -2; } PIM_UPSTREAM_FLAG_SET_SRC_STREAM(up->flags); @@ -1218,9 +1209,8 @@ void pim_mroute_update_counters(struct channel_oil *c_oil) sg.src = c_oil->oil.mfcc_origin; sg.grp = c_oil->oil.mfcc_mcastgrp; - zlog_debug( - "Channel%s is not installed no need to collect data from kernel", - pim_str_sg_dump(&sg)); + zlog_debug("Channel%pSG is not installed no need to collect data from kernel", + &sg); } return; } @@ -1236,8 +1226,8 @@ void pim_mroute_update_counters(struct channel_oil *c_oil) sg.src = c_oil->oil.mfcc_origin; sg.grp = c_oil->oil.mfcc_mcastgrp; - zlog_warn("ioctl(SIOCGETSGCNT=%lu) failure for (S,G)=%s: errno=%d: %s", - (unsigned long)SIOCGETSGCNT, pim_str_sg_dump(&sg), + zlog_warn("ioctl(SIOCGETSGCNT=%lu) failure for (S,G)=%pSG: errno=%d: %s", + (unsigned long)SIOCGETSGCNT, &sg, errno, safe_strerror(errno)); return; } diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c index 673347b4f6..eb89040d42 100644 --- a/pimd/pim_msdp.c +++ b/pimd/pim_msdp.c @@ -244,7 +244,7 @@ static struct pim_msdp_sa *pim_msdp_sa_new(struct pim_instance *pim, sa->pim = pim; sa->sg = *sg; - pim_str_sg_set(sg, sa->sg_str); + snprintfrr(sa->sg_str, sizeof(sa->sg_str), "%pSG", sg); sa->rp = rp; sa->uptime = pim_time_monotonic_sec(); @@ -314,7 +314,7 @@ static void pim_msdp_sa_peer_ip_set(struct pim_msdp_sa *sa, } /* any time the peer ip changes also update the rp address */ - if (PIM_INADDR_ISNOT_ANY(sa->peer)) { + if (sa->peer.s_addr != INADDR_ANY) { old_mp = pim_msdp_peer_find(sa->pim, sa->peer); if (old_mp && old_mp->sa_cnt) { --old_mp->sa_cnt; @@ -624,15 +624,14 @@ void pim_msdp_up_join_state_changed(struct pim_instance *pim, } /* If this is not really an XG entry just move on */ - if ((xg_up->sg.src.s_addr != INADDR_ANY) - || (xg_up->sg.grp.s_addr == INADDR_ANY)) { + if (!pim_addr_is_any(xg_up->sg.src) || pim_addr_is_any(xg_up->sg.grp)) { return; } /* XXX: Need to maintain SAs per-group to avoid all this unnecessary * walking */ for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) { - if (sa->sg.grp.s_addr != xg_up->sg.grp.s_addr) { + if (pim_addr_cmp(sa->sg.grp, xg_up->sg.grp)) { continue; } pim_msdp_sa_upstream_update(sa, xg_up, "up-jp-change"); @@ -645,18 +644,18 @@ static void pim_msdp_up_xg_del(struct pim_instance *pim, pim_sgaddr *sg) struct pim_msdp_sa *sa; if (PIM_DEBUG_MSDP_INTERNAL) { - zlog_debug("MSDP %s del", pim_str_sg_dump(sg)); + zlog_debug("MSDP %pSG del", sg); } /* If this is not really an XG entry just move on */ - if ((sg->src.s_addr != INADDR_ANY) || (sg->grp.s_addr == INADDR_ANY)) { + if (!pim_addr_is_any(sg->src) || pim_addr_is_any(sg->grp)) { return; } /* XXX: Need to maintain SAs per-group to avoid all this unnecessary * walking */ for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) { - if (sa->sg.grp.s_addr != sg->grp.s_addr) { + if (pim_addr_cmp(sa->sg.grp, sg->grp)) { continue; } pim_msdp_sa_upstream_update(sa, NULL /* xg */, "up-jp-change"); @@ -666,9 +665,9 @@ static void pim_msdp_up_xg_del(struct pim_instance *pim, pim_sgaddr *sg) void pim_msdp_up_del(struct pim_instance *pim, pim_sgaddr *sg) { if (PIM_DEBUG_MSDP_INTERNAL) { - zlog_debug("MSDP up %s del", pim_str_sg_dump(sg)); + zlog_debug("MSDP up %pSG del", sg); } - if (sg->src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(sg->src)) { pim_msdp_up_xg_del(pim, sg); } else { pim_msdp_sa_local_del_on_up_del(pim, sg); @@ -680,7 +679,7 @@ static unsigned int pim_msdp_sa_hash_key_make(const void *p) { const struct pim_msdp_sa *sa = p; - return (jhash_2words(sa->sg.src.s_addr, sa->sg.grp.s_addr, 0)); + return pim_sgaddr_hash(sa->sg, 0); } static bool pim_msdp_sa_hash_eq(const void *p1, const void *p2) @@ -688,8 +687,7 @@ static bool pim_msdp_sa_hash_eq(const void *p1, const void *p2) const struct pim_msdp_sa *sa1 = p1; const struct pim_msdp_sa *sa2 = p2; - return ((sa1->sg.src.s_addr == sa2->sg.src.s_addr) - && (sa1->sg.grp.s_addr == sa2->sg.grp.s_addr)); + return !pim_sgaddr_cmp(sa1->sg, sa2->sg); } static int pim_msdp_sa_comp(const void *p1, const void *p2) @@ -697,19 +695,7 @@ static int pim_msdp_sa_comp(const void *p1, const void *p2) const struct pim_msdp_sa *sa1 = p1; const struct pim_msdp_sa *sa2 = p2; - if (ntohl(sa1->sg.grp.s_addr) < ntohl(sa2->sg.grp.s_addr)) - return -1; - - if (ntohl(sa1->sg.grp.s_addr) > ntohl(sa2->sg.grp.s_addr)) - return 1; - - if (ntohl(sa1->sg.src.s_addr) < ntohl(sa2->sg.src.s_addr)) - return -1; - - if (ntohl(sa1->sg.src.s_addr) > ntohl(sa2->sg.src.s_addr)) - return 1; - - return 0; + return pim_sgaddr_cmp(sa1->sg, sa2->sg); } /* RFC-3618:Sec-10.1.3 - Peer-RPF forwarding */ diff --git a/pimd/pim_msdp_packet.c b/pimd/pim_msdp_packet.c index 64fdbaa89b..395bbf6f26 100644 --- a/pimd/pim_msdp_packet.c +++ b/pimd/pim_msdp_packet.c @@ -77,7 +77,7 @@ static void pim_msdp_pkt_sa_dump_one(struct stream *s) sg.grp.s_addr = stream_get_ipv4(s); sg.src.s_addr = stream_get_ipv4(s); - zlog_debug(" sg %s", pim_str_sg_dump(&sg)); + zlog_debug(" sg %pSG", &sg); } static void pim_msdp_pkt_sa_dump(struct stream *s) @@ -513,7 +513,7 @@ static void pim_msdp_pkt_sa_rx_one(struct pim_msdp_peer *mp, struct in_addr rp) return; } if (PIM_DEBUG_MSDP_PACKETS) { - zlog_debug(" sg %s", pim_str_sg_dump(&sg)); + zlog_debug(" sg %pSG", &sg); } pim_msdp_sa_ref(mp->pim, mp, &sg, rp); diff --git a/pimd/pim_msg.c b/pimd/pim_msg.c index 65b6405c81..c493ded0c6 100644 --- a/pimd/pim_msg.c +++ b/pimd/pim_msg.c @@ -115,7 +115,7 @@ size_t pim_msg_get_jp_group_size(struct list *sources) size += sizeof(struct pim_encoded_source_ipv4) * sources->count; js = listgetdata(listhead(sources)); - if (js && js->up->sg.src.s_addr == INADDR_ANY && js->is_join) { + if (js && pim_addr_is_any(js->up->sg.src) && js->is_join) { struct pim_upstream *child, *up; struct listnode *up_node; @@ -193,7 +193,7 @@ size_t pim_msg_build_jp_groups(struct pim_jp_groups *grp, else grp->prunes++; - if (source->up->sg.src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(source->up->sg.src)) { struct pim_instance *pim = source->up->channel_oil->pim; struct pim_rpf *rpf = pim_rp_g(pim, source->up->sg.grp); bits = PIM_ENCODE_SPARSE_BIT | PIM_ENCODE_WC_BIT diff --git a/pimd/pim_nht.c b/pimd/pim_nht.c index 94a624e2c4..26ca48543f 100644 --- a/pimd/pim_nht.c +++ b/pimd/pim_nht.c @@ -234,7 +234,7 @@ void pim_delete_tracked_nexthop(struct pim_instance *pim, struct prefix *addr, struct prefix grp; struct rp_info *trp_info; - if (upstream->sg.src.s_addr != INADDR_ANY) + if (!pim_addr_is_any(upstream->sg.src)) continue; grp.family = AF_INET; diff --git a/pimd/pim_oil.c b/pimd/pim_oil.c index c094e99a71..b17f821dd6 100644 --- a/pimd/pim_oil.c +++ b/pimd/pim_oil.c @@ -45,8 +45,8 @@ char *pim_channel_oil_dump(struct channel_oil *c_oil, char *buf, size_t size) sg.src = c_oil->oil.mfcc_origin; sg.grp = c_oil->oil.mfcc_mcastgrp; ifp = pim_if_find_by_vif_index(c_oil->pim, c_oil->oil.mfcc_parent); - snprintf(buf, size, "%s IIF: %s, OIFS: ", pim_str_sg_dump(&sg), - ifp ? ifp->name : "(?)"); + snprintfrr(buf, size, "%pSG IIF: %s, OIFS: ", &sg, + ifp ? ifp->name : "(?)"); out = buf + strlen(buf); for (i = 0; i < MAXVIFS; i++) { @@ -163,8 +163,7 @@ struct channel_oil *pim_channel_oil_add(struct pim_instance *pim, rb_pim_oil_add(&pim->channel_oil_head, c_oil); if (PIM_DEBUG_MROUTE) - zlog_debug("%s(%s): c_oil %s add", - __func__, name, pim_str_sg_dump(sg)); + zlog_debug("%s(%s): c_oil %pSG add", __func__, name, sg); return c_oil; } @@ -327,8 +326,8 @@ void pim_channel_del_inherited_oif(struct channel_oil *c_oil, /* if an inherited OIF is being removed join-desired can change * if the inherited OIL is now empty and KAT is running */ - if (up && up->sg.src.s_addr != INADDR_ANY && - pim_upstream_empty_inherited_olist(up)) + if (up && !pim_addr_is_any(up->sg.src) && + pim_upstream_empty_inherited_olist(up)) pim_upstream_update_join_desired(up->pim, up); } diff --git a/pimd/pim_register.c b/pimd/pim_register.c index e7bbeb4f62..855d912566 100644 --- a/pimd/pim_register.c +++ b/pimd/pim_register.c @@ -75,9 +75,8 @@ void pim_register_stop_send(struct interface *ifp, pim_sgaddr *sg, struct prefix p; if (PIM_DEBUG_PIM_REG) { - zlog_debug("Sending Register stop for %s to %pI4 on %s", - pim_str_sg_dump(sg), &originator, - ifp->name); + zlog_debug("Sending Register stop for %pSG to %pI4 on %s", sg, + &originator, ifp->name); } memset(buffer, 0, 10000); @@ -377,14 +376,14 @@ int pim_register_recv(struct interface *ifp, struct in_addr dest_addr, char src_str[INET_ADDRSTRLEN]; pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str)); - zlog_debug("Received Register message%s from %s on %s, rp: %d", - pim_str_sg_dump(&sg), src_str, ifp->name, i_am_rp); + zlog_debug("Received Register message%pSG from %s on %s, rp: %d", + &sg, src_str, ifp->name, i_am_rp); } if (pim_is_grp_ssm(pim_ifp->pim, sg.grp)) { - if (sg.src.s_addr == INADDR_ANY) { + if (pim_addr_is_any(sg.src)) { zlog_warn( - "%s: Received Register message for Group(%pI4) is now in SSM, dropping the packet", + "%s: Received Register message for Group(%pPA) is now in SSM, dropping the packet", __func__, &sg.grp); /* Drop Packet Silently */ return 0; @@ -515,13 +514,11 @@ int pim_register_recv(struct interface *ifp, struct in_addr dest_addr, } else { if (PIM_DEBUG_PIM_REG) { if (!i_am_rp) - zlog_debug( - "Received Register packet for %s, Rejecting packet because I am not the RP configured for group", - pim_str_sg_dump(&sg)); + zlog_debug("Received Register packet for %pSG, Rejecting packet because I am not the RP configured for group", + &sg); else - zlog_debug( - "Received Register packet for %s, Rejecting packet because the dst ip address is not the actual RP", - pim_str_sg_dump(&sg)); + zlog_debug("Received Register packet for %pSG, Rejecting packet because the dst ip address is not the actual RP", + &sg); } pim_register_stop_send(ifp, &sg, dest_addr, src_addr); } diff --git a/pimd/pim_rp.c b/pimd/pim_rp.c index d356aff9f1..f35adb0cea 100644 --- a/pimd/pim_rp.c +++ b/pimd/pim_rp.c @@ -536,8 +536,8 @@ int pim_rp_new(struct pim_instance *pim, struct in_addr rp_addr, /* Find (*, G) upstream whose RP is not * configured yet */ - if ((up->upstream_addr.s_addr == INADDR_ANY) - && (up->sg.src.s_addr == INADDR_ANY)) { + if ((up->upstream_addr.s_addr == INADDR_ANY) && + pim_addr_is_any(up->sg.src)) { struct prefix grp; struct rp_info *trp_info; @@ -628,7 +628,7 @@ int pim_rp_new(struct pim_instance *pim, struct in_addr rp_addr, route_node_get_lock_count(rn)); 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)) { struct prefix grp; struct rp_info *trp_info; @@ -778,9 +778,9 @@ int pim_rp_del(struct pim_instance *pim, struct in_addr rp_addr, /* Find the upstream (*, G) whose upstream address is * same as the deleted RP */ - if ((up->upstream_addr.s_addr - == rp_info->rp.rpf_addr.u.prefix4.s_addr) - && (up->sg.src.s_addr == INADDR_ANY)) { + if ((up->upstream_addr.s_addr == + rp_info->rp.rpf_addr.u.prefix4.s_addr) && + pim_addr_is_any(up->sg.src)) { struct prefix grp; grp.family = AF_INET; grp.prefixlen = IPV4_MAX_BITLEN; @@ -826,9 +826,9 @@ int pim_rp_del(struct pim_instance *pim, struct in_addr rp_addr, /* Find the upstream (*, G) whose upstream address is same as * the deleted RP */ - if ((up->upstream_addr.s_addr - == rp_info->rp.rpf_addr.u.prefix4.s_addr) - && (up->sg.src.s_addr == INADDR_ANY)) { + if ((up->upstream_addr.s_addr == + rp_info->rp.rpf_addr.u.prefix4.s_addr) && + pim_addr_is_any(up->sg.src)) { struct prefix grp; grp.family = AF_INET; @@ -914,7 +914,7 @@ int pim_rp_change(struct pim_instance *pim, struct in_addr new_rp_addr, listnode_add_sort(pim->rp_list, rp_info); 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)) { struct prefix grp; struct rp_info *trp_info; diff --git a/pimd/pim_rpf.c b/pimd/pim_rpf.c index aa89431d32..1e865a3956 100644 --- a/pimd/pim_rpf.c +++ b/pimd/pim_rpf.c @@ -259,7 +259,7 @@ enum pim_rpf_result pim_rpf_update(struct pim_instance *pim, grp.prefixlen = IPV4_MAX_BITLEN; grp.u.prefix4 = up->sg.grp; - if ((up->sg.src.s_addr == INADDR_ANY && I_am_RP(pim, up->sg.grp)) || + if ((pim_addr_is_any(up->sg.src) && I_am_RP(pim, up->sg.grp)) || PIM_UPSTREAM_FLAG_TEST_FHR(up->flags)) neigh_needed = false; pim_find_or_track_nexthop(pim, &nht_p, up, NULL, NULL); diff --git a/pimd/pim_str.c b/pimd/pim_str.c index 180ed69fd2..8744d62d14 100644 --- a/pimd/pim_str.c +++ b/pimd/pim_str.c @@ -41,13 +41,3 @@ void pim_addr_dump(const char *onfail, struct prefix *p, char *buf, errno = save_errno; } - -char *pim_str_sg_dump(const pim_sgaddr *sg) -{ - static char sg_str[PIM_SG_LEN]; - - pim_str_sg_set(sg, sg_str); - - return sg_str; -} - diff --git a/pimd/pim_str.h b/pimd/pim_str.h index f6d209b79b..be8b6a9f4f 100644 --- a/pimd/pim_str.h +++ b/pimd/pim_str.h @@ -39,31 +39,9 @@ #define PIM_SG_LEN PREFIX_SG_STR_LEN #define pim_inet4_dump prefix_mcast_inet4_dump -static inline const char *pim_str_sg_set(const pim_sgaddr *sg, char *str) -{ - snprintfrr(str, PREFIX_SG_STR_LEN, "%pSG", sg); - return str; -} - -static inline void pim_addr_copy(pim_addr *dest, pim_addr *source) -{ - dest->s_addr = source->s_addr; -} - -static inline int pim_is_addr_any(pim_addr addr) -{ - return (addr.s_addr == INADDR_ANY); -} - -static inline int pim_addr_cmp(pim_addr addr1, pim_addr addr2) -{ - return IPV4_ADDR_CMP(&addr1, &addr2); -} - void pim_addr_dump(const char *onfail, struct prefix *p, char *buf, int buf_size); void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf, int buf_size); -char *pim_str_sg_dump(const pim_sgaddr *sg); #endif 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)) diff --git a/pimd/pim_vty.c b/pimd/pim_vty.c index 8c0132a9ac..c543c63eeb 100644 --- a/pimd/pim_vty.c +++ b/pimd/pim_vty.c @@ -340,8 +340,7 @@ int pim_interface_config_write(struct vty *vty) } /* update source */ - if (PIM_INADDR_ISNOT_ANY( - pim_ifp->update_source)) { + if (!pim_addr_is_any(pim_ifp->update_source)) { char src_str[INET_ADDRSTRLEN]; pim_inet4_dump("<src?>", pim_ifp->update_source, diff --git a/pimd/pim_vxlan.c b/pimd/pim_vxlan.c index 3aa8bacb84..c1e7be5870 100644 --- a/pimd/pim_vxlan.c +++ b/pimd/pim_vxlan.c @@ -720,8 +720,7 @@ static unsigned int pim_vxlan_sg_hash_key_make(const void *p) { const struct pim_vxlan_sg *vxlan_sg = p; - return (jhash_2words(vxlan_sg->sg.src.s_addr, - vxlan_sg->sg.grp.s_addr, 0)); + return pim_sgaddr_hash(vxlan_sg->sg, 0); } static bool pim_vxlan_sg_hash_eq(const void *p1, const void *p2) @@ -729,8 +728,7 @@ static bool pim_vxlan_sg_hash_eq(const void *p1, const void *p2) const struct pim_vxlan_sg *sg1 = p1; const struct pim_vxlan_sg *sg2 = p2; - return ((sg1->sg.src.s_addr == sg2->sg.src.s_addr) - && (sg1->sg.grp.s_addr == sg2->sg.grp.s_addr)); + return !pim_sgaddr_cmp(sg1->sg, sg2->sg); } static struct pim_vxlan_sg *pim_vxlan_sg_new(struct pim_instance *pim, @@ -742,7 +740,7 @@ static struct pim_vxlan_sg *pim_vxlan_sg_new(struct pim_instance *pim, vxlan_sg->pim = pim; vxlan_sg->sg = *sg; - pim_str_sg_set(sg, vxlan_sg->sg_str); + snprintfrr(vxlan_sg->sg_str, sizeof(vxlan_sg->sg_str), "%pSG", sg); if (PIM_DEBUG_VXLAN) zlog_debug("vxlan SG %s alloc", vxlan_sg->sg_str); diff --git a/pimd/pim_vxlan.h b/pimd/pim_vxlan.h index cd3de23e61..96882918ac 100644 --- a/pimd/pim_vxlan.h +++ b/pimd/pim_vxlan.h @@ -109,14 +109,14 @@ struct pim_vxlan { */ static inline bool pim_vxlan_is_orig_mroute(struct pim_vxlan_sg *vxlan_sg) { - return (vxlan_sg->sg.src.s_addr != INADDR_ANY); + return !pim_addr_is_any(vxlan_sg->sg.src); } static inline bool pim_vxlan_is_local_sip(struct pim_upstream *up) { - return (up->sg.src.s_addr != INADDR_ANY) && - up->rpf.source_nexthop.interface && - if_is_loopback(up->rpf.source_nexthop.interface); + return !pim_addr_is_any(up->sg.src) && + up->rpf.source_nexthop.interface && + if_is_loopback(up->rpf.source_nexthop.interface); } static inline bool pim_vxlan_is_term_dev_cfg(struct pim_instance *pim, diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index 05b6f23ed8..2efafd4b9b 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -340,14 +340,9 @@ static int pim_zebra_vxlan_sg_proc(ZAPI_CALLBACK_ARGS) stream_get(&sg.src.s_addr, s, prefixlen); stream_get(&sg.grp.s_addr, s, prefixlen); - if (PIM_DEBUG_ZEBRA) { - char sg_str[PIM_SG_LEN]; - - pim_str_sg_set(&sg, sg_str); - zlog_debug("%u:recv SG %s %s", vrf_id, - (cmd == ZEBRA_VXLAN_SG_ADD)?"add":"del", - sg_str); - } + if (PIM_DEBUG_ZEBRA) + zlog_debug("%u:recv SG %s %pSG", vrf_id, + (cmd == ZEBRA_VXLAN_SG_ADD) ? "add" : "del", &sg); if (cmd == ZEBRA_VXLAN_SG_ADD) pim_vxlan_sg_add(pim, &sg); @@ -520,9 +515,8 @@ static void igmp_source_forward_reevaluate_one(struct pim_instance *pim, if (ch && (ch->local_ifmembership == PIM_IFMEMBERSHIP_INCLUDE)) { if (PIM_DEBUG_PIM_EVENTS) - zlog_debug( - "local membership del for %s as G is now SSM", - pim_str_sg_dump(&sg)); + zlog_debug("local membership del for %pSG as G is now SSM", + &sg); pim_ifchannel_local_membership_del(group->interface, &sg); } @@ -531,9 +525,8 @@ static void igmp_source_forward_reevaluate_one(struct pim_instance *pim, if (!ch || (ch->local_ifmembership == PIM_IFMEMBERSHIP_NOINFO)) { if (PIM_DEBUG_PIM_EVENTS) - zlog_debug( - "local membership add for %s as G is now ASM", - pim_str_sg_dump(&sg)); + zlog_debug("local membership add for %pSG as G is now ASM", + &sg); pim_ifchannel_local_membership_add( group->interface, &sg, false /*is_vxlan*/); } @@ -569,7 +562,7 @@ void igmp_source_forward_reevaluate_all(struct pim_instance *pim) RB_FOREACH_SAFE (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb, ch_temp) { if (pim_is_grp_ssm(pim, ch->sg.grp)) { - if (ch->sg.src.s_addr == INADDR_ANY) + if (pim_addr_is_any(ch->sg.src)) pim_ifchannel_delete(ch); } } @@ -590,8 +583,7 @@ void igmp_source_forward_start(struct pim_instance *pim, sg.grp = source->source_group->group_addr; if (PIM_DEBUG_IGMP_TRACE) { - zlog_debug("%s: (S,G)=%s oif=%s fwd=%d", __func__, - pim_str_sg_dump(&sg), + zlog_debug("%s: (S,G)=%pSG oif=%s fwd=%d", __func__, &sg, source->source_group->interface->name, IGMP_SOURCE_TEST_FORWARDING(source->source_flags)); } @@ -655,10 +647,9 @@ void igmp_source_forward_start(struct pim_instance *pim, pim_inet4_dump("<source?>", vif_source, buf2, sizeof(buf2)); - zlog_debug( - "%s: NHT %s vif_source %s vif_index:%d ", - __func__, pim_str_sg_dump(&sg), buf2, - input_iface_vif_index); + zlog_debug("%s: NHT %pSG vif_source %s vif_index:%d ", + __func__, &sg, buf2, + input_iface_vif_index); } if (input_iface_vif_index < 1) { @@ -689,13 +680,12 @@ void igmp_source_forward_start(struct pim_instance *pim, /* ignore request for looped MFC entry */ if (PIM_DEBUG_IGMP_TRACE) { - zlog_debug( - "%s: ignoring request for looped MFC entry (S,G)=%s: oif=%s vif_index=%d", - __func__, - pim_str_sg_dump(&sg), - source->source_group - ->interface->name, - input_iface_vif_index); + zlog_debug("%s: ignoring request for looped MFC entry (S,G)=%pSG: oif=%s vif_index=%d", + __func__, + &sg, + source->source_group + ->interface->name, + input_iface_vif_index); } return; } @@ -704,10 +694,9 @@ void igmp_source_forward_start(struct pim_instance *pim, pim_channel_oil_add(pim, &sg, __func__); if (!source->source_channel_oil) { if (PIM_DEBUG_IGMP_TRACE) { - zlog_debug( - "%s %s: could not create OIL for channel (S,G)=%s", - __FILE__, __func__, - pim_str_sg_dump(&sg)); + zlog_debug("%s %s: could not create OIL for channel (S,G)=%pSG", + __FILE__, __func__, + &sg); } return; } @@ -728,10 +717,9 @@ void igmp_source_forward_start(struct pim_instance *pim, } } else { if (PIM_DEBUG_IGMP_TRACE) - zlog_debug( - "%s: %s was received on %s interface but we are not DR for that interface", - __func__, pim_str_sg_dump(&sg), - group->interface->name); + zlog_debug("%s: %pSG was received on %s interface but we are not DR for that interface", + __func__, &sg, + group->interface->name); return; } @@ -742,8 +730,8 @@ void igmp_source_forward_start(struct pim_instance *pim, if (!pim_ifchannel_local_membership_add(group->interface, &sg, false /*is_vxlan*/)) { if (PIM_DEBUG_MROUTE) - zlog_warn("%s: Failure to add local membership for %s", - __func__, pim_str_sg_dump(&sg)); + zlog_warn("%s: Failure to add local membership for %pSG", + __func__, &sg); pim_channel_del_oif(source->source_channel_oil, group->interface, PIM_OIF_FLAG_PROTO_IGMP, @@ -769,8 +757,7 @@ void igmp_source_forward_stop(struct gm_source *source) sg.grp = source->source_group->group_addr; if (PIM_DEBUG_IGMP_TRACE) { - zlog_debug("%s: (S,G)=%s oif=%s fwd=%d", __func__, - pim_str_sg_dump(&sg), + zlog_debug("%s: (S,G)=%pSG oif=%s fwd=%d", __func__, &sg, source->source_group->interface->name, IGMP_SOURCE_TEST_FORWARDING(source->source_flags)); } @@ -819,21 +806,9 @@ void pim_forward_start(struct pim_ifchannel *ch) struct pim_upstream *up = ch->upstream; uint32_t mask = 0; - if (PIM_DEBUG_PIM_TRACE) { - char source_str[INET_ADDRSTRLEN]; - char group_str[INET_ADDRSTRLEN]; - char upstream_str[INET_ADDRSTRLEN]; - - pim_inet4_dump("<source?>", ch->sg.src, source_str, - sizeof(source_str)); - pim_inet4_dump("<group?>", ch->sg.grp, group_str, - sizeof(group_str)); - pim_inet4_dump("<upstream?>", up->upstream_addr, upstream_str, - sizeof(upstream_str)); - zlog_debug("%s: (S,G)=(%s,%s) oif=%s (%pI4)", __func__, - source_str, group_str, ch->interface->name, - &up->upstream_addr); - } + if (PIM_DEBUG_PIM_TRACE) + zlog_debug("%s: (S,G)=%pSG oif=%s (%pI4)", __func__, &ch->sg, + ch->interface->name, &up->upstream_addr); if (PIM_IF_FLAG_TEST_PROTO_IGMP(ch->flags)) mask = PIM_OIF_FLAG_PROTO_IGMP; diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c index 755b9b1320..5997cc25a4 100644 --- a/pimd/pim_zlookup.c +++ b/pimd/pim_zlookup.c @@ -535,10 +535,9 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) more.src = c_oil->oil.mfcc_origin; more.grp = c_oil->oil.mfcc_mcastgrp; - zlog_debug( - "Sending Request for New Channel Oil Information%s VIIF %d(%s)", - pim_str_sg_dump(&more), c_oil->oil.mfcc_parent, - c_oil->pim->vrf->name); + zlog_debug("Sending Request for New Channel Oil Information%pSG VIIF %d(%s)", + &more, c_oil->oil.mfcc_parent, + c_oil->pim->vrf->name); } if (!ifp) @@ -593,9 +592,8 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) more.grp = c_oil->oil.mfcc_mcastgrp; flog_err( EC_LIB_ZAPI_MISSMATCH, - "%s: Received wrong %s(%s) information requested", - __func__, pim_str_sg_dump(&more), - c_oil->pim->vrf->name); + "%s: Received wrong %pSG(%s) information requested", + __func__, &more, c_oil->pim->vrf->name); } zclient_lookup_failed(zlookup); return -3; diff --git a/pimd/pimd.h b/pimd/pimd.h index 5ba29f9c41..7732dc5b74 100644 --- a/pimd/pimd.h +++ b/pimd/pimd.h @@ -83,8 +83,6 @@ #define PIM_FORCE_BOOLEAN(expr) ((expr) != 0) #define PIM_NET_INADDR_ANY (htonl(INADDR_ANY)) -#define PIM_INADDR_IS_ANY(addr) (addr).s_addr == PIM_NET_INADDR_ANY -#define PIM_INADDR_ISNOT_ANY(addr) ((addr).s_addr != PIM_NET_INADDR_ANY) /* struct in_addr addr */ #define PIM_MASK_PIM_EVENTS (1 << 0) #define PIM_MASK_PIM_EVENTS_DETAIL (1 << 1) diff --git a/tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py b/tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py index 138512bc62..8a7192be29 100644 --- a/tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py +++ b/tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py @@ -18,7 +18,7 @@ # OF THIS SOFTWARE. # -""" +r""" Reference: https://www.cmand.org/communityexploration --y2-- diff --git a/tests/topotests/bgp_l3vpn_to_bgp_direct/customize.py b/tests/topotests/bgp_l3vpn_to_bgp_direct/customize.py index 7d7a4bd155..36bfdfe068 100644 --- a/tests/topotests/bgp_l3vpn_to_bgp_direct/customize.py +++ b/tests/topotests/bgp_l3vpn_to_bgp_direct/customize.py @@ -21,7 +21,7 @@ # OF THIS SOFTWARE. # -""" +r""" customize.py: Simple FRR MPLS L3VPN test topology | diff --git a/tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py b/tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py index fce8e708f2..5161d8471f 100644 --- a/tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py +++ b/tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py @@ -21,7 +21,7 @@ # OF THIS SOFTWARE. # -""" +r""" customize.py: Simple FRR MPLS L3VPN test topology | diff --git a/tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py b/tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py index 9c13c1c07e..9f4399d6d5 100644 --- a/tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py +++ b/tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py @@ -22,7 +22,7 @@ # OF THIS SOFTWARE. # -""" +r""" test_bgp_multiview_topo1.py: Simple FRR Route-Server Test +----------+ +----------+ +----------+ +----------+ +----------+ diff --git a/tests/topotests/bgp_rfapi_basic_sanity/customize.py b/tests/topotests/bgp_rfapi_basic_sanity/customize.py index 1a86746e37..c82fe8321d 100644 --- a/tests/topotests/bgp_rfapi_basic_sanity/customize.py +++ b/tests/topotests/bgp_rfapi_basic_sanity/customize.py @@ -22,7 +22,7 @@ # OF THIS SOFTWARE. # -""" +r""" customize.py: Simple FRR MPLS L3VPN test topology +---------+ diff --git a/tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py b/tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py index 3608c5a48b..01f3fe1828 100644 --- a/tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py +++ b/tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py @@ -21,7 +21,7 @@ # OF THIS SOFTWARE. # -""" +r""" test_ldp_oc_acl_topo1.py: Simple FRR LDP Test +---------+ diff --git a/tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py b/tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py index 972692691d..4faaf45c17 100644 --- a/tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py +++ b/tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py @@ -21,7 +21,7 @@ # OF THIS SOFTWARE. # -""" +r""" test_ldp_oc_topo1.py: Simple FRR LDP Test +---------+ diff --git a/tests/topotests/ldp_topo1/test_ldp_topo1.py b/tests/topotests/ldp_topo1/test_ldp_topo1.py index 4a33edb9d1..8d69787236 100644 --- a/tests/topotests/ldp_topo1/test_ldp_topo1.py +++ b/tests/topotests/ldp_topo1/test_ldp_topo1.py @@ -22,7 +22,7 @@ # OF THIS SOFTWARE. # -""" +r""" test_ldp_topo1.py: Simple FRR LDP Test +---------+ diff --git a/tests/topotests/ospf6_topo1/test_ospf6_topo1.py b/tests/topotests/ospf6_topo1/test_ospf6_topo1.py index 99379354f8..53d84e6192 100644 --- a/tests/topotests/ospf6_topo1/test_ospf6_topo1.py +++ b/tests/topotests/ospf6_topo1/test_ospf6_topo1.py @@ -22,7 +22,7 @@ # OF THIS SOFTWARE. # -""" +r""" test_ospf6_topo1.py: -----\ diff --git a/tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py b/tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py index ac4a23da96..f823d5aeff 100755 --- a/tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py +++ b/tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py @@ -23,7 +23,7 @@ # OF THIS SOFTWARE. # -""" +r""" test_ospf6_topo1_vrf.py: -----\ |
