mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 13:37:17 +02:00
zebra: convert to mgmtd
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
parent
42d6b864cd
commit
3900813298
|
@ -291,6 +291,10 @@ struct cmd_node {
|
|||
#define DEFPY_YANG(funcname, cmdname, cmdstr, helpstr) \
|
||||
DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_YANG)
|
||||
|
||||
#define DEFPY_YANG_HIDDEN(funcname, cmdname, cmdstr, helpstr) \
|
||||
DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, \
|
||||
CMD_ATTR_YANG | CMD_ATTR_HIDDEN)
|
||||
|
||||
#define DEFPY_YANG_NOSH(funcname, cmdname, cmdstr, helpstr) \
|
||||
DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, \
|
||||
CMD_ATTR_YANG | CMD_ATTR_NOSH)
|
||||
|
@ -315,6 +319,10 @@ struct cmd_node {
|
|||
#define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr) \
|
||||
DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_NOSH)
|
||||
|
||||
#define DEFUN_YANG_HIDDEN(funcname, cmdname, cmdstr, helpstr) \
|
||||
DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, \
|
||||
CMD_ATTR_YANG | CMD_ATTR_HIDDEN)
|
||||
|
||||
#define DEFUN_YANG_NOSH(funcname, cmdname, cmdstr, helpstr) \
|
||||
DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, \
|
||||
CMD_ATTR_YANG | CMD_ATTR_NOSH)
|
||||
|
|
|
@ -140,6 +140,7 @@ SPECIAL [(),]
|
|||
"DEFPY_ATTR" value = strdup(yytext); return DEFUNNY;
|
||||
"DEFPY_HIDDEN" value = strdup(yytext); return DEFUNNY;
|
||||
"DEFPY_YANG" value = strdup(yytext); return DEFUNNY;
|
||||
"DEFPY_YANG_HIDDEN" value = strdup(yytext); return DEFUNNY;
|
||||
"DEFPY_YANG_NOSH" value = strdup(yytext); return DEFUNNY;
|
||||
"ALIAS" value = strdup(yytext); return DEFUNNY;
|
||||
"ALIAS_HIDDEN" value = strdup(yytext); return DEFUNNY;
|
||||
|
|
14
lib/vty.c
14
lib/vty.c
|
@ -126,6 +126,7 @@ bool vty_log_commands;
|
|||
static bool vty_log_commands_perm;
|
||||
|
||||
char const *const mgmt_daemons[] = {
|
||||
"zebra",
|
||||
#ifdef HAVE_RIPD
|
||||
"ripd",
|
||||
#endif
|
||||
|
@ -2264,19 +2265,6 @@ bool mgmt_vty_read_configs(void)
|
|||
|
||||
snprintf(path, sizeof(path), "%s/mgmtd.conf", frr_sysconfdir);
|
||||
confp = vty_open_config(path, config_default);
|
||||
if (!confp) {
|
||||
char *orig;
|
||||
|
||||
snprintf(path, sizeof(path), "%s/zebra.conf", frr_sysconfdir);
|
||||
orig = XSTRDUP(MTYPE_TMP, host_config_get());
|
||||
|
||||
zlog_info("mgmtd: trying backup config file: %s", path);
|
||||
confp = vty_open_config(path, config_default);
|
||||
|
||||
host_config_set(path);
|
||||
XFREE(MTYPE_TMP, orig);
|
||||
}
|
||||
|
||||
if (confp) {
|
||||
zlog_info("mgmtd: reading config file: %s", path);
|
||||
|
||||
|
|
|
@ -65,6 +65,23 @@ struct mgmt_be_xpath_map {
|
|||
* above map as well.
|
||||
*/
|
||||
|
||||
static const char *const zebra_config_xpaths[] = {
|
||||
"/frr-affinity-map:lib",
|
||||
"/frr-filter:lib",
|
||||
"/frr-route-map:lib",
|
||||
"/frr-zebra:zebra",
|
||||
"/frr-interface:lib",
|
||||
"/frr-vrf:lib",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const char *const zebra_oper_xpaths[] = {
|
||||
"/frr-interface:lib/interface",
|
||||
"/frr-vrf:lib/vrf/frr-zebra:zebra",
|
||||
"/frr-zebra:zebra",
|
||||
NULL,
|
||||
};
|
||||
|
||||
#if HAVE_RIPD
|
||||
static const char *const ripd_config_xpaths[] = {
|
||||
"/frr-filter:lib",
|
||||
|
@ -105,6 +122,7 @@ static const char *const staticd_config_xpaths[] = {
|
|||
#endif
|
||||
|
||||
static const char *const *be_client_config_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
|
||||
[MGMTD_BE_CLIENT_ID_ZEBRA] = zebra_config_xpaths,
|
||||
#ifdef HAVE_RIPD
|
||||
[MGMTD_BE_CLIENT_ID_RIPD] = ripd_config_xpaths,
|
||||
#endif
|
||||
|
@ -116,13 +134,6 @@ static const char *const *be_client_config_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static const char *const zebra_oper_xpaths[] = {
|
||||
"/frr-interface:lib/interface",
|
||||
"/frr-vrf:lib/vrf/frr-zebra:zebra",
|
||||
"/frr-zebra:zebra",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const char *const *be_client_oper_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
|
||||
#ifdef HAVE_RIPD
|
||||
[MGMTD_BE_CLIENT_ID_RIPD] = ripd_oper_xpaths,
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "ripngd/ripng_nb.h"
|
||||
#include "routing_nb.h"
|
||||
#include "affinitymap.h"
|
||||
#include "zebra/zebra_cli.h"
|
||||
|
||||
/* mgmt options, we use GNU getopt library. */
|
||||
static const struct option longopts[] = {
|
||||
|
@ -143,32 +144,11 @@ static struct frr_signal_t mgmt_signals[] = {
|
|||
extern const struct frr_yang_module_info frr_staticd_cli_info;
|
||||
#endif
|
||||
|
||||
#if HAVE_BFDD == 0 || defined(HAVE_RTADV)
|
||||
const char *zebra_features[] = {
|
||||
#if HAVE_BFDD == 0
|
||||
"ptm-bfd",
|
||||
#endif
|
||||
#if defined(HAVE_RTADV)
|
||||
"ipv6-router-advertisements",
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These are stub info structs that are used to load the modules used by backend
|
||||
* clients into mgmtd. The modules are used by libyang in order to support
|
||||
* parsing binary data returns from the backend.
|
||||
*/
|
||||
const struct frr_yang_module_info zebra_info = {
|
||||
.name = "frr-zebra",
|
||||
#if HAVE_BFDD == 0 || defined(HAVE_RTADV)
|
||||
.features = zebra_features,
|
||||
#endif
|
||||
.ignore_cfg_cbs = true,
|
||||
.nodes = { { .xpath = NULL } },
|
||||
};
|
||||
|
||||
const struct frr_yang_module_info zebra_route_map_info = {
|
||||
.name = "frr-zebra-route-map",
|
||||
.ignore_cfg_cbs = true,
|
||||
|
@ -191,7 +171,7 @@ static const struct frr_yang_module_info *const mgmt_yang_modules[] = {
|
|||
* YANG module info used by backend clients get added here.
|
||||
*/
|
||||
|
||||
&zebra_info,
|
||||
&frr_zebra_cli_info,
|
||||
&zebra_route_map_info,
|
||||
|
||||
#ifdef HAVE_RIPD
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "ripd/rip_nb.h"
|
||||
#include "ripngd/ripng_nb.h"
|
||||
#include "staticd/static_vty.h"
|
||||
#include "zebra/zebra_cli.h"
|
||||
|
||||
extern struct frr_daemon_info *mgmt_daemon_info;
|
||||
|
||||
|
@ -579,6 +580,7 @@ void mgmt_vty_init(void)
|
|||
* backend components that are moved to new MGMTD infra
|
||||
* here one by one.
|
||||
*/
|
||||
zebra_cli_init();
|
||||
#if HAVE_RIPD
|
||||
rip_cli_init();
|
||||
#endif
|
||||
|
|
|
@ -16,6 +16,7 @@ clippy_scan += \
|
|||
|
||||
lib_LTLIBRARIES += mgmtd/libmgmt_be_nb.la
|
||||
mgmtd_libmgmt_be_nb_la_SOURCES = \
|
||||
zebra/zebra_cli.c \
|
||||
# end
|
||||
nodist_mgmtd_libmgmt_be_nb_la_SOURCES = \
|
||||
lib/affinitymap_cli.c \
|
||||
|
@ -44,6 +45,7 @@ noinst_HEADERS += \
|
|||
mgmtd/mgmt_history.h \
|
||||
mgmtd/mgmt_memory.h \
|
||||
mgmtd/mgmt_txn.h \
|
||||
zebra/zebra_cli.h \
|
||||
# end
|
||||
|
||||
sbin_PROGRAMS += mgmtd/mgmtd
|
||||
|
@ -52,6 +54,7 @@ mgmtd_mgmtd_SOURCES = \
|
|||
mgmtd/mgmt_main.c \
|
||||
# end
|
||||
nodist_mgmtd_mgmtd_SOURCES = \
|
||||
yang/frr-zebra.yang.c \
|
||||
# nothing
|
||||
mgmtd_mgmtd_CFLAGS = $(AM_CFLAGS) -I ./
|
||||
mgmtd_mgmtd_LDADD = mgmtd/libmgmtd.a lib/libfrr.la $(LIBCAP) $(LIBM) $(LIBYANG_LIBS) $(UST_LIBS)
|
||||
|
|
|
@ -3,7 +3,15 @@
|
|||
"interface": [
|
||||
{
|
||||
"name": "r1-eth0",
|
||||
"description": "r1-eth0-desc"
|
||||
"description": "r1-eth0-desc",
|
||||
"frr-zebra:zebra": {
|
||||
"ipv4-addrs": [
|
||||
{
|
||||
"ip": "1.1.1.1",
|
||||
"prefix-length": 24
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -14,6 +14,12 @@
|
|||
"phy-address": "rubout"
|
||||
},
|
||||
"frr-zebra:zebra": {
|
||||
"ipv4-addrs": [
|
||||
{
|
||||
"ip": "1.1.1.1",
|
||||
"prefix-length": 24
|
||||
}
|
||||
],
|
||||
"state": {
|
||||
"up-count": 0,
|
||||
"down-count": 0
|
||||
|
|
|
@ -3007,22 +3007,22 @@ DEFUN (vtysh_show_work_queues_daemon,
|
|||
return show_one_daemon(vty, argv, argc - 1, argv[argc - 1]->text);
|
||||
}
|
||||
|
||||
DEFUNSH(VTYSH_ZEBRA, vtysh_link_params, vtysh_link_params_cmd, "link-params",
|
||||
DEFUNSH(VTYSH_MGMTD, vtysh_link_params, vtysh_link_params_cmd, "link-params",
|
||||
LINK_PARAMS_STR)
|
||||
{
|
||||
vty->node = LINK_PARAMS_NODE;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUNSH_HIDDEN(VTYSH_ZEBRA, no_link_params_enable, no_link_params_enable_cmd,
|
||||
"no enable", NO_STR "Disable link parameters on this interface\n")
|
||||
DEFUNSH_HIDDEN(VTYSH_MGMTD, no_link_params_enable, no_link_params_enable_cmd,
|
||||
"no enable", NO_STR "Disable link parameters on this interface\n")
|
||||
{
|
||||
if (vty->node == LINK_PARAMS_NODE)
|
||||
vty->node = INTERFACE_NODE;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUNSH(VTYSH_ZEBRA, exit_link_params, exit_link_params_cmd, "exit-link-params",
|
||||
DEFUNSH(VTYSH_MGMTD, exit_link_params, exit_link_params_cmd, "exit-link-params",
|
||||
"Exit from Link Params configuration node\n")
|
||||
{
|
||||
if (vty->node == LINK_PARAMS_NODE)
|
||||
|
@ -3030,7 +3030,7 @@ DEFUNSH(VTYSH_ZEBRA, exit_link_params, exit_link_params_cmd, "exit-link-params",
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUNSH(VTYSH_ZEBRA, vtysh_exit_link_params, vtysh_exit_link_params_cmd, "exit",
|
||||
DEFUNSH(VTYSH_MGMTD, vtysh_exit_link_params, vtysh_exit_link_params_cmd, "exit",
|
||||
"Exit current mode and down to previous mode\n")
|
||||
{
|
||||
if (vty->node == LINK_PARAMS_NODE)
|
||||
|
@ -3038,7 +3038,7 @@ DEFUNSH(VTYSH_ZEBRA, vtysh_exit_link_params, vtysh_exit_link_params_cmd, "exit",
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUNSH(VTYSH_ZEBRA, vtysh_quit_link_params, vtysh_quit_link_params_cmd, "quit",
|
||||
DEFUNSH(VTYSH_MGMTD, vtysh_quit_link_params, vtysh_quit_link_params_cmd, "quit",
|
||||
"Exit current mode and down to previous mode\n")
|
||||
{
|
||||
return vtysh_exit_link_params(self, vty, argc, argv);
|
||||
|
|
|
@ -53,23 +53,23 @@ extern struct event_loop *master;
|
|||
VTYSH_BFDD | VTYSH_BABELD | VTYSH_BGPD | VTYSH_EIGRPD | VTYSH_ISISD | \
|
||||
VTYSH_FABRICD | VTYSH_LDPD | VTYSH_NHRPD | VTYSH_OSPF6D | \
|
||||
VTYSH_OSPFD | VTYSH_PBRD | VTYSH_PIMD | VTYSH_PIM6D | \
|
||||
VTYSH_VRRPD | VTYSH_ZEBRA | VTYSH_MGMTD
|
||||
VTYSH_VRRPD | VTYSH_MGMTD
|
||||
#define VTYSH_ACL_SHOW \
|
||||
VTYSH_BFDD | VTYSH_BABELD | VTYSH_BGPD | VTYSH_EIGRPD | VTYSH_ISISD | \
|
||||
VTYSH_FABRICD | VTYSH_LDPD | VTYSH_NHRPD | VTYSH_OSPF6D | \
|
||||
VTYSH_OSPFD | VTYSH_PBRD | VTYSH_PIMD | VTYSH_PIM6D | \
|
||||
VTYSH_RIPD | VTYSH_RIPNGD | VTYSH_VRRPD | VTYSH_ZEBRA
|
||||
|
||||
#define VTYSH_AFFMAP VTYSH_ZEBRA | VTYSH_ISISD | VTYSH_MGMTD
|
||||
#define VTYSH_AFFMAP VTYSH_ISISD | VTYSH_MGMTD
|
||||
#define VTYSH_RMAP_CONFIG \
|
||||
VTYSH_ZEBRA | VTYSH_OSPFD | VTYSH_OSPF6D | VTYSH_BGPD | VTYSH_ISISD | \
|
||||
VTYSH_OSPFD | VTYSH_OSPF6D | VTYSH_BGPD | VTYSH_ISISD | \
|
||||
VTYSH_PIMD | VTYSH_EIGRPD | VTYSH_FABRICD | VTYSH_MGMTD
|
||||
#define VTYSH_RMAP_SHOW \
|
||||
VTYSH_ZEBRA | VTYSH_RIPD | VTYSH_RIPNGD | VTYSH_OSPFD | VTYSH_OSPF6D | \
|
||||
VTYSH_BGPD | VTYSH_ISISD | VTYSH_PIMD | VTYSH_EIGRPD | \
|
||||
VTYSH_FABRICD
|
||||
#define VTYSH_INTERFACE_SUBSET \
|
||||
VTYSH_ZEBRA | VTYSH_OSPFD | VTYSH_OSPF6D | \
|
||||
VTYSH_OSPFD | VTYSH_OSPF6D | \
|
||||
VTYSH_ISISD | VTYSH_PIMD | VTYSH_PIM6D | VTYSH_NHRPD | \
|
||||
VTYSH_EIGRPD | VTYSH_BABELD | VTYSH_PBRD | VTYSH_FABRICD | \
|
||||
VTYSH_VRRPD | VTYSH_MGMTD
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -442,7 +442,7 @@ int main(int argc, char **argv)
|
|||
zebra_vty_init();
|
||||
mgmt_be_client = mgmt_be_client_create("zebra", NULL, 0,
|
||||
zrouter.master);
|
||||
access_list_init();
|
||||
access_list_init_new(true);
|
||||
prefix_list_init();
|
||||
|
||||
rtadv_init();
|
||||
|
|
|
@ -23,16 +23,12 @@
|
|||
#include "table.h"
|
||||
#include "rib.h"
|
||||
#include "vrf.h"
|
||||
#include "northbound_cli.h"
|
||||
|
||||
#include "zebra/zebra_router.h"
|
||||
#include "zebra/zapi_msg.h"
|
||||
#include "zebra/zebra_vrf.h"
|
||||
#include "zebra/router-id.h"
|
||||
#include "zebra/redistribute.h"
|
||||
#include "zebra/zebra_nb.h"
|
||||
|
||||
#include "router-id_clippy.c"
|
||||
|
||||
static struct connected *router_id_find_node(struct list *l,
|
||||
struct connected *ifc)
|
||||
|
@ -245,181 +241,6 @@ void router_id_del_address(struct connected *ifc)
|
|||
zsend_router_id_update(client, afi, &after, zvrf_id(zvrf));
|
||||
}
|
||||
|
||||
DEFPY_YANG (ip_router_id,
|
||||
ip_router_id_cmd,
|
||||
"ip router-id A.B.C.D$id vrf NAME",
|
||||
IP_STR
|
||||
"Manually set the router-id\n"
|
||||
"IP address to use for router-id\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_MODIFY,
|
||||
id_str);
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']", vrf);
|
||||
}
|
||||
|
||||
ALIAS_YANG (ip_router_id,
|
||||
router_id_cmd,
|
||||
"router-id A.B.C.D$id vrf NAME",
|
||||
"Manually set the router-id\n"
|
||||
"IP address to use for router-id\n"
|
||||
VRF_CMD_HELP_STR);
|
||||
|
||||
DEFPY_YANG (ipv6_router_id,
|
||||
ipv6_router_id_cmd,
|
||||
"ipv6 router-id X:X::X:X$id vrf NAME",
|
||||
IPV6_STR
|
||||
"Manually set the router-id\n"
|
||||
"IPv6 address to use for router-id\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
|
||||
NB_OP_MODIFY, id_str);
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']", vrf);
|
||||
}
|
||||
|
||||
|
||||
DEFPY_YANG (ip_router_id_in_vrf,
|
||||
ip_router_id_in_vrf_cmd,
|
||||
"ip router-id A.B.C.D$id",
|
||||
IP_STR
|
||||
"Manually set the router-id\n"
|
||||
"IP address to use for router-id\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_MODIFY,
|
||||
id_str);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
ALIAS_YANG (ip_router_id_in_vrf,
|
||||
router_id_in_vrf_cmd,
|
||||
"router-id A.B.C.D$id",
|
||||
"Manually set the router-id\n"
|
||||
"IP address to use for router-id\n");
|
||||
|
||||
void lib_vrf_zebra_router_id_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
const char *id = yang_dnode_get_string(dnode, NULL);
|
||||
|
||||
zebra_vrf_indent_cli_write(vty, dnode);
|
||||
|
||||
vty_out(vty, "ip router-id %s\n", id);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_router_id_in_vrf,
|
||||
ipv6_router_id_in_vrf_cmd,
|
||||
"ipv6 router-id X:X::X:X$id",
|
||||
IP6_STR
|
||||
"Manually set the IPv6 router-id\n"
|
||||
"IPV6 address to use for router-id\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
|
||||
NB_OP_MODIFY, id_str);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_vrf_zebra_ipv6_router_id_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
const char *id = yang_dnode_get_string(dnode, NULL);
|
||||
|
||||
zebra_vrf_indent_cli_write(vty, dnode);
|
||||
|
||||
vty_out(vty, "ipv6 router-id %s\n", id);
|
||||
}
|
||||
|
||||
DEFPY_YANG (no_ip_router_id,
|
||||
no_ip_router_id_cmd,
|
||||
"no ip router-id A.B.C.D vrf NAME",
|
||||
NO_STR
|
||||
IP_STR
|
||||
"Remove the manually configured router-id\n"
|
||||
"IP address to use for router-id\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_DESTROY,
|
||||
NULL);
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']", vrf);
|
||||
}
|
||||
|
||||
ALIAS_YANG (no_ip_router_id,
|
||||
no_router_id_cmd,
|
||||
"no router-id A.B.C.D vrf NAME",
|
||||
NO_STR
|
||||
"Remove the manually configured router-id\n"
|
||||
"IP address to use for router-id\n"
|
||||
VRF_CMD_HELP_STR);
|
||||
|
||||
DEFPY_YANG (no_ipv6_router_id,
|
||||
no_ipv6_router_id_cmd,
|
||||
"no ipv6 router-id X:X::X:X vrf NAME",
|
||||
NO_STR
|
||||
IPV6_STR
|
||||
"Remove the manually configured IPv6 router-id\n"
|
||||
"IPv6 address to use for router-id\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']", vrf);
|
||||
}
|
||||
|
||||
DEFPY_YANG (no_ip_router_id_in_vrf,
|
||||
no_ip_router_id_in_vrf_cmd,
|
||||
"no ip router-id [A.B.C.D]",
|
||||
NO_STR
|
||||
IP_STR
|
||||
"Remove the manually configured router-id\n"
|
||||
"IP address to use for router-id\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_DESTROY,
|
||||
NULL);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
ALIAS_YANG (no_ip_router_id_in_vrf,
|
||||
no_router_id_in_vrf_cmd,
|
||||
"no router-id [A.B.C.D]",
|
||||
NO_STR
|
||||
"Remove the manually configured router-id\n"
|
||||
"IP address to use for router-id\n");
|
||||
|
||||
DEFPY_YANG (no_ipv6_router_id_in_vrf,
|
||||
no_ipv6_router_id_in_vrf_cmd,
|
||||
"no ipv6 router-id [X:X::X:X]",
|
||||
NO_STR
|
||||
IP6_STR
|
||||
"Remove the manually configured IPv6 router-id\n"
|
||||
"IPv6 address to use for router-id\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
|
||||
NB_OP_DESTROY, NULL);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFUN (show_ip_router_id,
|
||||
show_ip_router_id_cmd,
|
||||
"show [ip|ipv6] router-id [vrf NAME]",
|
||||
|
@ -486,24 +307,6 @@ static int router_id_v6_cmp(void *a, void *b)
|
|||
|
||||
void router_id_cmd_init(void)
|
||||
{
|
||||
install_element(CONFIG_NODE, &ip_router_id_cmd);
|
||||
install_element(CONFIG_NODE, &router_id_cmd);
|
||||
install_element(CONFIG_NODE, &ipv6_router_id_cmd);
|
||||
install_element(CONFIG_NODE, &no_ip_router_id_cmd);
|
||||
install_element(CONFIG_NODE, &no_router_id_cmd);
|
||||
install_element(CONFIG_NODE, &ip_router_id_in_vrf_cmd);
|
||||
install_element(VRF_NODE, &ip_router_id_in_vrf_cmd);
|
||||
install_element(CONFIG_NODE, &router_id_in_vrf_cmd);
|
||||
install_element(VRF_NODE, &router_id_in_vrf_cmd);
|
||||
install_element(CONFIG_NODE, &ipv6_router_id_in_vrf_cmd);
|
||||
install_element(VRF_NODE, &ipv6_router_id_in_vrf_cmd);
|
||||
install_element(CONFIG_NODE, &no_ipv6_router_id_cmd);
|
||||
install_element(CONFIG_NODE, &no_ip_router_id_in_vrf_cmd);
|
||||
install_element(VRF_NODE, &no_ip_router_id_in_vrf_cmd);
|
||||
install_element(CONFIG_NODE, &no_router_id_in_vrf_cmd);
|
||||
install_element(VRF_NODE, &no_router_id_in_vrf_cmd);
|
||||
install_element(CONFIG_NODE, &no_ipv6_router_id_in_vrf_cmd);
|
||||
install_element(VRF_NODE, &no_ipv6_router_id_in_vrf_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_router_id_cmd);
|
||||
}
|
||||
|
||||
|
|
694
zebra/rtadv.c
694
zebra/rtadv.c
|
@ -21,7 +21,6 @@
|
|||
#include "vrf.h"
|
||||
#include "ns.h"
|
||||
#include "lib_errors.h"
|
||||
#include "northbound_cli.h"
|
||||
|
||||
#include "zebra/interface.h"
|
||||
#include "zebra/rtadv.h"
|
||||
|
@ -31,7 +30,6 @@
|
|||
#include "zebra/zebra_vrf.h"
|
||||
#include "zebra/zebra_errors.h"
|
||||
#include "zebra/zebra_router.h"
|
||||
#include "zebra/zebra_nb.h"
|
||||
|
||||
extern struct zebra_privs_t zserv_privs;
|
||||
|
||||
|
@ -1550,562 +1548,6 @@ DEFPY(show_ipv6_nd_ra_if, show_ipv6_nd_ra_if_cmd,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_ra_fast_retrans,
|
||||
ipv6_nd_ra_fast_retrans_cmd,
|
||||
"[no] ipv6 nd ra-fast-retrans",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Fast retransmit of RA packets\n")
|
||||
{
|
||||
if (no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/fast-retransmit",
|
||||
NB_OP_MODIFY, "false");
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/fast-retransmit",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
bool fast_retransmit = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (!fast_retransmit)
|
||||
vty_out(vty, " no ipv6 nd ra-fast-retrans\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " ipv6 nd ra-fast-retrans\n");
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_ra_hop_limit,
|
||||
ipv6_nd_ra_hop_limit_cmd,
|
||||
"[no] ipv6 nd ra-hop-limit ![(0-255)$hopcount]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Advertisement Hop Limit\n"
|
||||
"Advertisement Hop Limit in hops (default:64)\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/cur-hop-limit",
|
||||
NB_OP_MODIFY, hopcount_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/cur-hop-limit",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint8_t hop_limit = yang_dnode_get_uint8(dnode, NULL);
|
||||
|
||||
vty_out(vty, " ipv6 nd ra-hop-limit %u\n", hop_limit);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_ra_retrans_interval,
|
||||
ipv6_nd_ra_retrans_interval_cmd,
|
||||
"[no] ipv6 nd ra-retrans-interval ![(0-4294967295)$interval]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Advertisement Retransmit Interval\n"
|
||||
"Advertisement Retransmit Interval in msec\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/retrans-timer",
|
||||
NB_OP_MODIFY, interval_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/retrans-timer",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_retrans_timer_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint32_t retrans_timer = yang_dnode_get_uint32(dnode, NULL);
|
||||
|
||||
vty_out(vty, " ipv6 nd ra-retrans-interval %u\n", retrans_timer);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_suppress_ra,
|
||||
ipv6_nd_suppress_ra_cmd,
|
||||
"[no] ipv6 nd suppress-ra",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Suppress Router Advertisement\n")
|
||||
{
|
||||
if (no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/send-advertisements",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/send-advertisements",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_send_advertisements_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
bool send_advertisements = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (send_advertisements)
|
||||
vty_out(vty, " no ipv6 nd suppress-ra\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " ipv6 nd suppress-ra\n");
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_ra_interval,
|
||||
ipv6_nd_ra_interval_cmd,
|
||||
"[no] ipv6 nd ra-interval ![<(1-1800)$sec|msec (70-1800000)$msec>]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Router Advertisement interval\n"
|
||||
"Router Advertisement interval in seconds\n"
|
||||
"Router Advertisement interval in milliseconds\n"
|
||||
"Router Advertisement interval in milliseconds\n")
|
||||
{
|
||||
char value[YANG_VALUE_MAXLEN];
|
||||
|
||||
if (!no) {
|
||||
if (sec)
|
||||
snprintf(value, sizeof(value), "%lu", sec * 1000);
|
||||
else
|
||||
snprintf(value, sizeof(value), "%lu", msec);
|
||||
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/max-rtr-adv-interval",
|
||||
NB_OP_MODIFY, value);
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/max-rtr-adv-interval",
|
||||
NB_OP_DESTROY, NULL);
|
||||
}
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint32_t max_rtr_adv_interval = yang_dnode_get_uint32(dnode, NULL);
|
||||
|
||||
if (max_rtr_adv_interval % 1000)
|
||||
vty_out(vty, " ipv6 nd ra-interval msec %u\n",
|
||||
max_rtr_adv_interval);
|
||||
else
|
||||
vty_out(vty, " ipv6 nd ra-interval %u\n",
|
||||
max_rtr_adv_interval / 1000);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_ra_lifetime,
|
||||
ipv6_nd_ra_lifetime_cmd,
|
||||
"[no] ipv6 nd ra-lifetime ![(0-9000)$lifetime]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Router lifetime\n"
|
||||
"Router lifetime in seconds (0 stands for a non-default gw)\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/default-lifetime",
|
||||
NB_OP_MODIFY, lifetime_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/default-lifetime",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_default_lifetime_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint16_t default_lifetime = yang_dnode_get_uint16(dnode, NULL);
|
||||
|
||||
vty_out(vty, " ipv6 nd ra-lifetime %u\n", default_lifetime);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_reachable_time,
|
||||
ipv6_nd_reachable_time_cmd,
|
||||
"[no] ipv6 nd reachable-time ![(1-3600000)$msec]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Reachable time\n"
|
||||
"Reachable time in milliseconds\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/reachable-time",
|
||||
NB_OP_MODIFY, msec_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/reachable-time",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_reachable_time_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint32_t reachable_time = yang_dnode_get_uint32(dnode, NULL);
|
||||
|
||||
vty_out(vty, " ipv6 nd reachable-time %u\n", reachable_time);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_homeagent_preference,
|
||||
ipv6_nd_homeagent_preference_cmd,
|
||||
"[no] ipv6 nd home-agent-preference ![(0-65535)$pref]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Home Agent preference\n"
|
||||
"preference value (default is 0, least preferred)\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference",
|
||||
NB_OP_MODIFY, pref_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint16_t home_agent_preference = yang_dnode_get_uint16(dnode, NULL);
|
||||
|
||||
vty_out(vty, " ipv6 nd home-agent-preference %u\n",
|
||||
home_agent_preference);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_homeagent_lifetime,
|
||||
ipv6_nd_homeagent_lifetime_cmd,
|
||||
"[no] ipv6 nd home-agent-lifetime ![(1-65520)$lifetime]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Home Agent lifetime\n"
|
||||
"Home Agent lifetime in seconds\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/home-agent-lifetime",
|
||||
NB_OP_MODIFY, lifetime_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/home-agent-lifetime",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint16_t home_agent_lifetime = yang_dnode_get_uint16(dnode, NULL);
|
||||
|
||||
vty_out(vty, " ipv6 nd home-agent-lifetime %u\n", home_agent_lifetime);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_managed_config_flag,
|
||||
ipv6_nd_managed_config_flag_cmd,
|
||||
"[no] ipv6 nd managed-config-flag",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Managed address configuration flag\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/managed-flag",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/managed-flag",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_managed_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
bool managed_flag = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (managed_flag)
|
||||
vty_out(vty, " ipv6 nd managed-config-flag\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " no ipv6 nd managed-config-flag\n");
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_homeagent_config_flag,
|
||||
ipv6_nd_homeagent_config_flag_cmd,
|
||||
"[no] ipv6 nd home-agent-config-flag",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Home Agent configuration flag\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/home-agent-flag",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/home-agent-flag",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
bool home_agent_flag = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (home_agent_flag)
|
||||
vty_out(vty, " ipv6 nd home-agent-config-flag\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " no ipv6 nd home-agent-config-flag\n");
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_adv_interval_config_option,
|
||||
ipv6_nd_adv_interval_config_option_cmd,
|
||||
"[no] ipv6 nd adv-interval-option",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Advertisement Interval Option\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/advertisement-interval-option",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/advertisement-interval-option",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
bool advertisement_interval_option = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (advertisement_interval_option)
|
||||
vty_out(vty, " ipv6 nd adv-interval-option\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " no ipv6 nd adv-interval-option\n");
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_other_config_flag,
|
||||
ipv6_nd_other_config_flag_cmd,
|
||||
"[no] ipv6 nd other-config-flag",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Other statefull configuration flag\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/other-config-flag",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/other-config-flag",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_other_config_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
bool other_config_flag = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (other_config_flag)
|
||||
vty_out(vty, " ipv6 nd other-config-flag\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " no ipv6 nd other-config-flag\n");
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_prefix,
|
||||
ipv6_nd_prefix_cmd,
|
||||
"[no] ipv6 nd prefix X:X::X:X/M$prefix [<(0-4294967295)|infinite>$valid <(0-4294967295)|infinite>$preferred] [{router-address$routeraddr|off-link$offlink|no-autoconfig$noautoconf}]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Prefix information\n"
|
||||
"IPv6 prefix\n"
|
||||
"Valid lifetime in seconds\n"
|
||||
"Infinite valid lifetime\n"
|
||||
"Preferred lifetime in seconds\n"
|
||||
"Infinite preferred lifetime\n"
|
||||
"Set Router Address flag\n"
|
||||
"Do not use prefix for onlink determination\n"
|
||||
"Do not use prefix for autoconfiguration\n")
|
||||
{
|
||||
if (!no) {
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
|
||||
if (valid) {
|
||||
if (strmatch(valid, "infinite"))
|
||||
valid = "4294967295";
|
||||
nb_cli_enqueue_change(vty, "./valid-lifetime",
|
||||
NB_OP_MODIFY, valid);
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty, "./valid-lifetime",
|
||||
NB_OP_DESTROY, NULL);
|
||||
}
|
||||
if (preferred) {
|
||||
if (strmatch(preferred, "infinite"))
|
||||
preferred = "4294967295";
|
||||
nb_cli_enqueue_change(vty, "./preferred-lifetime",
|
||||
NB_OP_MODIFY, preferred);
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty, "./preferred-lifetime",
|
||||
NB_OP_DESTROY, NULL);
|
||||
}
|
||||
if (routeraddr)
|
||||
nb_cli_enqueue_change(vty, "./router-address-flag",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty, "./router-address-flag",
|
||||
NB_OP_DESTROY, NULL);
|
||||
if (offlink)
|
||||
nb_cli_enqueue_change(vty, "./on-link-flag",
|
||||
NB_OP_MODIFY, "false");
|
||||
else
|
||||
nb_cli_enqueue_change(vty, "./on-link-flag",
|
||||
NB_OP_DESTROY, NULL);
|
||||
if (noautoconf)
|
||||
nb_cli_enqueue_change(vty, "./autonomous-flag",
|
||||
NB_OP_MODIFY, "false");
|
||||
else
|
||||
nb_cli_enqueue_change(vty, "./autonomous-flag",
|
||||
NB_OP_DESTROY, NULL);
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
||||
}
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/prefix-list/prefix[prefix-spec='%s']",
|
||||
prefix_str);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
const char *prefix = yang_dnode_get_string(dnode, "prefix-spec");
|
||||
struct lyd_node *valid = yang_dnode_get(dnode, "valid-lifetime");
|
||||
struct lyd_node *preferred = yang_dnode_get(dnode, "preferred-lifetime");
|
||||
bool router_address_flag = yang_dnode_get_bool(dnode,
|
||||
"router-address-flag");
|
||||
bool on_link_flag = yang_dnode_get_bool(dnode, "on-link-flag");
|
||||
bool autonomous_flag = yang_dnode_get_bool(dnode, "autonomous-flag");
|
||||
|
||||
vty_out(vty, " ipv6 nd prefix %s", prefix);
|
||||
|
||||
if (!yang_dnode_is_default(valid, NULL) ||
|
||||
!yang_dnode_is_default(preferred, NULL) || show_defaults) {
|
||||
uint32_t valid_lifetime = yang_dnode_get_uint32(valid, NULL);
|
||||
uint32_t preferred_lifetime = yang_dnode_get_uint32(preferred,
|
||||
NULL);
|
||||
|
||||
if (valid_lifetime == UINT32_MAX)
|
||||
vty_out(vty, " infinite");
|
||||
else
|
||||
vty_out(vty, " %u", valid_lifetime);
|
||||
if (preferred_lifetime == UINT32_MAX)
|
||||
vty_out(vty, " infinite");
|
||||
else
|
||||
vty_out(vty, " %u", preferred_lifetime);
|
||||
}
|
||||
|
||||
if (!on_link_flag)
|
||||
vty_out(vty, " off-link");
|
||||
|
||||
if (!autonomous_flag)
|
||||
vty_out(vty, " no-autoconfig");
|
||||
|
||||
if (router_address_flag)
|
||||
vty_out(vty, " router-address");
|
||||
|
||||
vty_out(vty, "\n");
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_router_preference,
|
||||
ipv6_nd_router_preference_cmd,
|
||||
"[no] ipv6 nd router-preference ![<high|medium|low>$pref]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Default router preference\n"
|
||||
"High default router preference\n"
|
||||
"Medium default router preference (default)\n"
|
||||
"Low default router preference\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/default-router-preference",
|
||||
NB_OP_MODIFY, pref);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/default-router-preference",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_default_router_preference_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
const char *default_router_preference = yang_dnode_get_string(dnode,
|
||||
NULL);
|
||||
|
||||
vty_out(vty, " ipv6 nd router-preference %s\n",
|
||||
default_router_preference);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_mtu,
|
||||
ipv6_nd_mtu_cmd,
|
||||
"[no] ipv6 nd mtu ![(1-65535)]",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Advertised MTU\n"
|
||||
"MTU in bytes\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/link-mtu",
|
||||
NB_OP_MODIFY, mtu_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/link-mtu",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_link_mtu_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint16_t link_mtu = yang_dnode_get_uint32(dnode, NULL);
|
||||
|
||||
vty_out(vty, " ipv6 nd mtu %u\n", link_mtu);
|
||||
}
|
||||
|
||||
static struct rtadv_rdnss *rtadv_rdnss_new(void)
|
||||
{
|
||||
return XCALLOC(MTYPE_RTADV_RDNSS, sizeof(struct rtadv_rdnss));
|
||||
|
@ -2201,123 +1643,6 @@ int rtadv_dnssl_encode(uint8_t *out, const char *in)
|
|||
return outp;
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_rdnss,
|
||||
ipv6_nd_rdnss_cmd,
|
||||
"[no] ipv6 nd rdnss X:X::X:X$addr [<(0-4294967295)|infinite>]$lifetime",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Recursive DNS server information\n"
|
||||
"IPv6 address\n"
|
||||
"Valid lifetime in seconds\n"
|
||||
"Infinite valid lifetime\n")
|
||||
{
|
||||
if (!no) {
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
|
||||
if (lifetime) {
|
||||
if (strmatch(lifetime, "infinite"))
|
||||
lifetime = "4294967295";
|
||||
nb_cli_enqueue_change(vty, "./lifetime", NB_OP_MODIFY,
|
||||
lifetime);
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty, "./lifetime", NB_OP_DESTROY,
|
||||
NULL);
|
||||
}
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
||||
}
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/rdnss/rdnss-address[address='%s']",
|
||||
addr_str);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
const char *address = yang_dnode_get_string(dnode, "address");
|
||||
|
||||
vty_out(vty, " ipv6 nd rdnss %s", address);
|
||||
|
||||
if (yang_dnode_exists(dnode, "lifetime")) {
|
||||
uint32_t lifetime = yang_dnode_get_uint32(dnode, "lifetime");
|
||||
|
||||
if (lifetime == UINT32_MAX)
|
||||
vty_out(vty, " infinite");
|
||||
else
|
||||
vty_out(vty, " %u", lifetime);
|
||||
}
|
||||
|
||||
vty_out(vty, "\n");
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_nd_dnssl,
|
||||
ipv6_nd_dnssl_cmd,
|
||||
"[no] ipv6 nd dnssl SUFFIX [<(0-4294967295)|infinite>]$lifetime",
|
||||
NO_STR
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"DNS search list information\n"
|
||||
"Domain name suffix\n"
|
||||
"Valid lifetime in seconds\n"
|
||||
"Infinite valid lifetime\n")
|
||||
{
|
||||
struct rtadv_dnssl dnssl;
|
||||
size_t len;
|
||||
|
||||
len = strlcpy(dnssl.name, suffix, sizeof(dnssl.name));
|
||||
if (len == 0 || len >= sizeof(dnssl.name)) {
|
||||
vty_out(vty, "Malformed DNS search domain\n");
|
||||
return CMD_WARNING_CONFIG_FAILED;
|
||||
}
|
||||
if (dnssl.name[len - 1] == '.') {
|
||||
/*
|
||||
* Allow, but don't require, a trailing dot signifying the root
|
||||
* zone. Canonicalize by cutting it off if present.
|
||||
*/
|
||||
dnssl.name[len - 1] = '\0';
|
||||
len--;
|
||||
}
|
||||
|
||||
if (!no) {
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
|
||||
if (lifetime) {
|
||||
if (strmatch(lifetime, "infinite"))
|
||||
lifetime = "4294967295";
|
||||
nb_cli_enqueue_change(vty, "./lifetime", NB_OP_MODIFY,
|
||||
lifetime);
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty, "./lifetime", NB_OP_DESTROY,
|
||||
NULL);
|
||||
}
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
||||
}
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/ipv6-router-advertisements/dnssl/dnssl-domain[domain='%s']",
|
||||
dnssl.name);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
const char *domain = yang_dnode_get_string(dnode, "domain");
|
||||
|
||||
vty_out(vty, " ipv6 nd dnssl %s", domain);
|
||||
|
||||
if (yang_dnode_exists(dnode, "lifetime")) {
|
||||
uint32_t lifetime = yang_dnode_get_uint32(dnode, "lifetime");
|
||||
|
||||
if (lifetime == UINT32_MAX)
|
||||
vty_out(vty, " infinite");
|
||||
else
|
||||
vty_out(vty, " %u", lifetime);
|
||||
}
|
||||
|
||||
vty_out(vty, "\n");
|
||||
}
|
||||
|
||||
/* Dump interface ND information to vty. */
|
||||
static int nd_dump_vty(struct vty *vty, struct interface *ifp)
|
||||
{
|
||||
|
@ -2535,25 +1860,6 @@ void rtadv_cmd_init(void)
|
|||
hook_register(zebra_if_extra_info, nd_dump_vty);
|
||||
|
||||
install_element(VIEW_NODE, &show_ipv6_nd_ra_if_cmd);
|
||||
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_ra_fast_retrans_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_ra_retrans_interval_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_ra_hop_limit_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_suppress_ra_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_ra_interval_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_ra_lifetime_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_reachable_time_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_managed_config_flag_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_other_config_flag_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_homeagent_config_flag_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_homeagent_preference_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_homeagent_lifetime_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_adv_interval_config_option_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_prefix_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_router_preference_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_mtu_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_rdnss_cmd);
|
||||
install_element(INTERFACE_NODE, &ipv6_nd_dnssl_cmd);
|
||||
}
|
||||
|
||||
static int if_join_all_router(int sock, struct interface *ifp)
|
||||
|
|
|
@ -118,7 +118,6 @@ clippy_scan += \
|
|||
zebra/debug.c \
|
||||
zebra/interface.c \
|
||||
zebra/rtadv.c \
|
||||
zebra/zebra_evpn_mh.c \
|
||||
zebra/zebra_mlag_vty.c \
|
||||
zebra/zebra_routemap.c \
|
||||
zebra/zebra_vty.c \
|
||||
|
@ -126,7 +125,7 @@ clippy_scan += \
|
|||
zebra/zebra_vrf.c \
|
||||
zebra/dpdk/zebra_dplane_dpdk_vty.c \
|
||||
zebra/label_manager.c \
|
||||
zebra/router-id.c \
|
||||
zebra/zebra_cli.c \
|
||||
# end
|
||||
|
||||
noinst_HEADERS += \
|
||||
|
|
2934
zebra/zebra_cli.c
Normal file
2934
zebra/zebra_cli.c
Normal file
File diff suppressed because it is too large
Load diff
10
zebra/zebra_cli.h
Normal file
10
zebra/zebra_cli.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#ifndef _ZEBRA_CLI_H
|
||||
#define _ZEBRA_CLI_H 1
|
||||
|
||||
extern const struct frr_yang_module_info frr_zebra_cli_info;
|
||||
|
||||
void zebra_cli_init(void);
|
||||
|
||||
#endif
|
|
@ -20,7 +20,6 @@
|
|||
#include "table.h"
|
||||
#include "vlan.h"
|
||||
#include "vxlan.h"
|
||||
#include "northbound_cli.h"
|
||||
|
||||
#include "zebra/zebra_router.h"
|
||||
#include "zebra/debug.h"
|
||||
|
@ -3305,175 +3304,6 @@ void zebra_evpn_mh_if_init(struct zebra_if *zif)
|
|||
zif->es_info.df_pref = EVPN_MH_DF_PREF_DEFAULT;
|
||||
}
|
||||
|
||||
#include "zebra/zebra_evpn_mh_clippy.c"
|
||||
/* CLI for setting an ES in bypass mode */
|
||||
DEFPY_HIDDEN(zebra_evpn_es_bypass, zebra_evpn_es_bypass_cmd,
|
||||
"[no] evpn mh bypass",
|
||||
NO_STR "EVPN\n" EVPN_MH_VTY_STR "set bypass mode\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/evpn-mh/bypass",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/evpn-mh/bypass",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_evpn_mh_bypass_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
bool bypass = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (bypass)
|
||||
vty_out(vty, " evpn mh bypass\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " no evpn mh bypass\n");
|
||||
}
|
||||
|
||||
/* CLI for configuring DF preference part for an ES */
|
||||
DEFPY_YANG (zebra_evpn_es_pref,
|
||||
zebra_evpn_es_pref_cmd,
|
||||
"[no$no] evpn mh es-df-pref ![(1-65535)$df_pref]",
|
||||
NO_STR
|
||||
"EVPN\n"
|
||||
EVPN_MH_VTY_STR
|
||||
"Preference value used for DF election\n"
|
||||
"Preference\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/evpn-mh/df-preference",
|
||||
NB_OP_MODIFY, df_pref_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/evpn-mh/df-preference",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_evpn_mh_df_preference_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint16_t df_pref = yang_dnode_get_uint16(dnode, NULL);
|
||||
|
||||
vty_out(vty, " evpn mh es-df-pref %u\n", df_pref);
|
||||
}
|
||||
|
||||
/* CLI for setting up sysmac part of ESI on an access port */
|
||||
DEFPY_YANG (zebra_evpn_es_sys_mac,
|
||||
zebra_evpn_es_sys_mac_cmd,
|
||||
"[no$no] evpn mh es-sys-mac ![X:X:X:X:X:X$mac]",
|
||||
NO_STR
|
||||
"EVPN\n"
|
||||
EVPN_MH_VTY_STR
|
||||
"Ethernet segment system MAC\n"
|
||||
MAC_STR
|
||||
)
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/evpn-mh/type-3/system-mac",
|
||||
NB_OP_MODIFY, mac_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/evpn-mh/type-3/system-mac",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_evpn_mh_type_3_system_mac_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
char buf[ETHER_ADDR_STRLEN];
|
||||
struct ethaddr mac;
|
||||
|
||||
yang_dnode_get_mac(&mac, dnode, NULL);
|
||||
|
||||
vty_out(vty, " evpn mh es-sys-mac %s\n",
|
||||
prefix_mac2str(&mac, buf, sizeof(buf)));
|
||||
}
|
||||
|
||||
/* CLI for setting up local-ID part of ESI on an access port */
|
||||
DEFPY_YANG (zebra_evpn_es_id,
|
||||
zebra_evpn_es_id_cmd,
|
||||
"[no$no] evpn mh es-id ![(1-16777215)$es_lid | NAME$esi_str]",
|
||||
NO_STR
|
||||
"EVPN\n"
|
||||
EVPN_MH_VTY_STR
|
||||
"Ethernet segment identifier\n"
|
||||
"local discriminator\n"
|
||||
"10-byte ID - 00:AA:BB:CC:DD:EE:FF:GG:HH:II\n"
|
||||
)
|
||||
{
|
||||
if (no) {
|
||||
/* We don't know which one is configured, so detroy both types. */
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/evpn-mh/type-0/esi",
|
||||
NB_OP_DESTROY, NULL);
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/evpn-mh/type-3/local-discriminator",
|
||||
NB_OP_DESTROY, NULL);
|
||||
} else {
|
||||
if (esi_str)
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/evpn-mh/type-0/esi",
|
||||
NB_OP_MODIFY, esi_str);
|
||||
else
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/evpn-mh/type-3/local-discriminator",
|
||||
NB_OP_MODIFY, es_lid_str);
|
||||
}
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_evpn_mh_type_0_esi_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
const char *esi_str = yang_dnode_get_string(dnode, NULL);
|
||||
|
||||
vty_out(vty, " evpn mh es-id %s\n", esi_str);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_evpn_mh_type_3_local_discriminator_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
uint32_t es_lid = yang_dnode_get_uint32(dnode, NULL);
|
||||
|
||||
vty_out(vty, " evpn mh es-id %u\n", es_lid);
|
||||
}
|
||||
|
||||
/* CLI for tagging an interface as an uplink */
|
||||
DEFPY_YANG (zebra_evpn_mh_uplink,
|
||||
zebra_evpn_mh_uplink_cmd,
|
||||
"[no] evpn mh uplink",
|
||||
NO_STR
|
||||
"EVPN\n"
|
||||
EVPN_MH_VTY_STR
|
||||
"Uplink to the VxLAN core\n")
|
||||
{
|
||||
if (!no)
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/evpn-mh/uplink",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/evpn-mh/uplink",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_evpn_mh_uplink_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
bool uplink = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (uplink)
|
||||
vty_out(vty, " evpn mh uplink\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " no evpn mh uplink\n");
|
||||
}
|
||||
|
||||
void zebra_evpn_mh_json(json_object *json)
|
||||
{
|
||||
json_object *json_array;
|
||||
|
@ -4031,15 +3861,6 @@ int zebra_evpn_mh_redirect_off(struct vty *vty, bool redirect_off)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void zebra_evpn_interface_init(void)
|
||||
{
|
||||
install_element(INTERFACE_NODE, &zebra_evpn_es_id_cmd);
|
||||
install_element(INTERFACE_NODE, &zebra_evpn_es_sys_mac_cmd);
|
||||
install_element(INTERFACE_NODE, &zebra_evpn_es_pref_cmd);
|
||||
install_element(INTERFACE_NODE, &zebra_evpn_es_bypass_cmd);
|
||||
install_element(INTERFACE_NODE, &zebra_evpn_mh_uplink_cmd);
|
||||
}
|
||||
|
||||
void zebra_evpn_mh_init(void)
|
||||
{
|
||||
zrouter.mh_info = XCALLOC(MTYPE_ZMH_INFO, sizeof(*zrouter.mh_info));
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
#include "zebra_nhg.h"
|
||||
#include "zebra_nb.h"
|
||||
|
||||
#define EVPN_MH_VTY_STR "Multihoming\n"
|
||||
|
||||
/* Ethernet Segment entry -
|
||||
* - Local and remote ESs are maintained in a global RB tree,
|
||||
* zmh_info->es_rb_tree using ESI as key
|
||||
|
@ -337,7 +335,6 @@ extern bool zebra_evpn_es_mac_ref_entry(struct zebra_mac *mac,
|
|||
struct zebra_evpn_es *es);
|
||||
extern bool zebra_evpn_es_mac_ref(struct zebra_mac *mac, const esi_t *esi);
|
||||
extern struct zebra_evpn_es *zebra_evpn_es_find(const esi_t *esi);
|
||||
extern void zebra_evpn_interface_init(void);
|
||||
extern void zebra_evpn_acc_vl_show(struct vty *vty, bool uj);
|
||||
extern void zebra_evpn_acc_vl_show_detail(struct vty *vty, bool uj);
|
||||
extern void zebra_evpn_if_es_print(struct vty *vty, json_object *json,
|
||||
|
|
|
@ -99,7 +99,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-zebra:zebra/ptm-enable",
|
||||
.cbs = {
|
||||
.modify = zebra_ptm_enable_modify,
|
||||
.cli_show = zebra_ptm_enable_cli_write,
|
||||
}
|
||||
},
|
||||
#endif
|
||||
|
@ -107,7 +106,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-zebra:zebra/route-map-delay",
|
||||
.cbs = {
|
||||
.modify = zebra_route_map_delay_modify,
|
||||
.cli_show = zebra_route_map_delay_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -324,7 +322,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv4-addrs",
|
||||
.cbs = {
|
||||
.create = lib_interface_zebra_ipv4_addrs_create,
|
||||
.cli_show = lib_interface_zebra_ipv4_addrs_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv4_addrs_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -339,7 +336,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv4-p2p-addrs",
|
||||
.cbs = {
|
||||
.create = lib_interface_zebra_ipv4_p2p_addrs_create,
|
||||
.cli_show = lib_interface_zebra_ipv4_p2p_addrs_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv4_p2p_addrs_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -354,7 +350,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-addrs",
|
||||
.cbs = {
|
||||
.create = lib_interface_zebra_ipv6_addrs_create,
|
||||
.cli_show = lib_interface_zebra_ipv6_addrs_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv6_addrs_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -362,7 +357,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/multicast",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_multicast_modify,
|
||||
.cli_show = lib_interface_zebra_multicast_cli_write,
|
||||
.destroy = lib_interface_zebra_multicast_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -370,14 +364,12 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-detect",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_detect_modify,
|
||||
.cli_show = lib_interface_zebra_link_detect_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/enabled",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_enabled_modify,
|
||||
.cli_show = lib_interface_zebra_enabled_cli_write,
|
||||
.destroy = lib_interface_zebra_enabled_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -385,7 +377,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_bandwidth_modify,
|
||||
.cli_show = lib_interface_zebra_bandwidth_cli_write,
|
||||
.destroy = lib_interface_zebra_bandwidth_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -393,7 +384,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/mpls",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_mpls_modify,
|
||||
.cli_show = lib_interface_zebra_mpls_cli_write,
|
||||
.destroy = lib_interface_zebra_mpls_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -402,15 +392,12 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.create = lib_interface_zebra_link_params_create,
|
||||
.destroy = lib_interface_zebra_link_params_destroy,
|
||||
.cli_show = lib_interface_zebra_link_params_cli_write,
|
||||
.cli_show_end = lib_interface_zebra_link_params_cli_write_end,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/metric",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_metric_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_metric_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_metric_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -418,7 +405,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/max-bandwidth",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_max_bandwidth_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_max_bandwidth_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_max_bandwidth_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -426,7 +412,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/max-reservable-bandwidth",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_max_reservable_bandwidth_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_max_reservable_bandwidth_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_max_reservable_bandwidth_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -434,7 +419,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/unreserved-bandwidths/unreserved-bandwidth",
|
||||
.cbs = {
|
||||
.create = lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_create,
|
||||
.cli_show = lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -448,7 +432,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/residual-bandwidth",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_residual_bandwidth_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_residual_bandwidth_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_residual_bandwidth_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -456,7 +439,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/available-bandwidth",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_available_bandwidth_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_available_bandwidth_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_available_bandwidth_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -464,7 +446,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/utilized-bandwidth",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_utilized_bandwidth_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_utilized_bandwidth_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_utilized_bandwidth_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -473,13 +454,11 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.modify = lib_interface_zebra_legacy_admin_group_modify,
|
||||
.destroy = lib_interface_zebra_legacy_admin_group_destroy,
|
||||
.cli_show = cli_show_legacy_admin_group,
|
||||
},
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities",
|
||||
.cbs = {
|
||||
.cli_show = cli_show_affinity,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -493,14 +472,12 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinity-mode",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_affinity_mode_modify,
|
||||
.cli_show = cli_show_affinity_mode,
|
||||
},
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/neighbor",
|
||||
.cbs = {
|
||||
.create = lib_interface_zebra_link_params_neighbor_create,
|
||||
.cli_show = lib_interface_zebra_link_params_neighbor_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_neighbor_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -520,7 +497,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/delay",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_delay_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_delay_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_delay_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -547,7 +523,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/delay-variation",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_delay_variation_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_delay_variation_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_delay_variation_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -555,7 +530,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/packet-loss",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_link_params_packet_loss_modify,
|
||||
.cli_show = lib_interface_zebra_link_params_packet_loss_cli_write,
|
||||
.destroy = lib_interface_zebra_link_params_packet_loss_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -563,7 +537,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0/esi",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_evpn_mh_type_0_esi_modify,
|
||||
.cli_show = lib_interface_zebra_evpn_mh_type_0_esi_cli_write,
|
||||
.destroy = lib_interface_zebra_evpn_mh_type_0_esi_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -571,7 +544,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/system-mac",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_evpn_mh_type_3_system_mac_modify,
|
||||
.cli_show = lib_interface_zebra_evpn_mh_type_3_system_mac_cli_write,
|
||||
.destroy = lib_interface_zebra_evpn_mh_type_3_system_mac_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -579,7 +551,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/local-discriminator",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_evpn_mh_type_3_local_discriminator_modify,
|
||||
.cli_show = lib_interface_zebra_evpn_mh_type_3_local_discriminator_cli_write,
|
||||
.destroy = lib_interface_zebra_evpn_mh_type_3_local_discriminator_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -587,21 +558,18 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/df-preference",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_evpn_mh_df_preference_modify,
|
||||
.cli_show = lib_interface_zebra_evpn_mh_df_preference_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/bypass",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_evpn_mh_bypass_modify,
|
||||
.cli_show = lib_interface_zebra_evpn_mh_bypass_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/uplink",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_evpn_mh_uplink_modify,
|
||||
.cli_show = lib_interface_zebra_evpn_mh_uplink_cli_write,
|
||||
}
|
||||
},
|
||||
#if defined(HAVE_RTADV)
|
||||
|
@ -609,63 +577,54 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/send-advertisements",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_send_advertisements_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_send_advertisements_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/max-rtr-adv-interval",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/managed-flag",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_managed_flag_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_managed_flag_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/other-config-flag",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_other_config_flag_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_other_config_flag_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-flag",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/link-mtu",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_link_mtu_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_link_mtu_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/reachable-time",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_reachable_time_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/retrans-timer",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_retrans_timer_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/cur-hop-limit",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -673,7 +632,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-lifetime",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_default_lifetime_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_default_lifetime_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv6_router_advertisements_default_lifetime_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -681,21 +639,18 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/fast-retransmit",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/advertisement-interval-option",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -703,7 +658,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-lifetime",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -711,14 +665,12 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-router-preference",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ipv6_router_advertisements_default_router_preference_modify,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_default_router_preference_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/prefix-list/prefix",
|
||||
.cbs = {
|
||||
.create = lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_create,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -726,7 +678,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/dnssl/dnssl-domain",
|
||||
.cbs = {
|
||||
.create = lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_create,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -771,7 +722,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/rdnss/rdnss-address",
|
||||
.cbs = {
|
||||
.create = lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_create,
|
||||
.cli_show = lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_cli_write,
|
||||
.destroy = lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_destroy,
|
||||
}
|
||||
},
|
||||
|
@ -788,7 +738,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ptm-enable",
|
||||
.cbs = {
|
||||
.modify = lib_interface_zebra_ptm_enable_modify,
|
||||
.cli_show = lib_interface_zebra_ptm_enable_cli_write,
|
||||
}
|
||||
},
|
||||
#endif
|
||||
|
@ -845,7 +794,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.modify = lib_vrf_zebra_router_id_modify,
|
||||
.destroy = lib_vrf_zebra_router_id_destroy,
|
||||
.cli_show = lib_vrf_zebra_router_id_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -853,7 +801,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.modify = lib_vrf_zebra_ipv6_router_id_modify,
|
||||
.destroy = lib_vrf_zebra_ipv6_router_id_destroy,
|
||||
.cli_show = lib_vrf_zebra_ipv6_router_id_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -861,7 +808,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.create = lib_vrf_zebra_filter_protocol_create,
|
||||
.destroy = lib_vrf_zebra_filter_protocol_destroy,
|
||||
.cli_show = lib_vrf_zebra_filter_protocol_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -875,7 +821,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.create = lib_vrf_zebra_filter_nht_create,
|
||||
.destroy = lib_vrf_zebra_filter_nht_destroy,
|
||||
.cli_show = lib_vrf_zebra_filter_nht_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -889,7 +834,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.modify = lib_vrf_zebra_resolve_via_default_modify,
|
||||
.destroy = lib_vrf_zebra_resolve_via_default_destroy,
|
||||
.cli_show = lib_vrf_zebra_resolve_via_default_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -897,7 +841,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.modify = lib_vrf_zebra_ipv6_resolve_via_default_modify,
|
||||
.destroy = lib_vrf_zebra_ipv6_resolve_via_default_destroy,
|
||||
.cli_show = lib_vrf_zebra_ipv6_resolve_via_default_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -905,7 +848,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.create = lib_vrf_zebra_netns_table_range_create,
|
||||
.destroy = lib_vrf_zebra_netns_table_range_destroy,
|
||||
.cli_show = lib_vrf_zebra_netns_table_range_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1181,7 +1123,6 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||
.cbs = {
|
||||
.modify = lib_vrf_zebra_l3vni_id_modify,
|
||||
.destroy = lib_vrf_zebra_l3vni_id_destroy,
|
||||
.cli_show = lib_vrf_zebra_l3vni_id_cli_write,
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
168
zebra/zebra_nb.h
168
zebra/zebra_nb.h
|
@ -46,13 +46,8 @@ int zebra_allow_external_route_update_destroy(struct nb_cb_destroy_args *args);
|
|||
int zebra_dplane_queue_limit_modify(struct nb_cb_modify_args *args);
|
||||
#if HAVE_BFDD == 0
|
||||
int zebra_ptm_enable_modify(struct nb_cb_modify_args *args);
|
||||
void zebra_ptm_enable_cli_write(struct vty *vty, const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
#endif
|
||||
int zebra_route_map_delay_modify(struct nb_cb_modify_args *args);
|
||||
void zebra_route_map_delay_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int zebra_debugs_debug_events_modify(struct nb_cb_modify_args *args);
|
||||
int zebra_debugs_debug_events_destroy(struct nb_cb_destroy_args *args);
|
||||
int zebra_debugs_debug_zapi_send_modify(struct nb_cb_modify_args *args);
|
||||
|
@ -90,77 +85,37 @@ int zebra_debugs_debug_dplane_detail_destroy(struct nb_cb_destroy_args *args);
|
|||
int zebra_debugs_debug_mlag_modify(struct nb_cb_modify_args *args);
|
||||
int zebra_debugs_debug_mlag_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv4_addrs_create(struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_ipv4_addrs_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_ipv4_addrs_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv4_addrs_label_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv4_addrs_label_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_ipv4_addrs_label_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv4_p2p_addrs_create(struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_ipv4_p2p_addrs_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_ipv4_p2p_addrs_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv4_p2p_addrs_label_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv4_p2p_addrs_label_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv4_p2p_addrs_label_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_addrs_create(struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_ipv6_addrs_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_addrs_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_multicast_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_multicast_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_multicast_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_detect_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_detect_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_enabled_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_enabled_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_enabled_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_bandwidth_modify(struct nb_cb_modify_args *args);
|
||||
int lib_interface_zebra_bandwidth_destroy(struct nb_cb_destroy_args *args);
|
||||
void lib_interface_zebra_bandwidth_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_mpls_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_mpls_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_mpls_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_create(struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_link_params_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
void lib_interface_zebra_link_params_cli_write_end(struct vty *vty,
|
||||
const struct lyd_node *dnode);
|
||||
int lib_interface_zebra_link_params_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_metric_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_metric_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_metric_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_max_bandwidth_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_max_bandwidth_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_max_bandwidth_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_max_reservable_bandwidth_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_max_reservable_bandwidth_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_max_reservable_bandwidth_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_create(
|
||||
|
@ -175,234 +130,136 @@ void lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_
|
|||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_residual_bandwidth_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_residual_bandwidth_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_residual_bandwidth_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_available_bandwidth_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_available_bandwidth_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_available_bandwidth_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_utilized_bandwidth_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_utilized_bandwidth_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_utilized_bandwidth_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_legacy_admin_group_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_legacy_admin_group_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_legacy_admin_group_modify(struct nb_cb_modify_args *args);
|
||||
int lib_interface_zebra_legacy_admin_group_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_affinity_create(struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_link_params_affinities_affinity_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_affinity_destroy(struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_affinity_mode_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_affinity_mode_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_neighbor_create(
|
||||
struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_link_params_neighbor_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_neighbor_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_neighbor_remote_as_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_neighbor_remote_as_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_neighbor_ipv4_remote_id_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_neighbor_ipv4_remote_id_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_delay_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_delay_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_delay_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_min_max_delay_create(
|
||||
struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_link_params_min_max_delay_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_min_max_delay_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_min_max_delay_delay_min_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_min_max_delay_delay_min_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_min_max_delay_delay_max_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_min_max_delay_delay_max_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_delay_variation_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_delay_variation_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_delay_variation_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_link_params_packet_loss_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_link_params_packet_loss_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_link_params_packet_loss_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_evpn_mh_type_0_esi_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_evpn_mh_type_0_esi_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_evpn_mh_type_0_esi_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_evpn_mh_type_3_system_mac_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_evpn_mh_type_3_system_mac_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_evpn_mh_type_3_system_mac_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_evpn_mh_type_3_local_discriminator_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_evpn_mh_type_3_local_discriminator_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_evpn_mh_type_3_local_discriminator_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_evpn_mh_df_preference_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_evpn_mh_df_preference_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_evpn_mh_bypass_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_evpn_mh_bypass_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_interface_zebra_evpn_mh_uplink_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_evpn_mh_uplink_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
#if defined(HAVE_RTADV)
|
||||
int lib_interface_zebra_ipv6_router_advertisements_send_advertisements_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_send_advertisements_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_managed_flag_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_managed_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_other_config_flag_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_other_config_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_link_mtu_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_link_mtu_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_reachable_time_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_retrans_timer_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_default_lifetime_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_default_router_preference_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_default_router_preference_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_create(
|
||||
struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_valid_lifetime_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_valid_lifetime_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_on_link_flag_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_on_link_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_preferred_lifetime_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_preferred_lifetime_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_autonomous_flag_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_autonomous_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_router_address_flag_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_router_address_flag_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_create(
|
||||
struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_create(
|
||||
struct nb_cb_create_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
#endif /* defined(HAVE_RTADV) */
|
||||
#if HAVE_BFDD == 0
|
||||
int lib_interface_zebra_ptm_enable_modify(struct nb_cb_modify_args *args);
|
||||
void lib_interface_zebra_ptm_enable_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
#endif
|
||||
struct yang_data *
|
||||
lib_interface_zebra_state_up_count_get_elem(struct nb_cb_get_elem_args *args);
|
||||
|
@ -422,42 +279,22 @@ struct yang_data *lib_interface_zebra_state_mcast_group_get_elem(
|
|||
struct nb_cb_get_elem_args *args);
|
||||
int lib_vrf_zebra_router_id_modify(struct nb_cb_modify_args *args);
|
||||
int lib_vrf_zebra_router_id_destroy(struct nb_cb_destroy_args *args);
|
||||
void lib_vrf_zebra_router_id_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_vrf_zebra_ipv6_router_id_modify(struct nb_cb_modify_args *args);
|
||||
int lib_vrf_zebra_ipv6_router_id_destroy(struct nb_cb_destroy_args *args);
|
||||
void lib_vrf_zebra_ipv6_router_id_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_vrf_zebra_filter_protocol_create(struct nb_cb_create_args *args);
|
||||
int lib_vrf_zebra_filter_protocol_destroy(struct nb_cb_destroy_args *args);
|
||||
void lib_vrf_zebra_filter_protocol_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_vrf_zebra_filter_protocol_route_map_modify(
|
||||
struct nb_cb_modify_args *args);
|
||||
int lib_vrf_zebra_filter_nht_create(struct nb_cb_create_args *args);
|
||||
int lib_vrf_zebra_filter_nht_destroy(struct nb_cb_destroy_args *args);
|
||||
void lib_vrf_zebra_filter_nht_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_vrf_zebra_filter_nht_route_map_modify(struct nb_cb_modify_args *args);
|
||||
int lib_vrf_zebra_resolve_via_default_modify(struct nb_cb_modify_args *args);
|
||||
int lib_vrf_zebra_resolve_via_default_destroy(struct nb_cb_destroy_args *args);
|
||||
void lib_vrf_zebra_resolve_via_default_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_vrf_zebra_ipv6_resolve_via_default_modify(struct nb_cb_modify_args *args);
|
||||
int lib_vrf_zebra_ipv6_resolve_via_default_destroy(
|
||||
struct nb_cb_destroy_args *args);
|
||||
void lib_vrf_zebra_ipv6_resolve_via_default_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
|
||||
int lib_vrf_zebra_netns_table_range_create(struct nb_cb_create_args *args);
|
||||
int lib_vrf_zebra_netns_table_range_destroy(struct nb_cb_destroy_args *args);
|
||||
void lib_vrf_zebra_netns_table_range_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_vrf_zebra_netns_table_range_start_modify(struct nb_cb_modify_args *args);
|
||||
int lib_vrf_zebra_netns_table_range_end_modify(struct nb_cb_modify_args *args);
|
||||
const void *lib_vrf_zebra_ribs_rib_get_next(struct nb_cb_get_next_args *args);
|
||||
|
@ -633,9 +470,6 @@ lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_weight_get_elem(
|
|||
struct nb_cb_get_elem_args *args);
|
||||
int lib_vrf_zebra_l3vni_id_modify(struct nb_cb_modify_args *args);
|
||||
int lib_vrf_zebra_l3vni_id_destroy(struct nb_cb_destroy_args *args);
|
||||
void lib_vrf_zebra_l3vni_id_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults);
|
||||
int lib_vrf_zebra_prefix_only_modify(struct nb_cb_modify_args *args);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#include "vrf.h"
|
||||
#include "vty.h"
|
||||
#include "lib_errors.h"
|
||||
#include "northbound_cli.h"
|
||||
|
||||
#include "zebra/debug.h"
|
||||
#include "zebra/interface.h"
|
||||
|
@ -29,7 +28,6 @@
|
|||
#include "zebra/zebra_ptm_redistribute.h"
|
||||
#include "zebra/zebra_router.h"
|
||||
#include "zebra_vrf.h"
|
||||
#include "zebra_nb.h"
|
||||
|
||||
/*
|
||||
* Choose the BFD implementation that we'll use.
|
||||
|
@ -88,7 +86,6 @@ struct zebra_ptm_cb ptm_cb;
|
|||
|
||||
static int zebra_ptm_socket_init(void);
|
||||
void zebra_ptm_sock_read(struct event *thread);
|
||||
static void zebra_ptm_install_commands(void);
|
||||
static int zebra_ptm_handle_msg_cb(void *arg, void *in_ctxt);
|
||||
void zebra_bfd_peer_replay_req(void);
|
||||
void zebra_ptm_send_status_req(void);
|
||||
|
@ -117,7 +114,6 @@ void zebra_ptm_init(void)
|
|||
}
|
||||
|
||||
ptm_cb.pid = getpid();
|
||||
zebra_ptm_install_commands();
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s", FRR_PTM_NAME);
|
||||
ptm_hdl = ptm_lib_register(buf, NULL, zebra_ptm_handle_msg_cb,
|
||||
|
@ -273,38 +269,6 @@ void zebra_global_ptm_disable(void)
|
|||
zebra_ptm_reset_status(1);
|
||||
}
|
||||
|
||||
DEFUN_YANG (zebra_ptm_enable,
|
||||
zebra_ptm_enable_cmd,
|
||||
"ptm-enable",
|
||||
"Enable neighbor check with specified topology\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "/frr-zebra:zebra/ptm-enable", NB_OP_MODIFY,
|
||||
"true");
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFUN_YANG (no_zebra_ptm_enable,
|
||||
no_zebra_ptm_enable_cmd,
|
||||
"no ptm-enable",
|
||||
NO_STR
|
||||
"Enable neighbor check with specified topology\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "/frr-zebra:zebra/ptm-enable", NB_OP_MODIFY,
|
||||
"false");
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void zebra_ptm_enable_cli_write(struct vty *vty, const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
bool enable = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (enable)
|
||||
vty_out(vty, "ptm-enable\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, "no ptm-enable\n");
|
||||
}
|
||||
|
||||
void zebra_if_ptm_enable(struct interface *ifp)
|
||||
{
|
||||
struct zebra_if *if_data;
|
||||
|
@ -356,49 +320,6 @@ void zebra_if_ptm_disable(struct interface *ifp)
|
|||
if_data->ptm_enable = ZEBRA_IF_PTM_ENABLE_OFF;
|
||||
}
|
||||
|
||||
DEFUN_YANG (zebra_ptm_enable_if,
|
||||
zebra_ptm_enable_if_cmd,
|
||||
"ptm-enable",
|
||||
"Enable neighbor check with specified topology\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ptm-enable", NB_OP_MODIFY,
|
||||
"true");
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFUN_YANG (no_zebra_ptm_enable_if,
|
||||
no_zebra_ptm_enable_if_cmd,
|
||||
"no ptm-enable",
|
||||
NO_STR
|
||||
"Enable neighbor check with specified topology\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ptm-enable", NB_OP_MODIFY,
|
||||
"false");
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_interface_zebra_ptm_enable_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
bool enable = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (!enable)
|
||||
vty_out(vty, " no ptm-enable\n");
|
||||
else if (show_defaults)
|
||||
vty_out(vty, " ptm-enable\n");
|
||||
}
|
||||
|
||||
void zebra_ptm_write(struct vty *vty)
|
||||
{
|
||||
struct lyd_node *dnode;
|
||||
|
||||
dnode = yang_dnode_get(running_config->dnode,
|
||||
"/frr-zebra:zebra/ptm-enable");
|
||||
if (dnode)
|
||||
nb_cli_show_dnode_cmds(vty, dnode, false);
|
||||
}
|
||||
|
||||
static int zebra_ptm_socket_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
@ -439,14 +360,6 @@ static int zebra_ptm_socket_init(void)
|
|||
return sock;
|
||||
}
|
||||
|
||||
static void zebra_ptm_install_commands(void)
|
||||
{
|
||||
install_element(CONFIG_NODE, &zebra_ptm_enable_cmd);
|
||||
install_element(CONFIG_NODE, &no_zebra_ptm_enable_cmd);
|
||||
install_element(INTERFACE_NODE, &zebra_ptm_enable_if_cmd);
|
||||
install_element(INTERFACE_NODE, &no_zebra_ptm_enable_if_cmd);
|
||||
}
|
||||
|
||||
/* BFD session goes down, send message to the protocols. */
|
||||
static void if_bfd_session_update(struct interface *ifp, struct prefix *dp,
|
||||
struct prefix *sp, int status,
|
||||
|
@ -1572,11 +1485,6 @@ void zebra_ptm_show_status(struct vty *vty __attribute__((__unused__)),
|
|||
/* NOTHING */
|
||||
}
|
||||
|
||||
void zebra_ptm_write(struct vty *vty __attribute__((__unused__)))
|
||||
{
|
||||
/* NOTHING */
|
||||
}
|
||||
|
||||
void zebra_ptm_if_set_ptm_state(struct interface *i __attribute__((__unused__)),
|
||||
struct zebra_if *zi __attribute__((__unused__)))
|
||||
{
|
||||
|
|
|
@ -58,7 +58,6 @@ struct zebra_ptm_cb {
|
|||
void zebra_ptm_init(void);
|
||||
void zebra_ptm_finish(void);
|
||||
void zebra_ptm_connect(struct event *t);
|
||||
void zebra_ptm_write(struct vty *vty);
|
||||
int zebra_ptm_get_enable_state(void);
|
||||
|
||||
#if HAVE_BFDD == 0
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include "filter.h"
|
||||
#include "plist.h"
|
||||
#include "nexthop.h"
|
||||
#include "northbound_cli.h"
|
||||
#include "lib/route_types.h"
|
||||
#include "vrf.h"
|
||||
#include "frrstr.h"
|
||||
|
@ -25,7 +24,6 @@
|
|||
#include "zebra/zebra_rnh.h"
|
||||
#include "zebra/zebra_routemap.h"
|
||||
#include "zebra/zebra_vrf.h"
|
||||
#include "zebra/zebra_nb.h"
|
||||
|
||||
#include "zebra/zebra_routemap_clippy.c"
|
||||
|
||||
|
@ -389,342 +387,7 @@ int ip_nht_rm_del(struct zebra_vrf *zvrf, const char *rmap, int rtype, int afi)
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
match_ip_address_prefix_len, match_ip_address_prefix_len_cmd,
|
||||
"match ip address prefix-len (0-32)$length",
|
||||
MATCH_STR
|
||||
IP_STR
|
||||
"Match prefix length of IP address\n"
|
||||
"Match prefix length of IP address\n"
|
||||
"Prefix length\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:ipv4-prefix-length']";
|
||||
char xpath_value[XPATH_MAXLEN];
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
|
||||
snprintf(
|
||||
xpath_value, sizeof(xpath_value),
|
||||
"%s/rmap-match-condition/frr-zebra-route-map:ipv4-prefix-length",
|
||||
xpath);
|
||||
nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
no_match_ip_address_prefix_len, no_match_ip_address_prefix_len_cmd,
|
||||
"no match ip address prefix-len [(0-32)]",
|
||||
NO_STR
|
||||
MATCH_STR
|
||||
IP_STR
|
||||
"Match prefix length of IP address\n"
|
||||
"Match prefix length of IP address\n"
|
||||
"Prefix length\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:ipv4-prefix-length']";
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
match_ipv6_address_prefix_len, match_ipv6_address_prefix_len_cmd,
|
||||
"match ipv6 address prefix-len (0-128)$length",
|
||||
MATCH_STR
|
||||
IPV6_STR
|
||||
"Match prefix length of IPv6 address\n"
|
||||
"Match prefix length of IPv6 address\n"
|
||||
"Prefix length\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:ipv6-prefix-length']";
|
||||
char xpath_value[XPATH_MAXLEN];
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
|
||||
snprintf(
|
||||
xpath_value, sizeof(xpath_value),
|
||||
"%s/rmap-match-condition/frr-zebra-route-map:ipv6-prefix-length",
|
||||
xpath);
|
||||
nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
no_match_ipv6_address_prefix_len, no_match_ipv6_address_prefix_len_cmd,
|
||||
"no match ipv6 address prefix-len [(0-128)]",
|
||||
NO_STR
|
||||
MATCH_STR
|
||||
IPV6_STR
|
||||
"Match prefix length of IPv6 address\n"
|
||||
"Match prefix length of IPv6 address\n"
|
||||
"Prefix length\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:ipv6-prefix-length']";
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
match_ip_nexthop_prefix_len, match_ip_nexthop_prefix_len_cmd,
|
||||
"match ip next-hop prefix-len (0-32)$length",
|
||||
MATCH_STR
|
||||
IP_STR
|
||||
"Match prefixlen of nexthop IP address\n"
|
||||
"Match prefixlen of given nexthop\n"
|
||||
"Prefix length\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:ipv4-next-hop-prefix-length']";
|
||||
char xpath_value[XPATH_MAXLEN];
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
|
||||
snprintf(
|
||||
xpath_value, sizeof(xpath_value),
|
||||
"%s/rmap-match-condition/frr-zebra-route-map:ipv4-prefix-length",
|
||||
xpath);
|
||||
nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
no_match_ip_nexthop_prefix_len, no_match_ip_nexthop_prefix_len_cmd,
|
||||
"no match ip next-hop prefix-len [(0-32)]",
|
||||
NO_STR
|
||||
MATCH_STR
|
||||
IP_STR
|
||||
"Match prefixlen of nexthop IP address\n"
|
||||
"Match prefix length of nexthop\n"
|
||||
"Prefix length\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:ipv4-next-hop-prefix-length']";
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
match_source_protocol, match_source_protocol_cmd,
|
||||
"match source-protocol " FRR_REDIST_STR_ZEBRA "$proto",
|
||||
MATCH_STR
|
||||
"Match protocol via which the route was learnt\n"
|
||||
FRR_REDIST_HELP_STR_ZEBRA)
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:source-protocol']";
|
||||
char xpath_value[XPATH_MAXLEN];
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
|
||||
snprintf(xpath_value, sizeof(xpath_value),
|
||||
"%s/rmap-match-condition/frr-zebra-route-map:source-protocol",
|
||||
xpath);
|
||||
nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, proto);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
no_match_source_protocol, no_match_source_protocol_cmd,
|
||||
"no match source-protocol [" FRR_REDIST_STR_ZEBRA "]",
|
||||
NO_STR
|
||||
MATCH_STR
|
||||
"Match protocol via which the route was learnt\n"
|
||||
FRR_REDIST_HELP_STR_ZEBRA)
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:source-protocol']";
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
match_source_instance, match_source_instance_cmd,
|
||||
"match source-instance (0-255)$instance",
|
||||
MATCH_STR
|
||||
"Match the protocol's instance number\n"
|
||||
"The instance number\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:source-instance']";
|
||||
char xpath_value[XPATH_MAXLEN];
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
|
||||
snprintf(xpath_value, sizeof(xpath_value),
|
||||
"%s/rmap-match-condition/frr-zebra-route-map:source-instance",
|
||||
xpath);
|
||||
nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, instance_str);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
no_match_source_instance, no_match_source_instance_cmd,
|
||||
"no match source-instance [(0-255)]",
|
||||
NO_STR MATCH_STR
|
||||
"Match the protocol's instance number\n"
|
||||
"The instance number\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./match-condition[condition='frr-zebra-route-map:source-instance']";
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
/* set functions */
|
||||
|
||||
DEFPY_YANG(
|
||||
set_src, set_src_cmd,
|
||||
"set src <A.B.C.D$addrv4|X:X::X:X$addrv6>",
|
||||
SET_STR
|
||||
"src address for route\n"
|
||||
"IPv4 src address\n"
|
||||
"IPv6 src address\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./set-action[action='frr-zebra-route-map:src-address']";
|
||||
char xpath_value[XPATH_MAXLEN];
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
|
||||
if (addrv4_str) {
|
||||
snprintf(
|
||||
xpath_value, sizeof(xpath_value),
|
||||
"%s/rmap-set-action/frr-zebra-route-map:ipv4-src-address",
|
||||
xpath);
|
||||
nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY,
|
||||
addrv4_str);
|
||||
} else {
|
||||
snprintf(
|
||||
xpath_value, sizeof(xpath_value),
|
||||
"%s/rmap-set-action/frr-zebra-route-map:ipv6-src-address",
|
||||
xpath);
|
||||
nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY,
|
||||
addrv6_str);
|
||||
}
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG(
|
||||
no_set_src, no_set_src_cmd,
|
||||
"no set src [<A.B.C.D|X:X::X:X>]",
|
||||
NO_STR
|
||||
SET_STR
|
||||
"Source address for route\n"
|
||||
"IPv4 address\n"
|
||||
"IPv6 address\n")
|
||||
{
|
||||
const char *xpath =
|
||||
"./set-action[action='frr-zebra-route-map:src-address']";
|
||||
|
||||
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG (zebra_route_map_timer,
|
||||
zebra_route_map_timer_cmd,
|
||||
"zebra route-map delay-timer (0-600)$delay",
|
||||
ZEBRA_STR
|
||||
"Set route-map parameters\n"
|
||||
"Time to wait before route-map updates are processed\n"
|
||||
"0 means route-map changes are run immediately instead of delaying\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "/frr-zebra:zebra/route-map-delay",
|
||||
NB_OP_MODIFY, delay_str);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG (no_zebra_route_map_timer,
|
||||
no_zebra_route_map_timer_cmd,
|
||||
"no zebra route-map delay-timer [(0-600)]",
|
||||
NO_STR
|
||||
ZEBRA_STR
|
||||
"Set route-map parameters\n"
|
||||
"Reset delay-timer to default value, 30 secs\n"
|
||||
"0 means route-map changes are run immediately instead of delaying\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "/frr-zebra:zebra/route-map-delay",
|
||||
NB_OP_DESTROY, NULL);
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void zebra_route_map_delay_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
uint32_t delay = yang_dnode_get_uint32(dnode, NULL);
|
||||
|
||||
vty_out(vty, "zebra route-map delay-timer %u\n", delay);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ip_protocol,
|
||||
ip_protocol_cmd,
|
||||
"ip protocol " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
|
||||
" $proto route-map ROUTE-MAP$rmap",
|
||||
IP_STR
|
||||
"Filter routing info exchanged between zebra and protocol\n"
|
||||
FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Specify route-map\n"
|
||||
"Route map name\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
|
||||
nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
|
||||
VRF_DEFAULT_NAME,
|
||||
yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST),
|
||||
proto);
|
||||
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
|
||||
yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST), proto);
|
||||
}
|
||||
|
||||
DEFPY_YANG (no_ip_protocol,
|
||||
no_ip_protocol_cmd,
|
||||
"no ip protocol " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
|
||||
" $proto [route-map ROUTE-MAP$rmap]",
|
||||
NO_STR
|
||||
IP_STR
|
||||
"Stop filtering routing info between zebra and protocol\n"
|
||||
FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Specify route-map\n"
|
||||
"Route map name\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
|
||||
VRF_DEFAULT_NAME,
|
||||
yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST),
|
||||
proto);
|
||||
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
|
||||
yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST), proto);
|
||||
}
|
||||
|
||||
DEFPY_YANG (show_ip_protocol,
|
||||
DEFPY (show_ip_protocol,
|
||||
show_ip_protocol_cmd,
|
||||
"show ip protocol [vrf <NAME$vrf_name|all$vrf_all>]",
|
||||
SHOW_STR
|
||||
|
@ -737,61 +400,7 @@ DEFPY_YANG (show_ip_protocol,
|
|||
return ret;
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_protocol,
|
||||
ipv6_protocol_cmd,
|
||||
"ipv6 protocol " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
|
||||
" $proto route-map ROUTE-MAP$rmap",
|
||||
IP6_STR
|
||||
"Filter IPv6 routing info exchanged between zebra and protocol\n"
|
||||
FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Specify route-map\n"
|
||||
"Route map name\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
|
||||
nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
|
||||
VRF_DEFAULT_NAME,
|
||||
yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST),
|
||||
proto);
|
||||
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
|
||||
yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST), proto);
|
||||
}
|
||||
|
||||
DEFPY_YANG (no_ipv6_protocol,
|
||||
no_ipv6_protocol_cmd,
|
||||
"no ipv6 protocol " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
|
||||
" $proto [route-map ROUTE-MAP$rmap]",
|
||||
NO_STR
|
||||
IP6_STR
|
||||
"Stop filtering IPv6 routing info between zebra and protocol\n"
|
||||
FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Specify route-map\n"
|
||||
"Route map name\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
|
||||
VRF_DEFAULT_NAME,
|
||||
yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST),
|
||||
proto);
|
||||
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
|
||||
yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST), proto);
|
||||
}
|
||||
|
||||
DEFPY_YANG (show_ipv6_protocol,
|
||||
DEFPY (show_ipv6_protocol,
|
||||
show_ipv6_protocol_cmd,
|
||||
"show ipv6 protocol [vrf <NAME$vrf_name|all$vrf_all>]",
|
||||
SHOW_STR
|
||||
|
@ -804,84 +413,7 @@ DEFPY_YANG (show_ipv6_protocol,
|
|||
return ret;
|
||||
}
|
||||
|
||||
void lib_vrf_zebra_filter_protocol_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
const char *afi_safi = yang_dnode_get_string(dnode, "afi-safi");
|
||||
const char *proto = yang_dnode_get_string(dnode, "protocol");
|
||||
const char *rmap = yang_dnode_get_string(dnode, "route-map");
|
||||
afi_t afi;
|
||||
safi_t safi;
|
||||
|
||||
yang_afi_safi_identity2value(afi_safi, &afi, &safi);
|
||||
|
||||
if (safi != SAFI_UNICAST)
|
||||
return;
|
||||
|
||||
zebra_vrf_indent_cli_write(vty, dnode);
|
||||
|
||||
if (afi == AFI_IP)
|
||||
vty_out(vty, "ip protocol %s route-map %s\n", proto, rmap);
|
||||
else
|
||||
vty_out(vty, "ipv6 protocol %s route-map %s\n", proto, rmap);
|
||||
}
|
||||
|
||||
DEFPY_YANG (ip_protocol_nht_rmap,
|
||||
ip_protocol_nht_rmap_cmd,
|
||||
"ip nht " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
|
||||
" $proto route-map ROUTE-MAP$rmap",
|
||||
IP_STR
|
||||
"Filter Next Hop tracking route resolution\n"
|
||||
FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Specify route map\n"
|
||||
"Route map name\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
|
||||
nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
|
||||
VRF_DEFAULT_NAME,
|
||||
yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST),
|
||||
proto);
|
||||
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
|
||||
yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST), proto);
|
||||
}
|
||||
|
||||
DEFPY_YANG (no_ip_protocol_nht_rmap,
|
||||
no_ip_protocol_nht_rmap_cmd,
|
||||
"no ip nht " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
|
||||
" $proto [route-map ROUTE-MAP$rmap]",
|
||||
NO_STR
|
||||
IP_STR
|
||||
"Filter Next Hop tracking route resolution\n"
|
||||
FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Specify route map\n"
|
||||
"Route map name\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
|
||||
VRF_DEFAULT_NAME,
|
||||
yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST),
|
||||
proto);
|
||||
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
|
||||
yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST), proto);
|
||||
}
|
||||
|
||||
DEFPY_YANG (show_ip_protocol_nht,
|
||||
DEFPY (show_ip_protocol_nht,
|
||||
show_ip_protocol_nht_cmd,
|
||||
"show ip nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]",
|
||||
SHOW_STR
|
||||
|
@ -900,61 +432,7 @@ DEFPY_YANG (show_ip_protocol_nht,
|
|||
return ret;
|
||||
}
|
||||
|
||||
DEFPY_YANG (ipv6_protocol_nht_rmap,
|
||||
ipv6_protocol_nht_rmap_cmd,
|
||||
"ipv6 nht " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
|
||||
" $proto route-map ROUTE-MAP$rmap",
|
||||
IP6_STR
|
||||
"Filter Next Hop tracking route resolution\n"
|
||||
FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Specify route map\n"
|
||||
"Route map name\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
|
||||
nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
|
||||
VRF_DEFAULT_NAME,
|
||||
yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST),
|
||||
proto);
|
||||
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
|
||||
yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST), proto);
|
||||
}
|
||||
|
||||
DEFPY_YANG (no_ipv6_protocol_nht_rmap,
|
||||
no_ipv6_protocol_nht_rmap_cmd,
|
||||
"no ipv6 nht " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
|
||||
" $proto [route-map ROUTE-MAP$rmap]",
|
||||
NO_STR
|
||||
IP6_STR
|
||||
"Filter Next Hop tracking route resolution\n"
|
||||
FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Specify route map\n"
|
||||
"Route map name\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
|
||||
VRF_DEFAULT_NAME,
|
||||
yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST),
|
||||
proto);
|
||||
|
||||
return nb_cli_apply_changes(
|
||||
vty,
|
||||
"./frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
|
||||
yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST), proto);
|
||||
}
|
||||
|
||||
DEFPY_YANG (show_ipv6_protocol_nht,
|
||||
DEFPY (show_ipv6_protocol_nht,
|
||||
show_ipv6_protocol_nht_cmd,
|
||||
"show ipv6 nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]",
|
||||
SHOW_STR
|
||||
|
@ -973,29 +451,6 @@ DEFPY_YANG (show_ipv6_protocol_nht,
|
|||
return ret;
|
||||
}
|
||||
|
||||
void lib_vrf_zebra_filter_nht_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
const char *afi_safi = yang_dnode_get_string(dnode, "afi-safi");
|
||||
const char *proto = yang_dnode_get_string(dnode, "protocol");
|
||||
const char *rmap = yang_dnode_get_string(dnode, "route-map");
|
||||
afi_t afi;
|
||||
safi_t safi;
|
||||
|
||||
yang_afi_safi_identity2value(afi_safi, &afi, &safi);
|
||||
|
||||
if (safi != SAFI_UNICAST)
|
||||
return;
|
||||
|
||||
zebra_vrf_indent_cli_write(vty, dnode);
|
||||
|
||||
if (afi == AFI_IP)
|
||||
vty_out(vty, "ip nht %s route-map %s\n", proto, rmap);
|
||||
else
|
||||
vty_out(vty, "ipv6 nht %s route-map %s\n", proto, rmap);
|
||||
}
|
||||
|
||||
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
|
||||
|
||||
/* `match ip next-hop IP_ACCESS_LIST' */
|
||||
|
@ -1897,30 +1352,12 @@ void zebra_routemap_vrf_delete(struct zebra_vrf *zvrf)
|
|||
|
||||
void zebra_route_map_init(void)
|
||||
{
|
||||
install_element(CONFIG_NODE, &ip_protocol_cmd);
|
||||
install_element(CONFIG_NODE, &no_ip_protocol_cmd);
|
||||
install_element(VRF_NODE, &ip_protocol_cmd);
|
||||
install_element(VRF_NODE, &no_ip_protocol_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_protocol_cmd);
|
||||
install_element(CONFIG_NODE, &ipv6_protocol_cmd);
|
||||
install_element(CONFIG_NODE, &no_ipv6_protocol_cmd);
|
||||
install_element(VRF_NODE, &ipv6_protocol_cmd);
|
||||
install_element(VRF_NODE, &no_ipv6_protocol_cmd);
|
||||
install_element(VIEW_NODE, &show_ipv6_protocol_cmd);
|
||||
install_element(CONFIG_NODE, &ip_protocol_nht_rmap_cmd);
|
||||
install_element(CONFIG_NODE, &no_ip_protocol_nht_rmap_cmd);
|
||||
install_element(VRF_NODE, &ip_protocol_nht_rmap_cmd);
|
||||
install_element(VRF_NODE, &no_ip_protocol_nht_rmap_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_protocol_nht_cmd);
|
||||
install_element(CONFIG_NODE, &ipv6_protocol_nht_rmap_cmd);
|
||||
install_element(CONFIG_NODE, &no_ipv6_protocol_nht_rmap_cmd);
|
||||
install_element(VRF_NODE, &ipv6_protocol_nht_rmap_cmd);
|
||||
install_element(VRF_NODE, &no_ipv6_protocol_nht_rmap_cmd);
|
||||
install_element(VIEW_NODE, &show_ipv6_protocol_nht_cmd);
|
||||
install_element(CONFIG_NODE, &zebra_route_map_timer_cmd);
|
||||
install_element(CONFIG_NODE, &no_zebra_route_map_timer_cmd);
|
||||
|
||||
route_map_init();
|
||||
route_map_init_new(true);
|
||||
|
||||
route_map_add_hook(zebra_route_map_add);
|
||||
route_map_delete_hook(zebra_route_map_delete);
|
||||
|
@ -1974,19 +1411,4 @@ void zebra_route_map_init(void)
|
|||
|
||||
/* */
|
||||
route_map_install_set(&route_set_src_cmd);
|
||||
/* */
|
||||
install_element(RMAP_NODE, &match_ip_nexthop_prefix_len_cmd);
|
||||
install_element(RMAP_NODE, &no_match_ip_nexthop_prefix_len_cmd);
|
||||
install_element(RMAP_NODE, &match_ip_address_prefix_len_cmd);
|
||||
install_element(RMAP_NODE, &match_ipv6_address_prefix_len_cmd);
|
||||
install_element(RMAP_NODE, &no_match_ipv6_address_prefix_len_cmd);
|
||||
install_element(RMAP_NODE, &no_match_ip_address_prefix_len_cmd);
|
||||
install_element(RMAP_NODE, &match_source_protocol_cmd);
|
||||
install_element(RMAP_NODE, &no_match_source_protocol_cmd);
|
||||
install_element(RMAP_NODE, &match_source_instance_cmd);
|
||||
install_element(RMAP_NODE, &no_match_source_instance_cmd);
|
||||
|
||||
/* */
|
||||
install_element(RMAP_NODE, &set_src_cmd);
|
||||
install_element(RMAP_NODE, &no_set_src_cmd);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include "srcdest_table.h"
|
||||
#include "vrf.h"
|
||||
#include "vty.h"
|
||||
#include "northbound_cli.h"
|
||||
|
||||
#include "zebra/zebra_router.h"
|
||||
#include "zebra/rtadv.h"
|
||||
|
@ -34,7 +33,6 @@
|
|||
#include "zebra/zebra_routemap.h"
|
||||
#include "zebra/zebra_vrf_clippy.c"
|
||||
#include "zebra/table_manager.h"
|
||||
#include "zebra/zebra_nb.h"
|
||||
|
||||
static void zebra_vrf_table_create(struct zebra_vrf *zvrf, afi_t afi,
|
||||
safi_t safi);
|
||||
|
@ -452,53 +450,6 @@ struct route_table *zebra_vrf_table(afi_t afi, safi_t safi, vrf_id_t vrf_id)
|
|||
return zvrf->table[afi][safi];
|
||||
}
|
||||
|
||||
void zebra_vrf_indent_cli_write(struct vty *vty, const struct lyd_node *dnode)
|
||||
{
|
||||
const struct lyd_node *vrf = yang_dnode_get_parent(dnode, "vrf");
|
||||
|
||||
if (vrf && strcmp(yang_dnode_get_string(vrf, "name"), VRF_DEFAULT_NAME))
|
||||
vty_out(vty, " ");
|
||||
}
|
||||
|
||||
static int vrf_config_write_single(const struct lyd_node *dnode, void *arg)
|
||||
{
|
||||
nb_cli_show_dnode_cmds(arg, dnode, false);
|
||||
|
||||
return YANG_ITER_CONTINUE;
|
||||
}
|
||||
|
||||
static int vrf_config_write(struct vty *vty)
|
||||
{
|
||||
const struct lyd_node *dnode;
|
||||
|
||||
yang_dnode_iterate(vrf_config_write_single, vty, running_config->dnode,
|
||||
"/frr-vrf:lib/vrf");
|
||||
dnode = yang_dnode_get(running_config->dnode, "/frr-zebra:zebra");
|
||||
if (dnode)
|
||||
nb_cli_show_dnode_cmds(vty, dnode, false);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
DEFPY (vrf_netns,
|
||||
vrf_netns_cmd,
|
||||
"netns NAME$netns_name",
|
||||
"Attach VRF to a Namespace\n"
|
||||
"The file name in " NS_RUN_DIR ", or a full pathname\n")
|
||||
{
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (no_vrf_netns,
|
||||
no_vrf_netns_cmd,
|
||||
"no netns [NAME]",
|
||||
NO_STR
|
||||
"Detach VRF from a Namespace\n"
|
||||
"The file name in " NS_RUN_DIR ", or a full pathname\n")
|
||||
{
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
/* if ns_id is different and not VRF_UNKNOWN,
|
||||
* then update vrf identifier, and enable VRF
|
||||
*/
|
||||
|
@ -597,12 +548,4 @@ void zebra_vrf_init(void)
|
|||
zebra_vrf_delete);
|
||||
|
||||
hook_register(zserv_client_close, release_daemon_table_chunks);
|
||||
|
||||
vrf_cmd_init(vrf_config_write);
|
||||
|
||||
if (vrf_is_backend_netns() && ns_have_netns()) {
|
||||
/* Install NS commands. */
|
||||
install_element(VRF_NODE, &vrf_netns_cmd);
|
||||
install_element(VRF_NODE, &no_vrf_netns_cmd);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -260,9 +260,6 @@ extern void zebra_vrf_init(void);
|
|||
extern void zebra_rtable_node_cleanup(struct route_table *table,
|
||||
struct route_node *node);
|
||||
|
||||
extern void zebra_vrf_indent_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1164,23 +1164,6 @@ DEFPY (show_ip_nht,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (ip_nht_default_route,
|
||||
ip_nht_default_route_cmd,
|
||||
"ip nht resolve-via-default",
|
||||
IP_STR
|
||||
"Filter Next Hop tracking route resolution\n"
|
||||
"Resolve via default route\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/resolve-via-default",
|
||||
NB_OP_MODIFY, "true");
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
static void show_nexthop_group_out(struct vty *vty, struct nhg_hash_entry *nhe,
|
||||
json_object *json_nhe_hdr)
|
||||
{
|
||||
|
@ -1679,88 +1662,6 @@ DEFPY_HIDDEN(backup_nexthop_recursive_use_enable,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (no_ip_nht_default_route,
|
||||
no_ip_nht_default_route_cmd,
|
||||
"no ip nht resolve-via-default",
|
||||
NO_STR
|
||||
IP_STR
|
||||
"Filter Next Hop tracking route resolution\n"
|
||||
"Resolve via default route\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/resolve-via-default",
|
||||
NB_OP_MODIFY, "false");
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_vrf_zebra_resolve_via_default_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
bool resolve_via_default = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (resolve_via_default != SAVE_ZEBRA_IP_NHT_RESOLVE_VIA_DEFAULT ||
|
||||
show_defaults) {
|
||||
zebra_vrf_indent_cli_write(vty, dnode);
|
||||
|
||||
vty_out(vty, "%sip nht resolve-via-default\n",
|
||||
resolve_via_default ? "" : "no ");
|
||||
}
|
||||
}
|
||||
|
||||
DEFUN (ipv6_nht_default_route,
|
||||
ipv6_nht_default_route_cmd,
|
||||
"ipv6 nht resolve-via-default",
|
||||
IP6_STR
|
||||
"Filter Next Hop tracking route resolution\n"
|
||||
"Resolve via default route\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-resolve-via-default",
|
||||
NB_OP_MODIFY, "true");
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFUN (no_ipv6_nht_default_route,
|
||||
no_ipv6_nht_default_route_cmd,
|
||||
"no ipv6 nht resolve-via-default",
|
||||
NO_STR
|
||||
IP6_STR
|
||||
"Filter Next Hop tracking route resolution\n"
|
||||
"Resolve via default route\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-resolve-via-default",
|
||||
NB_OP_MODIFY, "false");
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_vrf_zebra_ipv6_resolve_via_default_cli_write(
|
||||
struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
|
||||
{
|
||||
bool resolve_via_default = yang_dnode_get_bool(dnode, NULL);
|
||||
|
||||
if (resolve_via_default != SAVE_ZEBRA_IP_NHT_RESOLVE_VIA_DEFAULT ||
|
||||
show_defaults) {
|
||||
zebra_vrf_indent_cli_write(vty, dnode);
|
||||
|
||||
vty_out(vty, "%sipv6 nht resolve-via-default\n",
|
||||
resolve_via_default ? "" : "no ");
|
||||
}
|
||||
}
|
||||
|
||||
DEFPY_HIDDEN(rnh_hide_backups, rnh_hide_backups_cmd,
|
||||
"[no] ip nht hide-backup-events",
|
||||
NO_STR
|
||||
|
@ -2744,69 +2645,6 @@ DEFPY(evpn_mh_redirect_off, evpn_mh_redirect_off_cmd,
|
|||
return zebra_evpn_mh_redirect_off(vty, redirect_off);
|
||||
}
|
||||
|
||||
DEFPY_YANG (vni_mapping,
|
||||
vni_mapping_cmd,
|
||||
"vni " CMD_VNI_RANGE "[prefix-routes-only$filter]",
|
||||
"VNI corresponding to tenant VRF\n"
|
||||
"VNI-ID\n"
|
||||
"prefix-routes-only\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", NB_OP_MODIFY,
|
||||
vni_str);
|
||||
|
||||
if (filter)
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only",
|
||||
NB_OP_MODIFY, "true");
|
||||
else
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only",
|
||||
NB_OP_DESTROY, NULL);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
DEFPY_YANG (no_vni_mapping,
|
||||
no_vni_mapping_cmd,
|
||||
"no vni [" CMD_VNI_RANGE "[prefix-routes-only$filter]]",
|
||||
NO_STR
|
||||
"VNI corresponding to tenant VRF\n"
|
||||
"VNI-ID\n"
|
||||
"prefix-routes-only\n")
|
||||
{
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", NB_OP_DESTROY,
|
||||
NULL);
|
||||
|
||||
if (filter)
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only",
|
||||
NB_OP_DESTROY, NULL);
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_vrf_zebra_l3vni_id_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
vni_t vni = yang_dnode_get_uint32(dnode, NULL);
|
||||
bool prefix_only = yang_dnode_get_bool(dnode, "../prefix-only");
|
||||
|
||||
zebra_vrf_indent_cli_write(vty, dnode);
|
||||
|
||||
vty_out(vty, "vni %u", vni);
|
||||
|
||||
if (prefix_only)
|
||||
vty_out(vty, " prefix-routes-only");
|
||||
|
||||
vty_out(vty, "\n");
|
||||
}
|
||||
|
||||
/* show vrf */
|
||||
DEFPY (show_vrf_vni,
|
||||
show_vrf_vni_cmd,
|
||||
|
@ -3911,8 +3749,6 @@ DEFPY (zebra_nexthop_group_keep,
|
|||
|
||||
static int config_write_protocol(struct vty *vty)
|
||||
{
|
||||
zebra_ptm_write(vty);
|
||||
|
||||
if (zrouter.allow_delete)
|
||||
vty_out(vty, "allow-external-route-update\n");
|
||||
|
||||
|
@ -4440,47 +4276,6 @@ DEFPY (no_zebra_protodown_bit,
|
|||
|
||||
#endif /* HAVE_NETLINK */
|
||||
|
||||
DEFPY_YANG (ip_table_range, ip_table_range_cmd,
|
||||
"[no] ip table range ![(1-4294967295)$start (1-4294967295)$end]",
|
||||
NO_STR IP_STR
|
||||
"table configuration\n"
|
||||
"Configure table range\n"
|
||||
"Start Routing Table\n"
|
||||
"End Routing Table\n")
|
||||
{
|
||||
if (!no) {
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/netns/table-range",
|
||||
NB_OP_CREATE, NULL);
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/netns/table-range/start",
|
||||
NB_OP_MODIFY, start_str);
|
||||
nb_cli_enqueue_change(vty,
|
||||
"./frr-zebra:zebra/netns/table-range/end",
|
||||
NB_OP_MODIFY, end_str);
|
||||
} else {
|
||||
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/netns/table-range",
|
||||
NB_OP_DESTROY, NULL);
|
||||
}
|
||||
|
||||
if (vty->node == CONFIG_NODE)
|
||||
return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
|
||||
VRF_DEFAULT_NAME);
|
||||
|
||||
return nb_cli_apply_changes(vty, NULL);
|
||||
}
|
||||
|
||||
void lib_vrf_zebra_netns_table_range_cli_write(struct vty *vty,
|
||||
const struct lyd_node *dnode,
|
||||
bool show_defaults)
|
||||
{
|
||||
uint32_t start = yang_dnode_get_uint32(dnode, "start");
|
||||
uint32_t end = yang_dnode_get_uint32(dnode, "end");
|
||||
|
||||
zebra_vrf_indent_cli_write(vty, dnode);
|
||||
|
||||
vty_out(vty, "ip table range %u %u\n", start, end);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SCRIPTING
|
||||
|
||||
DEFUN(zebra_on_rib_process_script, zebra_on_rib_process_script_cmd,
|
||||
|
@ -4592,14 +4387,6 @@ void zebra_vty_init(void)
|
|||
install_element(VIEW_NODE, &show_ip_rpf_addr_cmd);
|
||||
install_element(VIEW_NODE, &show_ipv6_rpf_addr_cmd);
|
||||
|
||||
install_element(CONFIG_NODE, &ip_nht_default_route_cmd);
|
||||
install_element(CONFIG_NODE, &no_ip_nht_default_route_cmd);
|
||||
install_element(CONFIG_NODE, &ipv6_nht_default_route_cmd);
|
||||
install_element(CONFIG_NODE, &no_ipv6_nht_default_route_cmd);
|
||||
install_element(VRF_NODE, &ip_nht_default_route_cmd);
|
||||
install_element(VRF_NODE, &no_ip_nht_default_route_cmd);
|
||||
install_element(VRF_NODE, &ipv6_nht_default_route_cmd);
|
||||
install_element(VRF_NODE, &no_ipv6_nht_default_route_cmd);
|
||||
install_element(CONFIG_NODE, &rnh_hide_backups_cmd);
|
||||
|
||||
install_element(VIEW_NODE, &show_frr_cmd);
|
||||
|
@ -4651,19 +4438,12 @@ void zebra_vty_init(void)
|
|||
install_element(CONFIG_NODE, &evpn_mh_neigh_holdtime_cmd);
|
||||
install_element(CONFIG_NODE, &evpn_mh_startup_delay_cmd);
|
||||
install_element(CONFIG_NODE, &evpn_mh_redirect_off_cmd);
|
||||
install_element(CONFIG_NODE, &vni_mapping_cmd);
|
||||
install_element(CONFIG_NODE, &no_vni_mapping_cmd);
|
||||
install_element(VRF_NODE, &vni_mapping_cmd);
|
||||
install_element(VRF_NODE, &no_vni_mapping_cmd);
|
||||
|
||||
install_element(VIEW_NODE, &show_dataplane_cmd);
|
||||
install_element(VIEW_NODE, &show_dataplane_providers_cmd);
|
||||
install_element(CONFIG_NODE, &zebra_dplane_queue_limit_cmd);
|
||||
install_element(CONFIG_NODE, &no_zebra_dplane_queue_limit_cmd);
|
||||
|
||||
install_element(CONFIG_NODE, &ip_table_range_cmd);
|
||||
install_element(VRF_NODE, &ip_table_range_cmd);
|
||||
|
||||
#ifdef HAVE_NETLINK
|
||||
install_element(CONFIG_NODE, &zebra_kernel_netlink_batch_tx_buf_cmd);
|
||||
install_element(CONFIG_NODE, &no_zebra_kernel_netlink_batch_tx_buf_cmd);
|
||||
|
|
Loading…
Reference in a new issue