mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-29 23:09:34 +00:00
bgpd: convert distance bgp source cmd to defpy
Consolidate v4/v6 prefix with/without acl name distance source command to DEFPY. Signed-off-by: Chirag Shah <chirag@nvidia.com>
This commit is contained in:
parent
d9ce51130b
commit
8cc7152af8
186
bgpd/bgp_route.c
186
bgpd/bgp_route.c
@ -13766,12 +13766,15 @@ void cli_show_bgp_global_afi_safi_admin_distance_config(struct vty *vty,
|
|||||||
distance_local);
|
distance_local);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bgp_nb_distance_source_set(struct vty *vty, struct cmd_token **argv,
|
DEFPY_YANG(bgp_distance_source,
|
||||||
int argc)
|
bgp_distance_source_cmd,
|
||||||
|
"[no] distance (1-255) <A.B.C.D/M | X:X::X:X/M>$prefix [WORD$acl]",
|
||||||
|
NO_STR
|
||||||
|
"Define an administrative distance\n"
|
||||||
|
"Distance value\n"
|
||||||
|
"IP source prefix\n"
|
||||||
|
"Access list name\n")
|
||||||
{
|
{
|
||||||
int idx_number = 1;
|
|
||||||
int idx_ip_prefixlen = 2;
|
|
||||||
int idx_word = 3;
|
|
||||||
afi_t afi;
|
afi_t afi;
|
||||||
safi_t safi;
|
safi_t safi;
|
||||||
char xpath[XPATH_MAXLEN];
|
char xpath[XPATH_MAXLEN];
|
||||||
@ -13779,148 +13782,31 @@ static int bgp_nb_distance_source_set(struct vty *vty, struct cmd_token **argv,
|
|||||||
afi = bgp_node_afi(vty);
|
afi = bgp_node_afi(vty);
|
||||||
safi = bgp_node_safi(vty);
|
safi = bgp_node_safi(vty);
|
||||||
|
|
||||||
nb_cli_enqueue_change(vty, "./distance", NB_OP_MODIFY,
|
if (!no) {
|
||||||
argv[idx_number]->arg);
|
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
|
||||||
|
nb_cli_enqueue_change(vty, "./distance", NB_OP_MODIFY,
|
||||||
if (argv_find(argv, argc, "WORD", &idx_word))
|
distance_str);
|
||||||
nb_cli_enqueue_change(vty, "./access-list-policy-export",
|
if (acl)
|
||||||
NB_OP_CREATE, argv[idx_word]->arg);
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./access-list-policy-export",
|
||||||
|
NB_OP_CREATE, acl);
|
||||||
|
else
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./access-list-policy-export",
|
||||||
|
NB_OP_DESTROY, NULL);
|
||||||
|
} else {
|
||||||
|
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
snprintf(
|
snprintf(
|
||||||
xpath, sizeof(xpath),
|
xpath, sizeof(xpath),
|
||||||
"./global/afi-safis/afi-safi[afi-safi-name='%s']/%s/admin-distance-route[prefix='%s']",
|
"./global/afi-safis/afi-safi[afi-safi-name='%s']/%s/admin-distance-route[prefix='%s']",
|
||||||
yang_afi_safi_value2identity(afi, safi),
|
yang_afi_safi_value2identity(afi, safi),
|
||||||
bgp_afi_safi_get_container_str(afi, safi),
|
bgp_afi_safi_get_container_str(afi, safi), prefix_str);
|
||||||
argv[idx_ip_prefixlen]->arg);
|
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, xpath);
|
return nb_cli_apply_changes(vty, xpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bgp_nb_distance_source_unset(struct vty *vty,
|
|
||||||
struct cmd_token **argv, int argc)
|
|
||||||
{
|
|
||||||
int idx_ip_prefixlen = 3;
|
|
||||||
afi_t afi;
|
|
||||||
safi_t safi;
|
|
||||||
char xpath[XPATH_MAXLEN];
|
|
||||||
|
|
||||||
afi = bgp_node_afi(vty);
|
|
||||||
safi = bgp_node_safi(vty);
|
|
||||||
|
|
||||||
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
|
||||||
|
|
||||||
snprintf(
|
|
||||||
xpath, sizeof(xpath),
|
|
||||||
"./global/afi-safis/afi-safi[afi-safi-name='%s']/%s/admin-distance-route[prefix='%s']",
|
|
||||||
yang_afi_safi_value2identity(afi, safi),
|
|
||||||
bgp_afi_safi_get_container_str(afi, safi),
|
|
||||||
argv[idx_ip_prefixlen]->arg);
|
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, xpath);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN_YANG(bgp_distance_source, bgp_distance_source_cmd,
|
|
||||||
"distance (1-255) A.B.C.D/M",
|
|
||||||
"Define an administrative distance\n"
|
|
||||||
"Administrative distance\n"
|
|
||||||
"IP source prefix\n")
|
|
||||||
{
|
|
||||||
return bgp_nb_distance_source_set(vty, argv, argc);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN_YANG(no_bgp_distance_source, no_bgp_distance_source_cmd,
|
|
||||||
"no distance (1-255) A.B.C.D/M",
|
|
||||||
NO_STR
|
|
||||||
"Define an administrative distance\n"
|
|
||||||
"Administrative distance\n"
|
|
||||||
"IP source prefix\n")
|
|
||||||
{
|
|
||||||
return bgp_nb_distance_source_unset(vty, argv, argc);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN_YANG(bgp_distance_source_access_list, bgp_distance_source_access_list_cmd,
|
|
||||||
"distance (1-255) A.B.C.D/M WORD",
|
|
||||||
"Define an administrative distance\n"
|
|
||||||
"Administrative distance\n"
|
|
||||||
"IP source prefix\n"
|
|
||||||
"Access list name\n")
|
|
||||||
{
|
|
||||||
return bgp_nb_distance_source_set(vty, argv, argc);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN_YANG(no_bgp_distance_source_access_list,
|
|
||||||
no_bgp_distance_source_access_list_cmd,
|
|
||||||
"no distance (1-255) A.B.C.D/M WORD",
|
|
||||||
NO_STR
|
|
||||||
"Define an administrative distance\n"
|
|
||||||
"Administrative distance\n"
|
|
||||||
"IP source prefix\n"
|
|
||||||
"Access list name\n")
|
|
||||||
{
|
|
||||||
return bgp_nb_distance_source_unset(vty, argv, argc);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN_YANG(ipv6_bgp_distance_source, ipv6_bgp_distance_source_cmd,
|
|
||||||
"distance (1-255) X:X::X:X/M",
|
|
||||||
"Define an administrative distance\n"
|
|
||||||
"Administrative distance\n"
|
|
||||||
"IP source prefix\n")
|
|
||||||
{
|
|
||||||
int idx_number = 1;
|
|
||||||
int idx_ip_prefixlen = 2;
|
|
||||||
afi_t afi;
|
|
||||||
safi_t safi;
|
|
||||||
char xpath[XPATH_MAXLEN];
|
|
||||||
|
|
||||||
afi = bgp_node_afi(vty);
|
|
||||||
safi = bgp_node_safi(vty);
|
|
||||||
|
|
||||||
nb_cli_enqueue_change(vty, "./distance", NB_OP_MODIFY,
|
|
||||||
argv[idx_number]->arg);
|
|
||||||
|
|
||||||
snprintf(
|
|
||||||
xpath, sizeof(xpath),
|
|
||||||
"./global/afi-safis/afi-safi[afi-safi-name='%s']/%s/admin-distance-route[prefix='%s']",
|
|
||||||
yang_afi_safi_value2identity(afi, safi),
|
|
||||||
bgp_afi_safi_get_container_str(afi, safi),
|
|
||||||
argv[idx_ip_prefixlen]->arg);
|
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, xpath);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN_YANG(no_ipv6_bgp_distance_source, no_ipv6_bgp_distance_source_cmd,
|
|
||||||
"no distance (1-255) X:X::X:X/M",
|
|
||||||
NO_STR
|
|
||||||
"Define an administrative distance\n"
|
|
||||||
"Administrative distance\n"
|
|
||||||
"IP source prefix\n")
|
|
||||||
{
|
|
||||||
return bgp_nb_distance_source_unset(vty, argv, argc);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN_YANG(ipv6_bgp_distance_source_access_list,
|
|
||||||
ipv6_bgp_distance_source_access_list_cmd,
|
|
||||||
"distance (1-255) X:X::X:X/M WORD",
|
|
||||||
"Define an administrative distance\n"
|
|
||||||
"Administrative distance\n"
|
|
||||||
"IP source prefix\n"
|
|
||||||
"Access list name\n")
|
|
||||||
{
|
|
||||||
return bgp_nb_distance_source_set(vty, argv, argc);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFUN_YANG(no_ipv6_bgp_distance_source_access_list,
|
|
||||||
no_ipv6_bgp_distance_source_access_list_cmd,
|
|
||||||
"no distance (1-255) X:X::X:X/M WORD",
|
|
||||||
NO_STR
|
|
||||||
"Define an administrative distance\n"
|
|
||||||
"Administrative distance\n"
|
|
||||||
"IP source prefix\n"
|
|
||||||
"Access list name\n")
|
|
||||||
{
|
|
||||||
return bgp_nb_distance_source_unset(vty, argv, argc);
|
|
||||||
}
|
|
||||||
|
|
||||||
void cli_show_bgp_global_afi_safi_unicast_admin_distance_route(
|
void cli_show_bgp_global_afi_safi_unicast_admin_distance_route(
|
||||||
struct vty *vty, struct lyd_node *dnode, bool show_defaults)
|
struct vty *vty, struct lyd_node *dnode, bool show_defaults)
|
||||||
{
|
{
|
||||||
@ -14534,38 +14420,18 @@ void bgp_route_init(void)
|
|||||||
install_element(BGP_NODE, &bgp_distance_cmd);
|
install_element(BGP_NODE, &bgp_distance_cmd);
|
||||||
install_element(BGP_NODE, &no_bgp_distance_cmd);
|
install_element(BGP_NODE, &no_bgp_distance_cmd);
|
||||||
install_element(BGP_NODE, &bgp_distance_source_cmd);
|
install_element(BGP_NODE, &bgp_distance_source_cmd);
|
||||||
install_element(BGP_NODE, &no_bgp_distance_source_cmd);
|
|
||||||
install_element(BGP_NODE, &bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_NODE, &no_bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_IPV4_NODE, &bgp_distance_cmd);
|
install_element(BGP_IPV4_NODE, &bgp_distance_cmd);
|
||||||
install_element(BGP_IPV4_NODE, &no_bgp_distance_cmd);
|
install_element(BGP_IPV4_NODE, &no_bgp_distance_cmd);
|
||||||
install_element(BGP_IPV4_NODE, &bgp_distance_source_cmd);
|
install_element(BGP_IPV4_NODE, &bgp_distance_source_cmd);
|
||||||
install_element(BGP_IPV4_NODE, &no_bgp_distance_source_cmd);
|
|
||||||
install_element(BGP_IPV4_NODE, &bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_IPV4_NODE, &no_bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_IPV4M_NODE, &bgp_distance_cmd);
|
install_element(BGP_IPV4M_NODE, &bgp_distance_cmd);
|
||||||
install_element(BGP_IPV4M_NODE, &no_bgp_distance_cmd);
|
install_element(BGP_IPV4M_NODE, &no_bgp_distance_cmd);
|
||||||
install_element(BGP_IPV4M_NODE, &bgp_distance_source_cmd);
|
install_element(BGP_IPV4M_NODE, &bgp_distance_source_cmd);
|
||||||
install_element(BGP_IPV4M_NODE, &no_bgp_distance_source_cmd);
|
|
||||||
install_element(BGP_IPV4M_NODE, &bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_IPV4M_NODE,
|
|
||||||
&no_bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_IPV6_NODE, &bgp_distance_cmd);
|
install_element(BGP_IPV6_NODE, &bgp_distance_cmd);
|
||||||
install_element(BGP_IPV6_NODE, &no_bgp_distance_cmd);
|
install_element(BGP_IPV6_NODE, &no_bgp_distance_cmd);
|
||||||
install_element(BGP_IPV6_NODE, &ipv6_bgp_distance_source_cmd);
|
install_element(BGP_IPV6_NODE, &bgp_distance_source_cmd);
|
||||||
install_element(BGP_IPV6_NODE, &no_ipv6_bgp_distance_source_cmd);
|
|
||||||
install_element(BGP_IPV6_NODE,
|
|
||||||
&ipv6_bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_IPV6_NODE,
|
|
||||||
&no_ipv6_bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_IPV6M_NODE, &bgp_distance_cmd);
|
install_element(BGP_IPV6M_NODE, &bgp_distance_cmd);
|
||||||
install_element(BGP_IPV6M_NODE, &no_bgp_distance_cmd);
|
install_element(BGP_IPV6M_NODE, &no_bgp_distance_cmd);
|
||||||
install_element(BGP_IPV6M_NODE, &ipv6_bgp_distance_source_cmd);
|
install_element(BGP_IPV6M_NODE, &bgp_distance_source_cmd);
|
||||||
install_element(BGP_IPV6M_NODE, &no_ipv6_bgp_distance_source_cmd);
|
|
||||||
install_element(BGP_IPV6M_NODE,
|
|
||||||
&ipv6_bgp_distance_source_access_list_cmd);
|
|
||||||
install_element(BGP_IPV6M_NODE,
|
|
||||||
&no_ipv6_bgp_distance_source_access_list_cmd);
|
|
||||||
|
|
||||||
/* BGP dampening */
|
/* BGP dampening */
|
||||||
install_element(BGP_NODE, &bgp_dampening_cmd);
|
install_element(BGP_NODE, &bgp_dampening_cmd);
|
||||||
|
Loading…
Reference in New Issue
Block a user