summaryrefslogtreecommitdiff
path: root/zebra/zebra_vty.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/zebra_vty.c')
-rw-r--r--zebra/zebra_vty.c92
1 files changed, 66 insertions, 26 deletions
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index ef3dc9808f..8024db4ca7 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -54,6 +54,7 @@
#include "zebra/zebra_pbr.h"
#include "zebra/zebra_nhg.h"
#include "zebra/interface.h"
+#include "northbound_cli.h"
extern int allow_delete;
@@ -2934,17 +2935,29 @@ DEFPY (clear_evpn_dup_addr,
"IPv4 address\n"
"IPv6 address\n")
{
- struct zebra_vrf *zvrf;
struct ipaddr host_ip = {.ipa_type = IPADDR_NONE };
int ret = CMD_SUCCESS;
+ struct list *input;
+ struct yang_data *yang_dup = NULL, *yang_dup_ip = NULL,
+ *yang_dup_mac = NULL;
- zvrf = zebra_vrf_get_evpn();
- if (vni_str) {
+ input = list_new();
+
+ if (!vni_str) {
+ yang_dup = yang_data_new(
+ "/frr-zebra:clear-evpn-dup-addr/input/clear-dup-choice",
+ "all-case");
+ } else {
+ yang_dup = yang_data_new_uint32(
+ "/frr-zebra:clear-evpn-dup-addr/input/clear-dup-choice/single-case/vni-id",
+ vni);
if (!is_zero_mac(&mac->eth_addr)) {
- ret = zebra_vxlan_clear_dup_detect_vni_mac(vty, zvrf,
- vni,
- &mac->eth_addr);
- } else if (ip) {
+ yang_dup_mac = yang_data_new_mac(
+ "/frr-zebra:clear-evpn-dup-addr/input/clear-dup-choice/single-case/vni-id/mac-addr",
+ &mac->eth_addr);
+ if (yang_dup_mac)
+ listnode_add(input, yang_dup_mac);
+ } else if (ip) {
if (sockunion_family(ip) == AF_INET) {
host_ip.ipa_type = IPADDR_V4;
host_ip.ipaddr_v4.s_addr = sockunion2ip(ip);
@@ -2953,16 +2966,23 @@ DEFPY (clear_evpn_dup_addr,
memcpy(&host_ip.ipaddr_v6, &ip->sin6.sin6_addr,
sizeof(struct in6_addr));
}
- ret = zebra_vxlan_clear_dup_detect_vni_ip(vty, zvrf,
- vni,
- &host_ip);
- } else
- ret = zebra_vxlan_clear_dup_detect_vni(vty, zvrf, vni);
- } else {
- ret = zebra_vxlan_clear_dup_detect_vni_all(vty, zvrf);
+ yang_dup_ip = yang_data_new_ip(
+ "/frr-zebra:clear-evpn-dup-addr/input/clear-dup-choice/single-case/vni-id/vni-ipaddr",
+ &host_ip);
+
+ if (yang_dup_ip)
+ listnode_add(input, yang_dup_ip);
+ }
}
+ if (yang_dup) {
+ listnode_add(input, yang_dup);
+ ret = nb_cli_rpc("/frr-zebra:clear-evpn-dup-addr", input, NULL);
+ }
+
+ list_delete(&input);
+
return ret;
}
@@ -3478,22 +3498,42 @@ DEFUN_HIDDEN (show_frr,
}
/* IP node for static routes. */
-static struct cmd_node ip_node = {IP_NODE, "", 1};
-static struct cmd_node protocol_node = {PROTOCOL_NODE, "", 1};
+static int zebra_ip_config(struct vty *vty);
+static struct cmd_node ip_node = {
+ .name = "static ip",
+ .node = IP_NODE,
+ .prompt = "",
+ .config_write = zebra_ip_config,
+};
+static int config_write_protocol(struct vty *vty);
+static struct cmd_node protocol_node = {
+ .name = "protocol",
+ .node = PROTOCOL_NODE,
+ .prompt = "",
+ .config_write = config_write_protocol,
+};
/* table node for routing tables. */
-static struct cmd_node table_node = {TABLE_NODE,
- "", /* This node has no interface. */
- 1};
-static struct cmd_node forwarding_node = {FORWARDING_NODE,
- "", /* This node has no interface. */
- 1};
+static int config_write_table(struct vty *vty);
+static struct cmd_node table_node = {
+ .name = "table",
+ .node = TABLE_NODE,
+ .prompt = "",
+ .config_write = config_write_table,
+};
+static int config_write_forwarding(struct vty *vty);
+static struct cmd_node forwarding_node = {
+ .name = "forwarding",
+ .node = FORWARDING_NODE,
+ .prompt = "",
+ .config_write = config_write_forwarding,
+};
/* Route VTY. */
void zebra_vty_init(void)
{
/* Install configuration write function. */
- install_node(&table_node, config_write_table);
- install_node(&forwarding_node, config_write_forwarding);
+ install_node(&table_node);
+ install_node(&forwarding_node);
install_element(VIEW_NODE, &show_ip_forwarding_cmd);
install_element(CONFIG_NODE, &ip_forwarding_cmd);
@@ -3507,8 +3547,8 @@ void zebra_vty_init(void)
/* Route-map */
zebra_route_map_init();
- install_node(&ip_node, zebra_ip_config);
- install_node(&protocol_node, config_write_protocol);
+ install_node(&ip_node);
+ install_node(&protocol_node);
install_element(CONFIG_NODE, &allow_external_route_update_cmd);
install_element(CONFIG_NODE, &no_allow_external_route_update_cmd);