diff options
Diffstat (limited to 'pimd/pim_cmd.c')
| -rw-r--r-- | pimd/pim_cmd.c | 241 |
1 files changed, 110 insertions, 131 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 86dda43e9c..580486badd 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1839,8 +1839,9 @@ static void pim_show_neighbors_single(struct vty *vty, const char *neighbor, } } -static void pim_show_state(struct vty *vty, const char *src_or_group, - const char *group, u_char uj) +static void pim_show_state(struct pim_instance *pim, struct vty *vty, + const char *src_or_group, const char *group, + u_char uj) { struct channel_oil *c_oil; struct listnode *node; @@ -1875,7 +1876,7 @@ static void pim_show_state(struct vty *vty, const char *src_or_group, sizeof(grp_str)); pim_inet4_dump("<source?>", c_oil->oil.mfcc_origin, src_str, sizeof(src_str)); - ifp_in = pim_if_find_by_vif_index(c_oil->oil.mfcc_parent); + ifp_in = pim_if_find_by_vif_index(pim, c_oil->oil.mfcc_parent); if (ifp_in) strcpy(in_ifname, ifp_in->name); @@ -1957,7 +1958,7 @@ static void pim_show_state(struct vty *vty, const char *src_or_group, if (ttl < 1) continue; - ifp_out = pim_if_find_by_vif_index(oif_vif_index); + ifp_out = pim_if_find_by_vif_index(pim, oif_vif_index); pim_time_uptime( oif_uptime, sizeof(oif_uptime), now - c_oil->oif_creation[oif_vif_index]); @@ -3449,7 +3450,7 @@ DEFUN (show_ip_pim_state, } else if (argc == 5) src_or_group = argv[4]->arg; - pim_show_state(vty, src_or_group, group, uj); + pim_show_state(pimg, vty, src_or_group, group, uj); return CMD_SUCCESS; } @@ -3750,7 +3751,7 @@ DEFUN (show_ip_multicast, return CMD_SUCCESS; } -static void show_mroute(struct vty *vty, u_char uj) +static void show_mroute(struct pim_instance *pim, struct vty *vty, u_char uj) { struct listnode *node; struct channel_oil *c_oil; @@ -3770,8 +3771,6 @@ static void show_mroute(struct vty *vty, u_char uj) int oif_vif_index; struct interface *ifp_in; char proto[100]; - struct vrf *vrf; - struct pim_instance *pim; if (uj) { json = json_object_new_object(); @@ -3793,7 +3792,7 @@ static void show_mroute(struct vty *vty, u_char uj) sizeof(grp_str)); pim_inet4_dump("<source?>", c_oil->oil.mfcc_origin, src_str, sizeof(src_str)); - ifp_in = pim_if_find_by_vif_index(c_oil->oil.mfcc_parent); + ifp_in = pim_if_find_by_vif_index(pim, c_oil->oil.mfcc_parent); if (ifp_in) strcpy(in_ifname, ifp_in->name); @@ -3846,7 +3845,7 @@ static void show_mroute(struct vty *vty, u_char uj) if (ttl < 1) continue; - ifp_out = pim_if_find_by_vif_index(oif_vif_index); + ifp_out = pim_if_find_by_vif_index(pim, oif_vif_index); pim_time_uptime( oif_uptime, sizeof(oif_uptime), now - c_oil->oif_creation[oif_vif_index]); @@ -3948,145 +3947,125 @@ static void show_mroute(struct vty *vty, u_char uj) } /* Print list of static routes */ - RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name) - { - pim = vrf->info; - if (!pim) + for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) { + first = 1; + + if (!s_route->c_oil.installed) continue; - for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) { - first = 1; + pim_inet4_dump("<group?>", s_route->group, grp_str, + sizeof(grp_str)); + pim_inet4_dump("<source?>", s_route->source, src_str, + sizeof(src_str)); + ifp_in = pim_if_find_by_vif_index(pim, s_route->iif); + found_oif = 0; - if (!s_route->c_oil.installed) - continue; + if (ifp_in) + strcpy(in_ifname, ifp_in->name); + else + strcpy(in_ifname, "<iif?>"); - pim_inet4_dump("<group?>", s_route->group, grp_str, - sizeof(grp_str)); - pim_inet4_dump("<source?>", s_route->source, src_str, - sizeof(src_str)); - ifp_in = pim_if_find_by_vif_index(s_route->iif); - found_oif = 0; + if (uj) { - if (ifp_in) - strcpy(in_ifname, ifp_in->name); - else - strcpy(in_ifname, "<iif?>"); + /* Find the group, create it if it doesn't exist */ + json_object_object_get_ex(json, grp_str, &json_group); - if (uj) { + if (!json_group) { + json_group = json_object_new_object(); + json_object_object_add(json, grp_str, + json_group); + } - /* Find the group, create it if it doesn't exist - */ - json_object_object_get_ex(json, grp_str, - &json_group); + /* Find the source nested under the group, create it if + * it doesn't exist */ + json_object_object_get_ex(json_group, src_str, + &json_source); - if (!json_group) { - json_group = json_object_new_object(); - json_object_object_add(json, grp_str, - json_group); - } + if (!json_source) { + json_source = json_object_new_object(); + json_object_object_add(json_group, src_str, + json_source); + } + + json_object_string_add(json_source, "iif", in_ifname); + json_oil = NULL; + } else { + strcpy(proto, "STATIC"); + } - /* Find the source nested under the group, - * create it if it doesn't exist */ - json_object_object_get_ex(json_group, src_str, - &json_source); + for (oif_vif_index = 0; oif_vif_index < MAXVIFS; + ++oif_vif_index) { + struct interface *ifp_out; + char oif_uptime[10]; + int ttl; - if (!json_source) { - json_source = json_object_new_object(); - json_object_object_add(json_group, - src_str, - json_source); - } + ttl = s_route->oif_ttls[oif_vif_index]; + if (ttl < 1) + continue; - json_object_string_add(json_source, "iif", - in_ifname); - json_oil = NULL; - } else { - strcpy(proto, "STATIC"); - } + ifp_out = pim_if_find_by_vif_index(pim, oif_vif_index); + pim_time_uptime( + oif_uptime, sizeof(oif_uptime), + now + - s_route->c_oil + .oif_creation[oif_vif_index]); + found_oif = 1; - for (oif_vif_index = 0; oif_vif_index < MAXVIFS; - ++oif_vif_index) { - struct interface *ifp_out; - char oif_uptime[10]; - int ttl; - - ttl = s_route->oif_ttls[oif_vif_index]; - if (ttl < 1) - continue; - - ifp_out = - pim_if_find_by_vif_index(oif_vif_index); - pim_time_uptime( - oif_uptime, sizeof(oif_uptime), - now - - s_route->c_oil.oif_creation - [oif_vif_index]); - found_oif = 1; - - if (ifp_out) - strcpy(out_ifname, ifp_out->name); - else - strcpy(out_ifname, "<oif?>"); + if (ifp_out) + strcpy(out_ifname, ifp_out->name); + else + strcpy(out_ifname, "<oif?>"); - if (uj) { - json_ifp_out = json_object_new_object(); - json_object_string_add(json_ifp_out, - "source", - src_str); - json_object_string_add( - json_ifp_out, "group", grp_str); - json_object_boolean_true_add( - json_ifp_out, "protocolStatic"); - json_object_string_add( - json_ifp_out, - "inboundInterface", in_ifname); - json_object_int_add( - json_ifp_out, "iVifI", - s_route->c_oil.oil.mfcc_parent); - json_object_string_add( - json_ifp_out, - "outboundInterface", - out_ifname); - json_object_int_add(json_ifp_out, - "oVifI", - oif_vif_index); - json_object_int_add(json_ifp_out, "ttl", - ttl); - json_object_string_add(json_ifp_out, - "upTime", - oif_uptime); - if (!json_oil) { - json_oil = - json_object_new_object(); - json_object_object_add( - json_source, "oil", - json_oil); - } - json_object_object_add(json_oil, - out_ifname, - json_ifp_out); - } else { - vty_out(vty, - "%-15s %-15s %-6s %-10s %-10s %-3d %8s %s\n", - src_str, grp_str, proto, - in_ifname, out_ifname, ttl, - oif_uptime, vrf->name); - if (first) { - src_str[0] = '\0'; - grp_str[0] = '\0'; - in_ifname[0] = '\0'; - first = 0; - } + if (uj) { + json_ifp_out = json_object_new_object(); + json_object_string_add(json_ifp_out, "source", + src_str); + json_object_string_add(json_ifp_out, "group", + grp_str); + json_object_boolean_true_add(json_ifp_out, + "protocolStatic"); + json_object_string_add(json_ifp_out, + "inboundInterface", + in_ifname); + json_object_int_add( + json_ifp_out, "iVifI", + s_route->c_oil.oil.mfcc_parent); + json_object_string_add(json_ifp_out, + "outboundInterface", + out_ifname); + json_object_int_add(json_ifp_out, "oVifI", + oif_vif_index); + json_object_int_add(json_ifp_out, "ttl", ttl); + json_object_string_add(json_ifp_out, "upTime", + oif_uptime); + if (!json_oil) { + json_oil = json_object_new_object(); + json_object_object_add(json_source, + "oil", json_oil); } - } - - if (!uj && !found_oif) { + json_object_object_add(json_oil, out_ifname, + json_ifp_out); + } else { vty_out(vty, "%-15s %-15s %-6s %-10s %-10s %-3d %8s %s\n", src_str, grp_str, proto, in_ifname, - "none", 0, "--:--:--", vrf->name); + out_ifname, ttl, oif_uptime, + pim->vrf->name); + if (first) { + src_str[0] = '\0'; + grp_str[0] = '\0'; + in_ifname[0] = '\0'; + first = 0; + } } } + + if (!uj && !found_oif) { + vty_out(vty, + "%-15s %-15s %-6s %-10s %-10s %-3d %8s %s\n", + src_str, grp_str, proto, in_ifname, "none", 0, + "--:--:--", pim->vrf->name); + } } if (uj) { @@ -4105,7 +4084,7 @@ DEFUN (show_ip_mroute, JSON_STR) { u_char uj = use_json(argc, argv); - show_mroute(vty, uj); + show_mroute(pimg, vty, uj); return CMD_SUCCESS; } |
