]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: dup addr detect clear cmd non-zero return 3413/head
authorChirag Shah <chirag@cumulusnetworks.com>
Mon, 3 Dec 2018 03:08:22 +0000 (19:08 -0800)
committerChirag Shah <chirag@cumulusnetworks.com>
Tue, 4 Dec 2018 00:56:00 +0000 (16:56 -0800)
Clear dup address vni needs to return non-zero value
in case of command is not successful.

Ticket:CM-23122
Testing Done:
run clear command and check upon failure return code is non-zero.

root@TORS1:~# vtysh -c "clear evpn dup-addr vni 1000 ip 45.0.1.26"
% Requested IP's associated MAC 00:01:02:03:04:05 is still in duplicate
% state
root@TORS1:~# echo $?
1

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
zebra/zebra_vty.c
zebra/zebra_vxlan.c
zebra/zebra_vxlan.h

index ad6bfe5751dff0c2948a979383a6fb257e90125d..76b901d626908af83be958ce9e66d70fe085dc08 100644 (file)
@@ -2313,6 +2313,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 +2321,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 +2333,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. */
index a4c09b6f415464c83c9f0823e4367b865a268bb4..a9f82894670ef9cf7341f1348c26c1b05c78eeb3 100644 (file)
@@ -6159,9 +6159,9 @@ void zebra_vxlan_print_macs_vni_dad(struct vty *vty,
 
 }
 
-void zebra_vxlan_clear_dup_detect_vni_mac(struct vty *vty,
-                                         struct zebra_vrf *zvrf,
-                                         vni_t vni, struct ethaddr *macaddr)
+int zebra_vxlan_clear_dup_detect_vni_mac(struct vty *vty,
+                                        struct zebra_vrf *zvrf,
+                                        vni_t vni, struct ethaddr *macaddr)
 {
        zebra_vni_t *zvni;
        zebra_mac_t *mac;
@@ -6169,23 +6169,24 @@ void zebra_vxlan_clear_dup_detect_vni_mac(struct vty *vty,
        zebra_neigh_t *nbr = NULL;
 
        if (!is_evpn_enabled())
-               return;
+               return CMD_SUCCESS;
+
        zvni = zvni_lookup(vni);
        if (!zvni) {
                vty_out(vty, "%% VNI %u does not exist\n", vni);
-               return;
+               return CMD_WARNING;
        }
 
        mac = zvni_mac_lookup(zvni, macaddr);
        if (!mac) {
                vty_out(vty, "%% Requested MAC does not exist in VNI %u\n",
                        vni);
-               return;
+               return CMD_WARNING;
        }
 
        if (!CHECK_FLAG(mac->flags, ZEBRA_MAC_DUPLICATE)) {
                vty_out(vty, "%% Requested MAC is not duplicate detected\n");
-               return;
+               return CMD_WARNING;
        }
 
        /* Remove all IPs as duplicate associcated with this MAC */
@@ -6224,7 +6225,7 @@ void zebra_vxlan_clear_dup_detect_vni_mac(struct vty *vty,
                                        &mac->macaddr,
                                        mac->flags,
                                        mac->loc_seq))
-                       return;
+                       return CMD_SUCCESS;
 
                /* Process all neighbors associated with this MAC. */
                zvni_process_neigh_on_local_mac_change(zvni, mac, 0);
@@ -6236,11 +6237,12 @@ void zebra_vxlan_clear_dup_detect_vni_mac(struct vty *vty,
                zvni_mac_install(zvni, mac);
        }
 
+       return CMD_SUCCESS;
 }
 
-void zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
-                                        struct zebra_vrf *zvrf,
-                                        vni_t vni, struct ipaddr *ip)
+int zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
+                                       struct zebra_vrf *zvrf,
+                                       vni_t vni, struct ipaddr *ip)
 {
        zebra_vni_t *zvni;
        zebra_neigh_t *nbr;
@@ -6249,12 +6251,12 @@ void zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
        char buf2[ETHER_ADDR_STRLEN];
 
        if (!is_evpn_enabled())
-               return;
+               return CMD_SUCCESS;
 
        zvni = zvni_lookup(vni);
        if (!zvni) {
                vty_out(vty, "%% VNI %u does not exist\n", vni);
-               return;
+               return CMD_WARNING;
        }
 
        nbr = zvni_neigh_lookup(zvni, ip);
@@ -6262,7 +6264,7 @@ void zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
                vty_out(vty,
                        "%% Requested host IP does not exist in VNI %u\n",
                        vni);
-               return;
+               return CMD_WARNING;
        }
 
        ipaddr2str(&nbr->ip, buf, sizeof(buf));
@@ -6271,7 +6273,7 @@ void zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
                vty_out(vty,
                        "%% Requsted host IP %s is not duplicate detected\n",
                        buf);
-               return;
+               return CMD_WARNING;
        }
 
        mac = zvni_mac_lookup(zvni, &nbr->emac);
@@ -6280,7 +6282,7 @@ void zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
                vty_out(vty,
                        "%% Requested IP's associated MAC %s is still in duplicate state\n",
                        prefix_mac2str(&nbr->emac, buf2, sizeof(buf2)));
-               return;
+               return CMD_WARNING_CONFIG_FAILED;
        }
 
        if (IS_ZEBRA_DEBUG_VXLAN)
@@ -6303,6 +6305,7 @@ void zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
                zvni_neigh_install(zvni, nbr);
        }
 
+       return CMD_SUCCESS;
 }
 
 static void zvni_clear_dup_mac_hash(struct hash_backet *backet, void *ctxt)
@@ -6435,13 +6438,13 @@ static void zvni_clear_dup_detect_hash_vni_all(struct hash_backet *backet,
 
 }
 
-void zebra_vxlan_clear_dup_detect_vni_all(struct vty *vty,
+int zebra_vxlan_clear_dup_detect_vni_all(struct vty *vty,
                                          struct zebra_vrf *zvrf)
 {
        void *args[2];
 
        if (!is_evpn_enabled())
-               return;
+               return CMD_SUCCESS;
 
        args[0] = vty;
        args[1] = zvrf;
@@ -6450,9 +6453,10 @@ void zebra_vxlan_clear_dup_detect_vni_all(struct vty *vty,
                     (void (*)(struct hash_backet *, void *))
                     zvni_clear_dup_detect_hash_vni_all, args);
 
+       return CMD_SUCCESS;
 }
 
-void zebra_vxlan_clear_dup_detect_vni(struct vty *vty,
+int  zebra_vxlan_clear_dup_detect_vni(struct vty *vty,
                                      struct zebra_vrf *zvrf,
                                      vni_t vni)
 {
@@ -6461,12 +6465,12 @@ void zebra_vxlan_clear_dup_detect_vni(struct vty *vty,
        struct neigh_walk_ctx n_wctx;
 
        if (!is_evpn_enabled())
-               return;
+               return CMD_SUCCESS;
 
        zvni = zvni_lookup(vni);
        if (!zvni) {
                vty_out(vty, "%% VNI %u does not exist\n", vni);
-               return;
+               return CMD_WARNING;
        }
 
        if (hashcount(zvni->neigh_table)) {
@@ -6486,6 +6490,7 @@ void zebra_vxlan_clear_dup_detect_vni(struct vty *vty,
                hash_iterate(zvni->mac_table, zvni_clear_dup_mac_hash, &m_wctx);
        }
 
+       return CMD_SUCCESS;
 }
 
 /*
index de120ae0ebc45b4dd3d646b19b9bf687efe752f4..9eb8aa35709f6e1c3a3cf7cda550bbcaaedf5665 100644 (file)
@@ -185,17 +185,17 @@ extern void zebra_vxlan_evpn_vrf_route_add(vrf_id_t vrf_id,
 extern void zebra_vxlan_evpn_vrf_route_del(vrf_id_t vrf_id,
                                           struct ipaddr *vtep_ip,
                                           struct prefix *host_prefix);
-extern void zebra_vxlan_clear_dup_detect_vni_mac(struct vty *vty,
-                                                struct zebra_vrf *zvrf,
-                                                vni_t vni,
-                                                struct ethaddr *macaddr);
-extern void zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
+extern int zebra_vxlan_clear_dup_detect_vni_mac(struct vty *vty,
                                                struct zebra_vrf *zvrf,
-                                               vni_t vni, struct ipaddr *ip);
-extern void zebra_vxlan_clear_dup_detect_vni_all(struct vty *vty,
-                                                struct zebra_vrf *zvrf);
-extern void zebra_vxlan_clear_dup_detect_vni(struct vty *vty,
-                                            struct zebra_vrf *zvrf,
-                                            vni_t vni);
+                                               vni_t vni,
+                                               struct ethaddr *macaddr);
+extern int zebra_vxlan_clear_dup_detect_vni_ip(struct vty *vty,
+                                              struct zebra_vrf *zvrf,
+                                              vni_t vni, struct ipaddr *ip);
+extern int zebra_vxlan_clear_dup_detect_vni_all(struct vty *vty,
+                                               struct zebra_vrf *zvrf);
+extern int zebra_vxlan_clear_dup_detect_vni(struct vty *vty,
+                                           struct zebra_vrf *zvrf,
+                                           vni_t vni);
 
 #endif /* _ZEBRA_VXLAN_H */