]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Refactor bgp_static_set/bgp_static_set_safi 14198/head
authorDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 10 Aug 2023 08:37:40 +0000 (11:37 +0300)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Mon, 14 Aug 2023 14:10:07 +0000 (17:10 +0300)
Those two functions are very similar, let's get a single one.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_evpn_vty.c
bgpd/bgp_mplsvpn.c
bgpd/bgp_route.c
bgpd/bgp_route.h

index 8b4f4509ae43ea14efc8368ad6c2ff4e255ac3be..2f158ab1bec33fb5087babd785f24893d69fbdf3 100644 (file)
@@ -2081,12 +2081,12 @@ DEFUN(evpnrt5_network,
        int idx_ethtag = 5;
        int idx_routermac = 13;
 
-       return bgp_static_set_safi(
-               AFI_L2VPN, SAFI_EVPN, vty, argv[idx_ipv4_prefixlen]->arg,
-               argv[idx_route_distinguisher]->arg, argv[idx_label]->arg, NULL,
-               BGP_EVPN_IP_PREFIX_ROUTE, argv[idx_esi]->arg,
-               argv[idx_gwip]->arg, argv[idx_ethtag]->arg,
-               argv[idx_routermac]->arg);
+       return bgp_static_set(vty, false, argv[idx_ipv4_prefixlen]->arg,
+                             argv[idx_route_distinguisher]->arg,
+                             argv[idx_label]->arg, AFI_L2VPN, SAFI_EVPN, NULL,
+                             0, 0, BGP_EVPN_IP_PREFIX_ROUTE,
+                             argv[idx_esi]->arg, argv[idx_gwip]->arg,
+                             argv[idx_ethtag]->arg, argv[idx_routermac]->arg);
 }
 
 /* For testing purpose, static route of EVPN RT-5. */
@@ -2113,11 +2113,12 @@ DEFUN(no_evpnrt5_network,
        int idx_ethtag = 6;
        int idx_esi = 10;
        int idx_gwip = 12;
-       return bgp_static_unset_safi(
-               AFI_L2VPN, SAFI_EVPN, vty, argv[idx_ipv4_prefixlen]->arg,
-               argv[idx_ext_community]->arg, argv[idx_label]->arg,
-               BGP_EVPN_IP_PREFIX_ROUTE, argv[idx_esi]->arg,
-               argv[idx_gwip]->arg, argv[idx_ethtag]->arg);
+
+       return bgp_static_set(vty, true, argv[idx_ipv4_prefixlen]->arg,
+                             argv[idx_ext_community]->arg,
+                             argv[idx_label]->arg, AFI_L2VPN, SAFI_EVPN, NULL,
+                             0, 0, BGP_EVPN_IP_PREFIX_ROUTE, argv[idx_esi]->arg,
+                             argv[idx_gwip]->arg, argv[idx_ethtag]->arg, NULL);
 }
 
 static void evpn_import_rt_delete_auto(struct bgp *bgp, struct bgpevpn *vpn)
index ad667205128da91a5cdcbc22d8739209c6c0ef01..3ecb72b4ef5dc0db5111b387004c3b6777d916a0 100644 (file)
@@ -3011,10 +3011,11 @@ DEFUN (vpnv4_network,
        int idx_ipv4_prefixlen = 1;
        int idx_ext_community = 3;
        int idx_label = 5;
-       return bgp_static_set_safi(
-               AFI_IP, SAFI_MPLS_VPN, vty, argv[idx_ipv4_prefixlen]->arg,
-               argv[idx_ext_community]->arg, argv[idx_label]->arg, NULL, 0,
-               NULL, NULL, NULL, NULL);
+
+       return bgp_static_set(vty, false, argv[idx_ipv4_prefixlen]->arg,
+                             argv[idx_ext_community]->arg,
+                             argv[idx_label]->arg, AFI_IP, SAFI_MPLS_VPN, NULL,
+                             0, 0, 0, NULL, NULL, NULL, NULL);
 }
 
 DEFUN (vpnv4_network_route_map,
@@ -3033,11 +3034,12 @@ DEFUN (vpnv4_network_route_map,
        int idx_ipv4_prefixlen = 1;
        int idx_ext_community = 3;
        int idx_label = 5;
-       int idx_word_2 = 7;
-       return bgp_static_set_safi(
-               AFI_IP, SAFI_MPLS_VPN, vty, argv[idx_ipv4_prefixlen]->arg,
-               argv[idx_ext_community]->arg, argv[idx_label]->arg,
-               argv[idx_word_2]->arg, 0, NULL, NULL, NULL, NULL);
+       int idx_rmap = 7;
+
+       return bgp_static_set(vty, false, argv[idx_ipv4_prefixlen]->arg,
+                             argv[idx_ext_community]->arg, argv[idx_label]->arg,
+                             AFI_IP, SAFI_MPLS_VPN, argv[idx_rmap]->arg, 0, 0,
+                             0, NULL, NULL, NULL, NULL);
 }
 
 /* For testing purpose, static route of MPLS-VPN. */
@@ -3056,10 +3058,11 @@ DEFUN (no_vpnv4_network,
        int idx_ipv4_prefixlen = 2;
        int idx_ext_community = 4;
        int idx_label = 6;
-       return bgp_static_unset_safi(AFI_IP, SAFI_MPLS_VPN, vty,
-                                    argv[idx_ipv4_prefixlen]->arg,
-                                    argv[idx_ext_community]->arg,
-                                    argv[idx_label]->arg, 0, NULL, NULL, NULL);
+
+       return bgp_static_set(vty, true, argv[idx_ipv4_prefixlen]->arg,
+                             argv[idx_ext_community]->arg,
+                             argv[idx_label]->arg, AFI_IP, SAFI_MPLS_VPN, NULL,
+                             0, 0, 0, NULL, NULL, NULL, NULL);
 }
 
 DEFUN (vpnv6_network,
@@ -3078,17 +3081,20 @@ DEFUN (vpnv6_network,
        int idx_ipv6_prefix = 1;
        int idx_ext_community = 3;
        int idx_label = 5;
-       int idx_word_2 = 7;
+       int idx_rmap = 7;
+
        if (argc == 8)
-               return bgp_static_set_safi(
-                       AFI_IP6, SAFI_MPLS_VPN, vty, argv[idx_ipv6_prefix]->arg,
-                       argv[idx_ext_community]->arg, argv[idx_label]->arg,
-                       argv[idx_word_2]->arg, 0, NULL, NULL, NULL, NULL);
+               return bgp_static_set(vty, false, argv[idx_ipv6_prefix]->arg,
+                                     argv[idx_ext_community]->arg,
+                                     argv[idx_label]->arg, AFI_IP6,
+                                     SAFI_MPLS_VPN, argv[idx_rmap]->arg, 0, 0,
+                                     0, NULL, NULL, NULL, NULL);
        else
-               return bgp_static_set_safi(
-                       AFI_IP6, SAFI_MPLS_VPN, vty, argv[idx_ipv6_prefix]->arg,
-                       argv[idx_ext_community]->arg, argv[idx_label]->arg,
-                       NULL, 0, NULL, NULL, NULL, NULL);
+               return bgp_static_set(vty, false, argv[idx_ipv6_prefix]->arg,
+                                     argv[idx_ext_community]->arg,
+                                     argv[idx_label]->arg, AFI_IP6,
+                                     SAFI_MPLS_VPN, NULL, 0, 0, 0, NULL, NULL,
+                                     NULL, NULL);
 }
 
 /* For testing purpose, static route of MPLS-VPN. */
@@ -3107,10 +3113,11 @@ DEFUN (no_vpnv6_network,
        int idx_ipv6_prefix = 2;
        int idx_ext_community = 4;
        int idx_label = 6;
-       return bgp_static_unset_safi(AFI_IP6, SAFI_MPLS_VPN, vty,
-                                    argv[idx_ipv6_prefix]->arg,
-                                    argv[idx_ext_community]->arg,
-                                    argv[idx_label]->arg, 0, NULL, NULL, NULL);
+
+       return bgp_static_set(vty, true, argv[idx_ipv6_prefix]->arg,
+                             argv[idx_ext_community]->arg,
+                             argv[idx_label]->arg, AFI_IP6, SAFI_MPLS_VPN,
+                             NULL, 0, 0, 0, NULL, NULL, NULL, NULL);
 }
 
 int bgp_show_mpls_vpn(struct vty *vty, afi_t afi, struct prefix_rd *prd,
index e104aac8709a628c4ca28b2e342e1692d1c777b2..0cb32ff94cd46ea87b66a264785cf6f2991a34df 100644 (file)
@@ -6571,16 +6571,23 @@ void bgp_static_withdraw(struct bgp *bgp, const struct prefix *p, afi_t afi,
 
 /* Configure static BGP network.  When user don't run zebra, static
    route should be installed as valid.  */
-static int bgp_static_set(struct vty *vty, const char *negate,
-                         const char *ip_str, afi_t afi, safi_t safi,
-                         const char *rmap, int backdoor, uint32_t label_index)
+int bgp_static_set(struct vty *vty, bool negate, const char *ip_str,
+                  const char *rd_str, const char *label_str, afi_t afi,
+                  safi_t safi, const char *rmap, int backdoor,
+                  uint32_t label_index, int evpn_type, const char *esi,
+                  const char *gwip, const char *ethtag, const char *routermac)
 {
        VTY_DECLVAR_CONTEXT(bgp, bgp);
        int ret;
        struct prefix p;
        struct bgp_static *bgp_static;
+       struct prefix_rd prd;
+       struct bgp_dest *pdest;
        struct bgp_dest *dest;
+       struct bgp_table *table;
        uint8_t need_update = 0;
+       mpls_label_t label = MPLS_INVALID_LABEL;
+       struct prefix gw_ip;
 
        /* Convert IP prefix string to struct prefix. */
        ret = str2prefix(ip_str, &p);
@@ -6595,8 +6602,69 @@ static int bgp_static_set(struct vty *vty, const char *negate,
 
        apply_mask(&p);
 
-       if (negate) {
+       if (afi == AFI_L2VPN &&
+           (bgp_build_evpn_prefix(evpn_type, ethtag != NULL ? atol(ethtag) : 0,
+                                  &p))) {
+               vty_out(vty, "%% L2VPN prefix could not be forged\n");
+               return CMD_WARNING_CONFIG_FAILED;
+       }
+
+       if (safi == SAFI_MPLS_VPN || safi == SAFI_EVPN) {
+               ret = str2prefix_rd(rd_str, &prd);
+               if (!ret) {
+                       vty_out(vty, "%% Malformed rd\n");
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+
+               if (label_str) {
+                       unsigned long label_val;
+
+                       label_val = strtoul(label_str, NULL, 10);
+                       encode_label(label_val, &label);
+               }
+       }
+
+       if (safi == SAFI_EVPN) {
+               if (esi && str2esi(esi, NULL) == 0) {
+                       vty_out(vty, "%% Malformed ESI\n");
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+               if (routermac && prefix_str2mac(routermac, NULL) == 0) {
+                       vty_out(vty, "%% Malformed Router MAC\n");
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+               if (gwip) {
+                       memset(&gw_ip, 0, sizeof(gw_ip));
+                       ret = str2prefix(gwip, &gw_ip);
+                       if (!ret) {
+                               vty_out(vty, "%% Malformed GatewayIp\n");
+                               return CMD_WARNING_CONFIG_FAILED;
+                       }
+                       if ((gw_ip.family == AF_INET &&
+                            is_evpn_prefix_ipaddr_v6((struct prefix_evpn *)&p)) ||
+                           (gw_ip.family == AF_INET6 &&
+                            is_evpn_prefix_ipaddr_v4(
+                                    (struct prefix_evpn *)&p))) {
+                               vty_out(vty,
+                                       "%% GatewayIp family differs with IP prefix\n");
+                               return CMD_WARNING_CONFIG_FAILED;
+                       }
+               }
+       }
 
+       if (safi == SAFI_MPLS_VPN || safi == SAFI_EVPN) {
+               pdest = bgp_node_get(bgp->route[afi][safi],
+                                    (struct prefix *)&prd);
+               if (!bgp_dest_has_bgp_path_info_data(pdest))
+                       bgp_dest_set_bgp_table_info(pdest,
+                                                   bgp_table_init(bgp, afi,
+                                                                  safi));
+               table = bgp_dest_get_bgp_table_info(pdest);
+       } else {
+               table = bgp->route[afi][safi];
+       }
+
+       if (negate) {
                /* Set BGP static route configuration. */
                dest = bgp_node_lookup(bgp->route[afi][safi], &p);
 
@@ -6606,36 +6674,37 @@ static int bgp_static_set(struct vty *vty, const char *negate,
                }
 
                bgp_static = bgp_dest_get_bgp_static_info(dest);
+               if (bgp_static) {
+                       if ((label_index != BGP_INVALID_LABEL_INDEX) &&
+                           (label_index != bgp_static->label_index)) {
+                               vty_out(vty,
+                                       "%% label-index doesn't match static route\n");
+                               bgp_dest_unlock_node(dest);
+                               return CMD_WARNING_CONFIG_FAILED;
+                       }
 
-               if ((label_index != BGP_INVALID_LABEL_INDEX)
-                   && (label_index != bgp_static->label_index)) {
-                       vty_out(vty,
-                               "%% label-index doesn't match static route\n");
-                       bgp_dest_unlock_node(dest);
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
+                       if ((rmap && bgp_static->rmap.name) &&
+                           strcmp(rmap, bgp_static->rmap.name)) {
+                               vty_out(vty,
+                                       "%% route-map name doesn't match static route\n");
+                               bgp_dest_unlock_node(dest);
+                               return CMD_WARNING_CONFIG_FAILED;
+                       }
 
-               if ((rmap && bgp_static->rmap.name)
-                   && strcmp(rmap, bgp_static->rmap.name)) {
-                       vty_out(vty,
-                               "%% route-map name doesn't match static route\n");
-                       bgp_dest_unlock_node(dest);
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
+                       /* Update BGP RIB. */
+                       if (!bgp_static->backdoor)
+                               bgp_static_withdraw(bgp, &p, afi, safi, NULL);
 
-               /* Update BGP RIB. */
-               if (!bgp_static->backdoor)
-                       bgp_static_withdraw(bgp, &p, afi, safi, NULL);
+                       /* Clear configuration. */
+                       bgp_static_free(bgp_static);
+               }
 
-               /* Clear configuration. */
-               bgp_static_free(bgp_static);
                bgp_dest_set_bgp_static_info(dest, NULL);
                bgp_dest_unlock_node(dest);
                bgp_dest_unlock_node(dest);
        } else {
+               dest = bgp_node_get(table, &p);
 
-               /* Set BGP static route configuration. */
-               dest = bgp_node_get(bgp->route[afi][safi], &p);
                bgp_static = bgp_dest_get_bgp_static_info(dest);
                if (bgp_static) {
                        /* Configuration change. */
@@ -6681,6 +6750,8 @@ static int bgp_static_set(struct vty *vty, const char *negate,
                        bgp_static->igpmetric = 0;
                        bgp_static->igpnexthop.s_addr = INADDR_ANY;
                        bgp_static->label_index = label_index;
+                       bgp_static->label = label;
+                       bgp_static->prd = prd;
 
                        if (rmap) {
                                XFREE(MTYPE_ROUTE_MAP_NAME,
@@ -6694,6 +6765,26 @@ static int bgp_static_set(struct vty *vty, const char *negate,
                                route_map_counter_increment(
                                        bgp_static->rmap.map);
                        }
+
+                       if (safi == SAFI_EVPN) {
+                               if (esi) {
+                                       bgp_static->eth_s_id =
+                                               XCALLOC(MTYPE_ATTR,
+                                                       sizeof(esi_t));
+                                       str2esi(esi, bgp_static->eth_s_id);
+                               }
+                               if (routermac) {
+                                       bgp_static->router_mac =
+                                               XCALLOC(MTYPE_ATTR,
+                                                       ETH_ALEN + 1);
+                                       (void)prefix_str2mac(routermac,
+                                                            bgp_static->router_mac);
+                               }
+                               if (gwip)
+                                       prefix_copy(&bgp_static->gatewayIp,
+                                                   &gw_ip);
+                       }
+
                        bgp_dest_set_bgp_static_info(dest, bgp_static);
                }
 
@@ -6888,205 +6979,6 @@ void bgp_purge_static_redist_routes(struct bgp *bgp)
                bgp_purge_af_static_redist_routes(bgp, afi, safi);
 }
 
-/*
- * gpz 110624
- * Currently this is used to set static routes for VPN and ENCAP.
- * I think it can probably be factored with bgp_static_set.
- */
-int bgp_static_set_safi(afi_t afi, safi_t safi, struct vty *vty,
-                       const char *ip_str, const char *rd_str,
-                       const char *label_str, const char *rmap_str,
-                       int evpn_type, const char *esi, const char *gwip,
-                       const char *ethtag, const char *routermac)
-{
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
-       int ret;
-       struct prefix p;
-       struct prefix_rd prd;
-       struct bgp_dest *pdest;
-       struct bgp_dest *dest;
-       struct bgp_table *table;
-       struct bgp_static *bgp_static;
-       mpls_label_t label = MPLS_INVALID_LABEL;
-       struct prefix gw_ip;
-
-       /* validate ip prefix */
-       ret = str2prefix(ip_str, &p);
-       if (!ret) {
-               vty_out(vty, "%% Malformed prefix\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-       apply_mask(&p);
-       if ((afi == AFI_L2VPN)
-           && (bgp_build_evpn_prefix(evpn_type,
-                                     ethtag != NULL ? atol(ethtag) : 0, &p))) {
-               vty_out(vty, "%% L2VPN prefix could not be forged\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-
-       ret = str2prefix_rd(rd_str, &prd);
-       if (!ret) {
-               vty_out(vty, "%% Malformed rd\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-
-       if (label_str) {
-               unsigned long label_val;
-               label_val = strtoul(label_str, NULL, 10);
-               encode_label(label_val, &label);
-       }
-
-       if (safi == SAFI_EVPN) {
-               if (esi && str2esi(esi, NULL) == 0) {
-                       vty_out(vty, "%% Malformed ESI\n");
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-               if (routermac && prefix_str2mac(routermac, NULL) == 0) {
-                       vty_out(vty, "%% Malformed Router MAC\n");
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-               if (gwip) {
-                       memset(&gw_ip, 0, sizeof(gw_ip));
-                       ret = str2prefix(gwip, &gw_ip);
-                       if (!ret) {
-                               vty_out(vty, "%% Malformed GatewayIp\n");
-                               return CMD_WARNING_CONFIG_FAILED;
-                       }
-                       if ((gw_ip.family == AF_INET
-                            && is_evpn_prefix_ipaddr_v6(
-                                       (struct prefix_evpn *)&p))
-                           || (gw_ip.family == AF_INET6
-                               && is_evpn_prefix_ipaddr_v4(
-                                          (struct prefix_evpn *)&p))) {
-                               vty_out(vty,
-                                       "%% GatewayIp family differs with IP prefix\n");
-                               return CMD_WARNING_CONFIG_FAILED;
-                       }
-               }
-       }
-       pdest = bgp_node_get(bgp->route[afi][safi], (struct prefix *)&prd);
-       if (!bgp_dest_has_bgp_path_info_data(pdest))
-               bgp_dest_set_bgp_table_info(pdest,
-                                           bgp_table_init(bgp, afi, safi));
-       table = bgp_dest_get_bgp_table_info(pdest);
-
-       dest = bgp_node_get(table, &p);
-
-       if (bgp_dest_has_bgp_path_info_data(dest)) {
-               vty_out(vty, "%% Same network configuration exists\n");
-               bgp_dest_unlock_node(dest);
-       } else {
-               /* New configuration. */
-               bgp_static = bgp_static_new();
-               bgp_static->backdoor = 0;
-               bgp_static->valid = 0;
-               bgp_static->igpmetric = 0;
-               bgp_static->igpnexthop.s_addr = INADDR_ANY;
-               bgp_static->label = label;
-               bgp_static->prd = prd;
-
-               bgp_static->prd_pretty = XSTRDUP(MTYPE_BGP, rd_str);
-
-               if (rmap_str) {
-                       XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name);
-                       route_map_counter_decrement(bgp_static->rmap.map);
-                       bgp_static->rmap.name =
-                               XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap_str);
-                       bgp_static->rmap.map =
-                               route_map_lookup_by_name(rmap_str);
-                       route_map_counter_increment(bgp_static->rmap.map);
-               }
-
-               if (safi == SAFI_EVPN) {
-                       if (esi) {
-                               bgp_static->eth_s_id =
-                                       XCALLOC(MTYPE_ATTR,
-                                               sizeof(esi_t));
-                               str2esi(esi, bgp_static->eth_s_id);
-                       }
-                       if (routermac) {
-                               bgp_static->router_mac =
-                                       XCALLOC(MTYPE_ATTR, ETH_ALEN + 1);
-                               (void)prefix_str2mac(routermac,
-                                                    bgp_static->router_mac);
-                       }
-                       if (gwip)
-                               prefix_copy(&bgp_static->gatewayIp, &gw_ip);
-               }
-               bgp_dest_set_bgp_static_info(dest, bgp_static);
-
-               bgp_static->valid = 1;
-               bgp_static_update(bgp, &p, bgp_static, afi, safi);
-       }
-
-       return CMD_SUCCESS;
-}
-
-/* Configure static BGP network. */
-int bgp_static_unset_safi(afi_t afi, safi_t safi, struct vty *vty,
-                         const char *ip_str, const char *rd_str,
-                         const char *label_str, int evpn_type, const char *esi,
-                         const char *gwip, const char *ethtag)
-{
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
-       int ret;
-       struct prefix p;
-       struct prefix_rd prd;
-       struct bgp_dest *pdest;
-       struct bgp_dest *dest;
-       struct bgp_table *table;
-       struct bgp_static *bgp_static;
-       mpls_label_t label = MPLS_INVALID_LABEL;
-
-       /* Convert IP prefix string to struct prefix. */
-       ret = str2prefix(ip_str, &p);
-       if (!ret) {
-               vty_out(vty, "%% Malformed prefix\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-       apply_mask(&p);
-       if ((afi == AFI_L2VPN)
-           && (bgp_build_evpn_prefix(evpn_type,
-                                     ethtag != NULL ? atol(ethtag) : 0, &p))) {
-               vty_out(vty, "%% L2VPN prefix could not be forged\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-       ret = str2prefix_rd(rd_str, &prd);
-       if (!ret) {
-               vty_out(vty, "%% Malformed rd\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-
-       if (label_str) {
-               unsigned long label_val;
-               label_val = strtoul(label_str, NULL, 10);
-               encode_label(label_val, &label);
-       }
-
-       pdest = bgp_node_get(bgp->route[afi][safi], (struct prefix *)&prd);
-       if (!bgp_dest_has_bgp_path_info_data(pdest))
-               bgp_dest_set_bgp_table_info(pdest,
-                                           bgp_table_init(bgp, afi, safi));
-       else
-               bgp_dest_unlock_node(pdest);
-       table = bgp_dest_get_bgp_table_info(pdest);
-
-       dest = bgp_node_lookup(table, &p);
-
-       if (dest) {
-               bgp_static_withdraw(bgp, &p, afi, safi, &prd);
-
-               bgp_static = bgp_dest_get_bgp_static_info(dest);
-               bgp_static_free(bgp_static);
-               bgp_dest_set_bgp_static_info(dest, NULL);
-               bgp_dest_unlock_node(dest);
-               bgp_dest_unlock_node(dest);
-       } else
-               vty_out(vty, "%% Can't find the route\n");
-
-       return CMD_SUCCESS;
-}
-
 static int bgp_table_map_set(struct vty *vty, afi_t afi, safi_t safi,
                             const char *rmap_name)
 {
@@ -7192,10 +7084,13 @@ DEFPY(bgp_network,
                }
        }
 
-       return bgp_static_set(
-               vty, no, address_str ? addr_prefix_str : prefix_str, AFI_IP,
-               bgp_node_safi(vty), map_name, backdoor ? 1 : 0,
-               label_index ? (uint32_t)label_index : BGP_INVALID_LABEL_INDEX);
+       return bgp_static_set(vty, no,
+                             address_str ? addr_prefix_str : prefix_str, NULL,
+                             NULL, AFI_IP, bgp_node_safi(vty), map_name,
+                             backdoor ? 1 : 0,
+                             label_index ? (uint32_t)label_index
+                                         : BGP_INVALID_LABEL_INDEX,
+                             0, NULL, NULL, NULL, NULL);
 }
 
 DEFPY(ipv6_bgp_network,
@@ -7210,9 +7105,11 @@ DEFPY(ipv6_bgp_network,
        "Label index to associate with the prefix\n"
        "Label index value\n")
 {
-       return bgp_static_set(
-               vty, no, prefix_str, AFI_IP6, bgp_node_safi(vty), map_name, 0,
-               label_index ? (uint32_t)label_index : BGP_INVALID_LABEL_INDEX);
+       return bgp_static_set(vty, no, prefix_str, NULL, NULL, AFI_IP6,
+                             bgp_node_safi(vty), map_name, 0,
+                             label_index ? (uint32_t)label_index
+                                         : BGP_INVALID_LABEL_INDEX,
+                             0, NULL, NULL, NULL, NULL);
 }
 
 static struct bgp_aggregate *bgp_aggregate_new(void)
index 0a6f535b22fd5271fb84e6d705ce7735bd900cd1..f424e6d28600e6cc38c59b061cc4ff73d3fca84e 100644 (file)
@@ -762,14 +762,12 @@ extern void bgp_static_update(struct bgp *bgp, const struct prefix *p,
 extern void bgp_static_withdraw(struct bgp *bgp, const struct prefix *p,
                                afi_t afi, safi_t safi, struct prefix_rd *prd);
 
-extern int bgp_static_set_safi(afi_t afi, safi_t safi, struct vty *vty,
-                              const char *, const char *, const char *,
-                              const char *, int, const char *, const char *,
-                              const char *, const char *);
-
-extern int bgp_static_unset_safi(afi_t afi, safi_t safi, struct vty *,
-                                const char *, const char *, const char *, int,
-                                const char *, const char *, const char *);
+extern int bgp_static_set(struct vty *vty, bool negate, const char *ip_str,
+                         const char *rd_str, const char *label_str, afi_t afi,
+                         safi_t safi, const char *rmap, int backdoor,
+                         uint32_t label_index, int evpn_type, const char *esi,
+                         const char *gwip, const char *ethtag,
+                         const char *routermac);
 
 /* this is primarily for MPLS-VPN */
 extern void bgp_update(struct peer *peer, const struct prefix *p,