]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: convert clear evpn dup addr command to nb
authorChirag Shah <chirag@cumulusnetworks.com>
Thu, 6 Feb 2020 21:32:34 +0000 (13:32 -0800)
committerSantosh P K <sapk@vmware.com>
Thu, 16 Apr 2020 15:17:59 +0000 (08:17 -0700)
Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
zebra/zebra_nb_rpcs.c
zebra/zebra_vty.c

index c8b73e7c3edde48abe754ab11b2f3d0ecd132778..cf8efe40a427a0834774e047c47efb5a85d767f6 100644 (file)
@@ -44,7 +44,7 @@ int clear_evpn_dup_addr_rpc(const char *xpath, const struct list *input,
 
        if (yang_dup_choice
            && strcmp(yang_dup_choice->value, "all-case") == 0) {
-               zebra_vxlan_clear_dup_detect_vni_all(NULL, zvrf);
+               zebra_vxlan_clear_dup_detect_vni_all(zvrf);
        } else {
                vni_t vni;
                struct ipaddr host_ip = {.ipa_type = IPADDR_NONE};
@@ -64,7 +64,7 @@ int clear_evpn_dup_addr_rpc(const char *xpath, const struct list *input,
                                "input/clear-dup-choice/single-case/vni-id/vni-ipaddr");
 
                        if (yang_dup_mac) {
-                               yang_str2mac(value, &mac);
+                               yang_str2mac(yang_dup_mac->value, &mac);
                                ret = zebra_vxlan_clear_dup_detect_vni_mac(
                                        zvrf, vni, &mac);
                        } else if (yang_dup_ip) {
index 0b9d1e9e76aa3414eff47129d6e1332eb3c9815d..9bd15cdf9efddb0dadd775918753e5f9ee9d619f 100644 (file)
@@ -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,15 +2935,28 @@ 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(
-                               zvrf, vni, &mac->eth_addr);
+                       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;
@@ -2952,15 +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(zvrf, vni,
-                                                                 &host_ip);
-               } else
-                       ret = zebra_vxlan_clear_dup_detect_vni(zvrf, vni);
 
-       } else {
-               ret = zebra_vxlan_clear_dup_detect_vni_all(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;
 }