summaryrefslogtreecommitdiff
path: root/pimd/pim_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_cmd.c')
-rw-r--r--pimd/pim_cmd.c232
1 files changed, 43 insertions, 189 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index e5ee7a82ad..81b3ab2979 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -308,14 +308,12 @@ static void json_object_pim_ifp_add(struct json_object *json,
struct interface *ifp)
{
struct pim_interface *pim_ifp;
- char buf[PREFIX_STRLEN];
pim_ifp = ifp->info;
json_object_string_add(json, "name", ifp->name);
json_object_string_add(json, "state", if_is_up(ifp) ? "up" : "down");
- json_object_string_add(json, "address",
- inet_ntop(AF_INET, &pim_ifp->primary_address,
- buf, sizeof(buf)));
+ json_object_string_addf(json, "address", "%pI4",
+ &pim_ifp->primary_address);
json_object_int_add(json, "index", ifp->ifindex);
if (if_is_multicast(ifp))
@@ -489,7 +487,6 @@ static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty,
struct interface *ifp;
time_t now;
char buf[PREFIX_STRLEN];
- char quer_buf[PREFIX_STRLEN];
json_object *json = NULL;
json_object *json_row = NULL;
@@ -511,7 +508,7 @@ static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty,
if (!pim_ifp)
continue;
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list, sock_node,
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->socket_list, sock_node,
igmp)) {
char uptime[10];
char query_hhmmss[10];
@@ -528,7 +525,7 @@ static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty,
json_object_string_add(json_row, "upTime",
uptime);
json_object_int_add(json_row, "version",
- pim_ifp->igmp_version);
+ pim_ifp->version);
if (igmp->t_igmp_query_timer) {
json_object_boolean_true_add(json_row,
@@ -537,10 +534,9 @@ static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty,
"queryTimer",
query_hhmmss);
}
- json_object_string_add(
- json_row, "querierIp",
- inet_ntop(AF_INET, &igmp->querier_addr,
- quer_buf, sizeof(quer_buf)));
+ json_object_string_addf(json_row, "querierIp",
+ "%pI4",
+ &igmp->querier_addr);
json_object_object_add(json, ifp->name,
json_row);
@@ -559,7 +555,7 @@ static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty,
: "down",
inet_ntop(AF_INET, &igmp->ifaddr, buf,
sizeof(buf)),
- pim_ifp->igmp_version,
+ pim_ifp->version,
igmp->t_igmp_query_timer ? "local"
: "other",
&igmp->querier_addr, query_hhmmss,
@@ -584,7 +580,6 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
struct listnode *sock_node;
struct pim_interface *pim_ifp;
char uptime[10];
- char quer_buf[PREFIX_STRLEN];
char query_hhmmss[10];
char other_hhmmss[10];
int found_ifname = 0;
@@ -615,7 +610,7 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
if (strcmp(ifname, "detail") && strcmp(ifname, ifp->name))
continue;
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list, sock_node,
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->socket_list, sock_node,
igmp)) {
found_ifname = 1;
pim_time_uptime(uptime, sizeof(uptime),
@@ -630,35 +625,33 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
gmi_msec = PIM_IGMP_GMI_MSEC(
igmp->querier_robustness_variable,
igmp->querier_query_interval,
- pim_ifp->igmp_query_max_response_time_dsec);
+ pim_ifp->query_max_response_time_dsec);
- sqi = PIM_IGMP_SQI(
- pim_ifp->igmp_default_query_interval);
+ sqi = PIM_IGMP_SQI(pim_ifp->default_query_interval);
oqpi_msec = PIM_IGMP_OQPI_MSEC(
igmp->querier_robustness_variable,
igmp->querier_query_interval,
- pim_ifp->igmp_query_max_response_time_dsec);
+ pim_ifp->query_max_response_time_dsec);
lmqt_msec = PIM_IGMP_LMQT_MSEC(
- pim_ifp->igmp_specific_query_max_response_time_dsec,
- pim_ifp->igmp_last_member_query_count);
+ pim_ifp->specific_query_max_response_time_dsec,
+ pim_ifp->last_member_query_count);
ohpi_msec =
PIM_IGMP_OHPI_DSEC(
igmp->querier_robustness_variable,
igmp->querier_query_interval,
- pim_ifp->igmp_query_max_response_time_dsec)
+ pim_ifp->query_max_response_time_dsec)
* 100;
- qri_msec = pim_ifp->igmp_query_max_response_time_dsec
- * 100;
+ qri_msec = pim_ifp->query_max_response_time_dsec * 100;
if (pim_ifp->pim_sock_fd >= 0)
mloop = pim_socket_mcastloop_get(
pim_ifp->pim_sock_fd);
else
mloop = 0;
- lmqc = pim_ifp->igmp_last_member_query_count;
+ lmqc = pim_ifp->last_member_query_count;
if (uj) {
json_row = json_object_new_object();
@@ -669,10 +662,9 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
igmp->t_igmp_query_timer
? "local"
: "other");
- json_object_string_add(
- json_row, "querierIp",
- inet_ntop(AF_INET, &igmp->querier_addr,
- quer_buf, sizeof(quer_buf)));
+ json_object_string_addf(json_row, "querierIp",
+ "%pI4",
+ &igmp->querier_addr);
json_object_int_add(json_row, "queryStartCount",
igmp->startup_query_count);
json_object_string_add(json_row,
@@ -682,7 +674,7 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
"queryOtherTimer",
other_hhmmss);
json_object_int_add(json_row, "version",
- pim_ifp->igmp_version);
+ pim_ifp->version);
json_object_int_add(
json_row,
"timerGroupMembershipIntervalMsec",
@@ -733,7 +725,7 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
&pim_ifp->primary_address);
vty_out(vty, "Uptime : %s\n", uptime);
vty_out(vty, "Version : %d\n",
- pim_ifp->igmp_version);
+ pim_ifp->version);
vty_out(vty, "\n");
vty_out(vty, "\n");
@@ -839,15 +831,14 @@ static void igmp_show_interface_join(struct pim_instance *pim, struct vty *vty,
if (!pim_ifp)
continue;
- if (!pim_ifp->igmp_join_list)
+ if (!pim_ifp->join_list)
continue;
pri_addr = pim_find_primary_addr(ifp);
pim_inet4_dump("<pri?>", pri_addr, pri_addr_str,
sizeof(pri_addr_str));
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_join_list, join_node,
- ij)) {
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->join_list, join_node, ij)) {
char group_str[INET_ADDRSTRLEN];
char source_str[INET_ADDRSTRLEN];
char uptime[10];
@@ -893,7 +884,7 @@ static void igmp_show_interface_join(struct pim_instance *pim, struct vty *vty,
ifp->name, pri_addr_str, source_str,
group_str, ij->sock_fd, uptime);
}
- } /* for (pim_ifp->igmp_join_list) */
+ } /* for (pim_ifp->join_list) */
} /* for (iflist) */
@@ -928,7 +919,6 @@ static void pim_show_interfaces_single(struct pim_instance *pim,
int mloop = 0;
int found_ifname = 0;
int print_header;
- char buf[PREFIX_STRLEN];
json_object *json = NULL;
json_object *json_row = NULL;
json_object *json_pim_neighbor = NULL;
@@ -979,11 +969,9 @@ static void pim_show_interfaces_single(struct pim_instance *pim,
json_object_pim_ifp_add(json_row, ifp);
if (pim_ifp->update_source.s_addr != INADDR_ANY) {
- json_object_string_add(
- json_row, "useSource",
- inet_ntop(AF_INET,
- &pim_ifp->update_source,
- buf, sizeof(buf)));
+ json_object_string_addf(
+ json_row, "useSource", "%pI4",
+ &pim_ifp->update_source);
}
if (pim_ifp->sec_addr_list) {
json_object *sec_list = NULL;
@@ -1349,7 +1337,7 @@ static void igmp_show_statistics(struct pim_instance *pim, struct vty *vty,
if (ifname && strcmp(ifname, ifp->name))
continue;
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list, sock_node,
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->socket_list, sock_node,
igmp)) {
igmp_stats_add(&rx_stats, &igmp->rx_stats);
}
@@ -1407,7 +1395,6 @@ static void pim_show_interfaces(struct pim_instance *pim, struct vty *vty,
int fhr = 0;
int pim_nbrs = 0;
int pim_ifchannels = 0;
- char buf[PREFIX_STRLEN];
json_object *json = NULL;
json_object *json_row = NULL;
json_object *json_tmp;
@@ -1437,10 +1424,8 @@ static void pim_show_interfaces(struct pim_instance *pim, struct vty *vty,
json_object_int_add(json_row, "pimNeighbors", pim_nbrs);
json_object_int_add(json_row, "pimIfChannels", pim_ifchannels);
json_object_int_add(json_row, "firstHopRouterCount", fhr);
- json_object_string_add(json_row, "pimDesignatedRouter",
- inet_ntop(AF_INET,
- &pim_ifp->pim_dr_addr, buf,
- sizeof(buf)));
+ json_object_string_addf(json_row, "pimDesignatedRouter", "%pI4",
+ &pim_ifp->pim_dr_addr);
if (pim_ifp->pim_dr_addr.s_addr
== pim_ifp->primary_address.s_addr)
@@ -3441,8 +3426,7 @@ static void igmp_show_groups(struct pim_instance *pim, struct vty *vty, bool uj)
continue;
/* scan igmp groups */
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_group_list, grpnode,
- grp)) {
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->group_list, grpnode, grp)) {
char group_str[INET_ADDRSTRLEN];
char hhmmss[10];
char uptime[10];
@@ -3535,8 +3519,7 @@ static void igmp_show_group_retransmission(struct pim_instance *pim,
continue;
/* scan igmp groups */
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_group_list, grpnode,
- grp)) {
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->group_list, grpnode, grp)) {
char group_str[INET_ADDRSTRLEN];
char grp_retr_mmss[10];
struct listnode *src_node;
@@ -3588,8 +3571,7 @@ static void igmp_show_sources(struct pim_instance *pim, struct vty *vty)
continue;
/* scan igmp groups */
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_group_list, grpnode,
- grp)) {
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->group_list, grpnode, grp)) {
char group_str[INET_ADDRSTRLEN];
struct listnode *srcnode;
struct igmp_source *src;
@@ -3622,7 +3604,7 @@ static void igmp_show_sources(struct pim_instance *pim, struct vty *vty)
uptime);
} /* scan group sources */
- } /* scan igmp groups */
+ } /* scan igmp groups */
} /* scan interfaces */
}
@@ -3644,8 +3626,7 @@ static void igmp_show_source_retransmission(struct pim_instance *pim,
continue;
/* scan igmp groups */
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_group_list, grpnode,
- grp)) {
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->group_list, grpnode, grp)) {
char group_str[INET_ADDRSTRLEN];
struct listnode *srcnode;
struct igmp_source *src;
@@ -3666,7 +3647,7 @@ static void igmp_show_source_retransmission(struct pim_instance *pim,
src->source_query_retransmit_count);
} /* scan group sources */
- } /* scan igmp groups */
+ } /* scan igmp groups */
} /* scan interfaces */
}
@@ -3935,9 +3916,9 @@ static void clear_mroute(struct pim_instance *pim)
/* clean up all igmp groups */
- if (pim_ifp->igmp_group_list) {
- while (pim_ifp->igmp_group_list->count) {
- grp = listnode_head(pim_ifp->igmp_group_list);
+ if (pim_ifp->group_list) {
+ while (pim_ifp->group_list->count) {
+ grp = listnode_head(pim_ifp->group_list);
igmp_group_delete(grp);
}
}
@@ -4051,131 +4032,6 @@ DEFUN (clear_ip_pim_oil,
return CMD_SUCCESS;
}
-static void clear_pim_bsr_db(struct pim_instance *pim)
-{
- struct route_node *rn;
- struct route_node *rpnode;
- struct bsgrp_node *bsgrp;
- struct prefix nht_p;
- struct prefix g_all;
- struct rp_info *rp_all;
- struct pim_upstream *up;
- struct rp_info *rp_info;
- bool is_bsr_tracking = true;
-
- /* Remove next hop tracking for the bsr */
- nht_p.family = AF_INET;
- nht_p.prefixlen = IPV4_MAX_BITLEN;
- nht_p.u.prefix4 = pim->global_scope.current_bsr;
- if (PIM_DEBUG_BSM) {
- zlog_debug("%s: Deregister BSR addr %pFX with Zebra NHT",
- __func__, &nht_p);
- }
- pim_delete_tracked_nexthop(pim, &nht_p, NULL, NULL, is_bsr_tracking);
-
- /* Reset scope zone data */
- pim->global_scope.accept_nofwd_bsm = false;
- pim->global_scope.state = ACCEPT_ANY;
- pim->global_scope.current_bsr.s_addr = INADDR_ANY;
- pim->global_scope.current_bsr_prio = 0;
- pim->global_scope.current_bsr_first_ts = 0;
- pim->global_scope.current_bsr_last_ts = 0;
- pim->global_scope.bsm_frag_tag = 0;
- pim_bsm_frags_free(&pim->global_scope);
-
- pim_bs_timer_stop(&pim->global_scope);
-
- for (rn = route_top(pim->global_scope.bsrp_table); rn;
- rn = route_next(rn)) {
- bsgrp = rn->info;
- if (!bsgrp)
- continue;
-
- rpnode = route_node_lookup(pim->rp_table, &bsgrp->group);
-
- if (!rpnode) {
- pim_free_bsgrp_node(bsgrp->scope->bsrp_table,
- &bsgrp->group);
- pim_free_bsgrp_data(bsgrp);
- continue;
- }
-
- rp_info = (struct rp_info *)rpnode->info;
-
- if ((!rp_info) || (rp_info->rp_src != RP_SRC_BSR)) {
- pim_free_bsgrp_node(bsgrp->scope->bsrp_table,
- &bsgrp->group);
- pim_free_bsgrp_data(bsgrp);
- continue;
- }
-
- /* Deregister addr with Zebra NHT */
- nht_p.family = AF_INET;
- nht_p.prefixlen = IPV4_MAX_BITLEN;
- nht_p.u.prefix4 = rp_info->rp.rpf_addr.u.prefix4;
-
- if (PIM_DEBUG_PIM_NHT_RP) {
- zlog_debug("%s: Deregister RP addr %pFX with Zebra ",
- __func__, &nht_p);
- }
-
- pim_delete_tracked_nexthop(pim, &nht_p, NULL, rp_info, false);
-
- if (!str2prefix("224.0.0.0/4", &g_all))
- return;
-
- rp_all = pim_rp_find_match_group(pim, &g_all);
-
- if (rp_all == rp_info) {
- rp_all->rp.rpf_addr.family = AF_INET;
- rp_all->rp.rpf_addr.u.prefix4.s_addr = INADDR_NONE;
- rp_all->i_am_rp = 0;
- } else {
- /* Delete the rp_info from rp-list */
- listnode_delete(pim->rp_list, rp_info);
-
- /* Delete the rp node from rp_table */
- rpnode->info = NULL;
- route_unlock_node(rpnode);
- route_unlock_node(rpnode);
- XFREE(MTYPE_PIM_RP, rp_info);
- }
-
- pim_free_bsgrp_node(bsgrp->scope->bsrp_table, &bsgrp->group);
- pim_free_bsgrp_data(bsgrp);
- }
- pim_rp_refresh_group_to_rp_mapping(pim);
-
-
- frr_each (rb_pim_upstream, &pim->upstream_head, up) {
- /* Find the upstream (*, G) whose upstream address is same as
- * the RP
- */
- if (up->sg.src.s_addr != INADDR_ANY)
- continue;
-
- struct prefix grp;
- struct rp_info *trp_info;
-
- grp.family = AF_INET;
- grp.prefixlen = IPV4_MAX_BITLEN;
- grp.u.prefix4 = up->sg.grp;
-
- trp_info = pim_rp_find_match_group(pim, &grp);
-
- /* RP not found for the group grp */
- if (pim_rpf_addr_is_inaddr_none(&trp_info->rp)) {
- pim_upstream_rpf_clear(pim, up);
- pim_rp_set_upstream_addr(pim, &up->upstream_addr,
- up->sg.src, up->sg.grp);
- } else {
- /* RP found for the group grp */
- pim_upstream_update(pim, up);
- }
- }
-}
-
-
DEFUN (clear_ip_pim_bsr_db,
clear_ip_pim_bsr_db_cmd,
"clear ip pim [vrf NAME] bsr-data",
@@ -4191,7 +4047,7 @@ DEFUN (clear_ip_pim_bsr_db,
if (!vrf)
return CMD_WARNING;
- clear_pim_bsr_db(vrf->info);
+ pim_bsm_clear(vrf->info);
return CMD_SUCCESS;
}
@@ -5840,10 +5696,8 @@ static void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty,
json_object_string_add(json_row, "name", ifp->name);
json_object_string_add(json_row, "state",
if_is_up(ifp) ? "up" : "down");
- json_object_string_add(
- json_row, "address",
- inet_ntop(AF_INET, &pim_ifp->primary_address,
- buf, sizeof(buf)));
+ json_object_string_addf(json_row, "address", "%pI4",
+ &pim_ifp->primary_address);
json_object_int_add(json_row, "ifIndex", ifp->ifindex);
json_object_int_add(json_row, "vif",
pim_ifp->mroute_vif_index);