X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=zebra%2Fzebra_vty.c;h=e6cc802d08129be32996cf24b2cffa143be72d69;hb=de983bb8e01f94e2d32e77cb9b3df4f94f24d002;hp=ad6bfe5751dff0c2948a979383a6fb257e90125d;hpb=9f7b49e1057b2a950240813bf538e46b4f1566c4;p=mirror_frr.git diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index ad6bfe575..e6cc802d0 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -732,15 +732,14 @@ static void vty_show_ip_route_detail_json(struct vty *vty, char buf[BUFSIZ]; json = json_object_new_object(); + json_prefix = json_object_new_array(); RNODE_FOREACH_RE (rn, re) { - json_prefix = json_object_new_array(); vty_show_ip_route(vty, rn, re, json_prefix); - prefix2str(&rn->p, buf, sizeof buf); - json_object_object_add(json, buf, json_prefix); - json_prefix = NULL; } + prefix2str(&rn->p, buf, sizeof(buf)); + json_object_object_add(json, buf, json_prefix); vty_out(vty, "%s\n", json_object_to_json_string_ext( json, JSON_C_TO_STRING_PRETTY)); json_object_free(json); @@ -1782,7 +1781,7 @@ DEFUN (show_evpn_vni, "show evpn vni [json]", SHOW_STR "EVPN\n" - "VxLAN information\n" + "VxLAN Network Identifier\n" JSON_STR) { struct zebra_vrf *zvrf; @@ -1793,6 +1792,22 @@ DEFUN (show_evpn_vni, return CMD_SUCCESS; } +DEFUN (show_evpn_vni_detail, show_evpn_vni_detail_cmd, + "show evpn vni detail [json]", + SHOW_STR + "EVPN\n" + "VxLAN Network Identifier\n" + "Detailed Information On Each VNI\n" + JSON_STR) +{ + struct zebra_vrf *zvrf; + bool uj = use_json(argc, argv); + + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_vnis_detail(vty, zvrf, uj); + return CMD_SUCCESS; +} + DEFUN (show_evpn_vni_vni, show_evpn_vni_vni_cmd, "show evpn vni " CMD_VNI_RANGE "[json]", @@ -1974,6 +1989,24 @@ DEFUN (show_evpn_mac_vni_all, return CMD_SUCCESS; } +DEFUN (show_evpn_mac_vni_all_detail, show_evpn_mac_vni_all_detail_cmd, + "show evpn mac vni all detail [json]", + SHOW_STR + "EVPN\n" + "MAC addresses\n" + "VxLAN Network Identifier\n" + "All VNIs\n" + "Detailed Information On Each VNI MAC\n" + JSON_STR) +{ + struct zebra_vrf *zvrf; + bool uj = use_json(argc, argv); + + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_macs_all_vni_detail(vty, zvrf, false, uj); + return CMD_SUCCESS; +} + DEFUN (show_evpn_mac_vni_all_vtep, show_evpn_mac_vni_all_vtep_cmd, "show evpn mac vni all vtep A.B.C.D [json]", @@ -2313,6 +2346,7 @@ DEFPY (clear_evpn_dup_addr, vni_t vni = 0; struct ipaddr host_ip = {.ipa_type = IPADDR_NONE }; struct ethaddr mac_addr; + int ret = CMD_SUCCESS; zvrf = vrf_info_lookup(VRF_DEFAULT); if (vni_val) { @@ -2320,9 +2354,10 @@ DEFPY (clear_evpn_dup_addr, if (mac_val) { prefix_str2mac(mac_val, &mac_addr); - zebra_vxlan_clear_dup_detect_vni_mac(vty, zvrf, vni, - &mac_addr); - } else if (ip) { + ret = zebra_vxlan_clear_dup_detect_vni_mac(vty, zvrf, + vni, + &mac_addr); + } else if (ip) { if (sockunion_family(ip) == AF_INET) { host_ip.ipa_type = IPADDR_V4; host_ip.ipaddr_v4.s_addr = sockunion2ip(ip); @@ -2331,16 +2366,17 @@ DEFPY (clear_evpn_dup_addr, memcpy(&host_ip.ipaddr_v6, &ip->sin6.sin6_addr, sizeof(struct in6_addr)); } - zebra_vxlan_clear_dup_detect_vni_ip(vty, zvrf, vni, - &host_ip); + ret = zebra_vxlan_clear_dup_detect_vni_ip(vty, zvrf, + vni, + &host_ip); } else - zebra_vxlan_clear_dup_detect_vni(vty, zvrf, vni); + ret = zebra_vxlan_clear_dup_detect_vni(vty, zvrf, vni); } else { - zebra_vxlan_clear_dup_detect_vni_all(vty, zvrf); + ret = zebra_vxlan_clear_dup_detect_vni_all(vty, zvrf); } - return CMD_SUCCESS; + return ret; } /* Static ip route configuration write function. */ @@ -2893,6 +2929,7 @@ void zebra_vty_init(void) install_element(VIEW_NODE, &show_evpn_global_cmd); install_element(VIEW_NODE, &show_evpn_vni_cmd); + install_element(VIEW_NODE, &show_evpn_vni_detail_cmd); install_element(VIEW_NODE, &show_evpn_vni_vni_cmd); install_element(VIEW_NODE, &show_evpn_rmac_vni_mac_cmd); install_element(VIEW_NODE, &show_evpn_rmac_vni_cmd); @@ -2902,6 +2939,7 @@ void zebra_vty_init(void) install_element(VIEW_NODE, &show_evpn_nh_vni_all_cmd); install_element(VIEW_NODE, &show_evpn_mac_vni_cmd); install_element(VIEW_NODE, &show_evpn_mac_vni_all_cmd); + install_element(VIEW_NODE, &show_evpn_mac_vni_all_detail_cmd); install_element(VIEW_NODE, &show_evpn_mac_vni_all_vtep_cmd); install_element(VIEW_NODE, &show_evpn_mac_vni_mac_cmd); install_element(VIEW_NODE, &show_evpn_mac_vni_vtep_cmd);