]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Revert "bgpd: remove duplicated checks from CLI"
authorIgor Ryzhov <iryzhov@nfware.com>
Thu, 13 May 2021 22:39:29 +0000 (01:39 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Tue, 3 Aug 2021 19:20:51 +0000 (22:20 +0300)
This reverts commit 45d1d7c9a2b7b41125e565af566e10d470349122.

bgpd/bgp_nb_config.c
bgpd/bgp_vty.c

index 5c238adb3dcf2002c1c548c063082e449613d922..65e30d20c4ad7c1559ba7a7381a9729e6ccf404f 100644 (file)
@@ -160,54 +160,8 @@ int bgp_router_destroy(struct nb_cb_destroy_args *args)
                        struct bgp *tmp_bgp;
 
                        for (ALL_LIST_ELEMENTS_RO(bm->bgp, node, tmp_bgp)) {
-                               if (tmp_bgp->inst_type != BGP_INSTANCE_TYPE_VRF)
-                                       continue;
-                               if (CHECK_FLAG(tmp_bgp->af_flags[AFI_IP]
-                                                               [SAFI_UNICAST],
-                                              BGP_CONFIG_MPLSVPN_TO_VRF_IMPORT)
-                                   || CHECK_FLAG(
-                                              tmp_bgp->af_flags[AFI_IP6]
-                                                               [SAFI_UNICAST],
-                                              BGP_CONFIG_MPLSVPN_TO_VRF_IMPORT)
-                                   || CHECK_FLAG(
-                                              tmp_bgp->af_flags[AFI_IP]
-                                                               [SAFI_UNICAST],
-                                              BGP_CONFIG_VRF_TO_MPLSVPN_EXPORT)
-                                   || CHECK_FLAG(
-                                              tmp_bgp->af_flags[AFI_IP6]
-                                                               [SAFI_UNICAST],
-                                              BGP_CONFIG_VRF_TO_MPLSVPN_EXPORT)
-                                   || CHECK_FLAG(
-                                              tmp_bgp->af_flags[AFI_IP]
-                                                               [SAFI_UNICAST],
-                                              BGP_CONFIG_VRF_TO_VRF_EXPORT)
-                                   || CHECK_FLAG(
-                                              tmp_bgp->af_flags[AFI_IP6]
-                                                               [SAFI_UNICAST],
-                                              BGP_CONFIG_VRF_TO_VRF_EXPORT)
-                                   || (bgp == bgp_get_evpn()
-                                       && (CHECK_FLAG(
-                                                   tmp_bgp->af_flags
-                                                           [AFI_L2VPN]
-                                                           [SAFI_EVPN],
-                                                   BGP_L2VPN_EVPN_ADV_IPV4_UNICAST)
-                                           || CHECK_FLAG(
-                                                      tmp_bgp->af_flags
-                                                              [AFI_L2VPN]
-                                                              [SAFI_EVPN],
-                                                      BGP_L2VPN_EVPN_ADV_IPV4_UNICAST_GW_IP)
-                                           || CHECK_FLAG(
-                                                      tmp_bgp->af_flags
-                                                              [AFI_L2VPN]
-                                                              [SAFI_EVPN],
-                                                      BGP_L2VPN_EVPN_ADV_IPV6_UNICAST)
-                                           || CHECK_FLAG(
-                                                      tmp_bgp->af_flags
-                                                              [AFI_L2VPN]
-                                                              [SAFI_EVPN],
-                                                      BGP_L2VPN_EVPN_ADV_IPV6_UNICAST_GW_IP)))
-                                   || (tmp_bgp->vnihash
-                                       && hashcount(tmp_bgp->vnihash))) {
+                               if (tmp_bgp->inst_type
+                                   == BGP_INSTANCE_TYPE_VRF) {
                                        snprintf(
                                                args->errmsg, args->errmsg_len,
                                                "Cannot delete default BGP instance. Dependent VRF instances exist\n");
index 6acce23d5498bfe2e2c9fd5338a5a88fdcb6fdc0..aa3070b2046a9940b75cc41067b44a15a8e69383 100644 (file)
@@ -1486,7 +1486,10 @@ DEFUN_YANG(no_router_bgp,
           "no router bgp [(1-4294967295)$instasn [<view|vrf> VIEWVRFNAME]]",
           NO_STR ROUTER_STR BGP_STR AS_STR BGP_INSTANCE_HELP_STR)
 {
+       int idx_asn = 3;
        int idx_vrf = 5;
+       as_t as = 0;
+       struct bgp *bgp;
        const char *name = NULL;
        char base_xpath[XPATH_MAXLEN];
        const struct lyd_node *bgp_glb_dnode;
@@ -1508,15 +1511,76 @@ DEFUN_YANG(no_router_bgp,
                        vty_out(vty, "%% Please specify ASN and VRF\n");
                        return CMD_WARNING_CONFIG_FAILED;
                }
+
+               /* tcli mode bgp would not be set until apply stage. */
+               bgp = nb_running_get_entry(bgp_glb_dnode, NULL, false);
+               if (!bgp)
+                       return CMD_SUCCESS;
+
+               if (bgp->l3vni) {
+                       vty_out(vty, "%% Please unconfigure l3vni %u",
+                               bgp->l3vni);
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
        } else {
+               as = strtoul(argv[idx_asn]->arg, NULL, 10);
+
                if (argc > 4)
                        name = argv[idx_vrf]->arg;
-               else
-                       name = VRF_DEFAULT_NAME;
 
-               snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_GLOBAL_XPATH,
-                        "frr-bgp:bgp", "bgp", name);
+               /* Lookup bgp structure. */
+               bgp = bgp_lookup(as, name);
+               if (!bgp) {
+                       vty_out(vty, "%% Can't find BGP instance\n");
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+
+               if (bgp->l3vni) {
+                       vty_out(vty, "%% Please unconfigure l3vni %u\n",
+                               bgp->l3vni);
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+
+               /* Cannot delete default instance if vrf instances exist */
+               if (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT) {
+                       struct listnode *node;
+                       struct bgp *tmp_bgp;
+
+                       for (ALL_LIST_ELEMENTS_RO(bm->bgp, node, tmp_bgp)) {
+                               if (tmp_bgp->inst_type != BGP_INSTANCE_TYPE_VRF)
+                                       continue;
+                               if (CHECK_FLAG(tmp_bgp->af_flags[AFI_IP][SAFI_UNICAST],
+                                              BGP_CONFIG_MPLSVPN_TO_VRF_IMPORT) ||
+                                   CHECK_FLAG(tmp_bgp->af_flags[AFI_IP6][SAFI_UNICAST],
+                                              BGP_CONFIG_MPLSVPN_TO_VRF_IMPORT) ||
+                                   CHECK_FLAG(tmp_bgp->af_flags[AFI_IP][SAFI_UNICAST],
+                                              BGP_CONFIG_VRF_TO_MPLSVPN_EXPORT) ||
+                                   CHECK_FLAG(tmp_bgp->af_flags[AFI_IP6][SAFI_UNICAST],
+                                              BGP_CONFIG_VRF_TO_MPLSVPN_EXPORT) ||
+                                   CHECK_FLAG(tmp_bgp->af_flags[AFI_IP][SAFI_UNICAST],
+                                              BGP_CONFIG_VRF_TO_VRF_EXPORT) ||
+                                   CHECK_FLAG(tmp_bgp->af_flags[AFI_IP6][SAFI_UNICAST],
+                                              BGP_CONFIG_VRF_TO_VRF_EXPORT) ||
+                                   (bgp == bgp_get_evpn() &&
+                                   (CHECK_FLAG(tmp_bgp->af_flags[AFI_L2VPN][SAFI_EVPN],
+                                               BGP_L2VPN_EVPN_ADV_IPV4_UNICAST) ||
+                                    CHECK_FLAG(tmp_bgp->af_flags[AFI_L2VPN][SAFI_EVPN],
+                                               BGP_L2VPN_EVPN_ADV_IPV4_UNICAST_GW_IP) ||
+                                    CHECK_FLAG(tmp_bgp->af_flags[AFI_L2VPN][SAFI_EVPN],
+                                               BGP_L2VPN_EVPN_ADV_IPV6_UNICAST) ||
+                                    CHECK_FLAG(tmp_bgp->af_flags[AFI_L2VPN][SAFI_EVPN],
+                                               BGP_L2VPN_EVPN_ADV_IPV6_UNICAST_GW_IP))) ||
+                                   (tmp_bgp->vnihash && hashcount(tmp_bgp->vnihash))) {
+                                       vty_out(vty,
+                                               "%% Cannot delete default BGP instance. Dependent VRF instances exist\n");
+                                       return CMD_WARNING_CONFIG_FAILED;
+                               }
+                       }
+               }
        }
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_GLOBAL_XPATH,
+                "frr-bgp:bgp", "bgp",
+                bgp->name ? bgp->name : VRF_DEFAULT_NAME);
 
        nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);