diff options
| author | Russ White <russ@riw.us> | 2017-07-14 09:36:31 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-07-14 09:36:31 -0400 |
| commit | 805d1ca6b06158ce9f31f77867ef9d293744a95f (patch) | |
| tree | 855a3dca8ef223561892a62f8ef3adef89ff84eb /zebra/zebra_vty.c | |
| parent | 28bd1c1158c10268655878d12e5d8f17737de1bb (diff) | |
| parent | 2850f0ea580764393ae1253ef87a57d772dafafd (diff) | |
Merge pull request #809 from donaldsharp/evpn_plus_struct_attr
Evpn plus struct attr
Diffstat (limited to 'zebra/zebra_vty.c')
| -rw-r--r-- | zebra/zebra_vty.c | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 90bb21c666..b1da38a7b6 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -32,6 +32,7 @@ #include "mpls.h" #include "routemap.h" #include "srcdest_table.h" +#include "vxlan.h" #include "zebra/zserv.h" #include "zebra/zebra_vrf.h" @@ -41,6 +42,7 @@ #include "zebra/zebra_routemap.h" #include "zebra/zebra_static.h" #include "lib/json.h" +#include "zebra/zebra_vxlan.h" extern int allow_delete; @@ -54,6 +56,9 @@ static void vty_show_ip_route_detail (struct vty *vty, struct route_node *rn, #define ONE_DAY_SECOND 60*60*24 #define ONE_WEEK_SECOND 60*60*24*7 +/* VNI range as per RFC 7432 */ +#define CMD_VNI_RANGE "(1-16777215)" + /* General function for static route. */ int zebra_static_ipv4 (struct vty *vty, safi_t safi, int add_cmd, @@ -3044,6 +3049,237 @@ DEFUN (show_vrf, return CMD_SUCCESS; } +DEFUN (show_evpn_vni, + show_evpn_vni_cmd, + "show evpn vni", + SHOW_STR + "EVPN\n" + "VxLAN information\n") +{ + struct zebra_vrf *zvrf; + + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_vnis(vty, zvrf); + return CMD_SUCCESS; +} + +DEFUN (show_evpn_vni_vni, + show_evpn_vni_vni_cmd, + "show evpn vni " CMD_VNI_RANGE, + SHOW_STR + "EVPN\n" + "VxLAN Network Identifier\n" + "VNI number\n") +{ + struct zebra_vrf *zvrf; + vni_t vni; + + vni = strtoul(argv[3]->arg, NULL, 10); + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_vni(vty, zvrf, vni); + return CMD_SUCCESS; +} + +DEFUN (show_evpn_mac_vni, + show_evpn_mac_vni_cmd, + "show evpn mac vni " CMD_VNI_RANGE, + SHOW_STR + "EVPN\n" + "MAC addresses\n" + "VxLAN Network Identifier\n" + "VNI number\n") +{ + struct zebra_vrf *zvrf; + vni_t vni; + + vni = strtoul(argv[4]->arg, NULL, 10); + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_macs_vni(vty, zvrf, vni); + return CMD_SUCCESS; +} + +DEFUN (show_evpn_mac_vni_all, + show_evpn_mac_vni_all_cmd, + "show evpn mac vni all", + SHOW_STR + "EVPN\n" + "MAC addresses\n" + "VxLAN Network Identifier\n" + "All VNIs\n") +{ + struct zebra_vrf *zvrf; + + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_macs_all_vni(vty, zvrf); + 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", + SHOW_STR + "EVPN\n" + "MAC addresses\n" + "VxLAN Network Identifier\n" + "All VNIs\n" + "Remote VTEP\n" + "Remote VTEP IP address\n") +{ + struct zebra_vrf *zvrf; + struct in_addr vtep_ip; + + if (!inet_aton (argv[6]->arg, &vtep_ip)) + { + vty_out (vty, "%% Malformed VTEP IP address\n"); + return CMD_WARNING; + } + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_macs_all_vni_vtep(vty, zvrf, vtep_ip); + + return CMD_SUCCESS; +} + + +DEFUN (show_evpn_mac_vni_mac, + show_evpn_mac_vni_mac_cmd, + "show evpn mac vni " CMD_VNI_RANGE " mac WORD", + SHOW_STR + "EVPN\n" + "MAC addresses\n" + "VxLAN Network Identifier\n" + "VNI number\n" + "MAC\n" + "MAC address (e.g., 00:e0:ec:20:12:62)\n") +{ + struct zebra_vrf *zvrf; + vni_t vni; + struct ethaddr mac; + + vni = strtoul(argv[4]->arg, NULL, 10); + if (!prefix_str2mac (argv[6]->arg, &mac)) + { + vty_out (vty, "%% Malformed MAC address"); + return CMD_WARNING; + } + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_specific_mac_vni(vty, zvrf, vni, &mac); + return CMD_SUCCESS; +} + +DEFUN (show_evpn_mac_vni_vtep, + show_evpn_mac_vni_vtep_cmd, + "show evpn mac vni " CMD_VNI_RANGE " vtep A.B.C.D", + SHOW_STR + "EVPN\n" + "MAC addresses\n" + "VxLAN Network Identifier\n" + "VNI number\n" + "Remote VTEP\n" + "Remote VTEP IP address\n") +{ + struct zebra_vrf *zvrf; + vni_t vni; + struct in_addr vtep_ip; + + vni = strtoul(argv[4]->arg, NULL, 10); + if (!inet_aton (argv[6]->arg, &vtep_ip)) + { + vty_out (vty, "%% Malformed VTEP IP address\n"); + return CMD_WARNING; + } + + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_macs_vni_vtep(vty, zvrf, vni, vtep_ip); + return CMD_SUCCESS; +} + +DEFUN (show_evpn_neigh_vni, + show_evpn_neigh_vni_cmd, + "show evpn arp-cache vni " CMD_VNI_RANGE, + SHOW_STR + "EVPN\n" + "ARP and ND cache\n" + "VxLAN Network Identifier\n" + "VNI number\n") +{ + struct zebra_vrf *zvrf; + vni_t vni; + + vni = strtoul(argv[4]->arg, NULL, 10); + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_neigh_vni(vty, zvrf, vni); + return CMD_SUCCESS; +} + +DEFUN (show_evpn_neigh_vni_all, + show_evpn_neigh_vni_all_cmd, + "show evpn arp-cache vni all", + SHOW_STR + "EVPN\n" + "ARP and ND cache\n" + "VxLAN Network Identifier\n" + "All VNIs\n") +{ + struct zebra_vrf *zvrf; + + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_neigh_all_vni(vty, zvrf); + return CMD_SUCCESS; +} + +DEFUN (show_evpn_neigh_vni_neigh, + show_evpn_neigh_vni_neigh_cmd, + "show evpn arp-cache vni " CMD_VNI_RANGE " ip WORD", + SHOW_STR + "EVPN\n" + "ARP and ND cache\n" + "VxLAN Network Identifier\n" + "VNI number\n" + "Neighbor\n" + "Neighbor address (IPv4 or IPv6 address)\n") +{ + struct zebra_vrf *zvrf; + vni_t vni; + struct ipaddr ip; + + vni = strtoul(argv[4]->arg, NULL, 10); + if (str2ipaddr (argv[6]->arg, &ip) != 0) + { + vty_out (vty, "%% Malformed Neighbor address\n"); + return CMD_WARNING; + } + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_specific_neigh_vni(vty, zvrf, vni, &ip); + return CMD_SUCCESS; +} + +DEFUN (show_evpn_neigh_vni_vtep, + show_evpn_neigh_vni_vtep_cmd, + "show evpn arp-cache vni " CMD_VNI_RANGE " vtep A.B.C.D", + SHOW_STR + "EVPN\n" + "ARP and ND cache\n" + "VxLAN Network Identifier\n" + "VNI number\n" + "Remote VTEP\n" + "Remote VTEP IP address\n") +{ + struct zebra_vrf *zvrf; + vni_t vni; + struct in_addr vtep_ip; + + vni = strtoul(argv[4]->arg, NULL, 10); + if (!inet_aton (argv[6]->arg, &vtep_ip)) + { + vty_out (vty, "%% Malformed VTEP IP address\n"); + return CMD_WARNING; + } + + zvrf = vrf_info_lookup(VRF_DEFAULT); + zebra_vxlan_print_neigh_vni_vtep(vty, zvrf, vni, vtep_ip); + return CMD_SUCCESS; +} + /* Static ip route configuration write function. */ static int zebra_ip_config (struct vty *vty) @@ -3234,4 +3470,16 @@ zebra_vty_init (void) install_element (VIEW_NODE, &show_ipv6_route_vrf_all_prefix_cmd); install_element (VIEW_NODE, &show_ipv6_mroute_vrf_all_cmd); + + install_element (VIEW_NODE, &show_evpn_vni_cmd); + install_element (VIEW_NODE, &show_evpn_vni_vni_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_vtep_cmd); + install_element (VIEW_NODE, &show_evpn_mac_vni_mac_cmd); + install_element (VIEW_NODE, &show_evpn_mac_vni_vtep_cmd); + install_element (VIEW_NODE, &show_evpn_neigh_vni_cmd); + install_element (VIEW_NODE, &show_evpn_neigh_vni_all_cmd); + install_element (VIEW_NODE, &show_evpn_neigh_vni_neigh_cmd); + install_element (VIEW_NODE, &show_evpn_neigh_vni_vtep_cmd); } |
