zebra: convert to mgmtd

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
Igor Ryzhov 2024-01-24 23:04:23 +02:00
parent 42d6b864cd
commit 3900813298
28 changed files with 3012 additions and 3285 deletions

View file

@ -291,6 +291,10 @@ struct cmd_node {
#define DEFPY_YANG(funcname, cmdname, cmdstr, helpstr) \ #define DEFPY_YANG(funcname, cmdname, cmdstr, helpstr) \
DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_YANG) 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) \ #define DEFPY_YANG_NOSH(funcname, cmdname, cmdstr, helpstr) \
DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, \ DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, \
CMD_ATTR_YANG | CMD_ATTR_NOSH) CMD_ATTR_YANG | CMD_ATTR_NOSH)
@ -315,6 +319,10 @@ struct cmd_node {
#define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr) \ #define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr) \
DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_NOSH) 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) \ #define DEFUN_YANG_NOSH(funcname, cmdname, cmdstr, helpstr) \
DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, \ DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, \
CMD_ATTR_YANG | CMD_ATTR_NOSH) CMD_ATTR_YANG | CMD_ATTR_NOSH)

View file

@ -140,6 +140,7 @@ SPECIAL [(),]
"DEFPY_ATTR" value = strdup(yytext); return DEFUNNY; "DEFPY_ATTR" value = strdup(yytext); return DEFUNNY;
"DEFPY_HIDDEN" value = strdup(yytext); return DEFUNNY; "DEFPY_HIDDEN" value = strdup(yytext); return DEFUNNY;
"DEFPY_YANG" 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; "DEFPY_YANG_NOSH" value = strdup(yytext); return DEFUNNY;
"ALIAS" value = strdup(yytext); return DEFUNNY; "ALIAS" value = strdup(yytext); return DEFUNNY;
"ALIAS_HIDDEN" value = strdup(yytext); return DEFUNNY; "ALIAS_HIDDEN" value = strdup(yytext); return DEFUNNY;

View file

@ -126,6 +126,7 @@ bool vty_log_commands;
static bool vty_log_commands_perm; static bool vty_log_commands_perm;
char const *const mgmt_daemons[] = { char const *const mgmt_daemons[] = {
"zebra",
#ifdef HAVE_RIPD #ifdef HAVE_RIPD
"ripd", "ripd",
#endif #endif
@ -2264,19 +2265,6 @@ bool mgmt_vty_read_configs(void)
snprintf(path, sizeof(path), "%s/mgmtd.conf", frr_sysconfdir); snprintf(path, sizeof(path), "%s/mgmtd.conf", frr_sysconfdir);
confp = vty_open_config(path, config_default); 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) { if (confp) {
zlog_info("mgmtd: reading config file: %s", path); zlog_info("mgmtd: reading config file: %s", path);

View file

@ -65,6 +65,23 @@ struct mgmt_be_xpath_map {
* above map as well. * 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 #if HAVE_RIPD
static const char *const ripd_config_xpaths[] = { static const char *const ripd_config_xpaths[] = {
"/frr-filter:lib", "/frr-filter:lib",
@ -105,6 +122,7 @@ static const char *const staticd_config_xpaths[] = {
#endif #endif
static const char *const *be_client_config_xpaths[MGMTD_BE_CLIENT_ID_MAX] = { static const char *const *be_client_config_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
[MGMTD_BE_CLIENT_ID_ZEBRA] = zebra_config_xpaths,
#ifdef HAVE_RIPD #ifdef HAVE_RIPD
[MGMTD_BE_CLIENT_ID_RIPD] = ripd_config_xpaths, [MGMTD_BE_CLIENT_ID_RIPD] = ripd_config_xpaths,
#endif #endif
@ -116,13 +134,6 @@ static const char *const *be_client_config_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
#endif #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] = { static const char *const *be_client_oper_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
#ifdef HAVE_RIPD #ifdef HAVE_RIPD
[MGMTD_BE_CLIENT_ID_RIPD] = ripd_oper_xpaths, [MGMTD_BE_CLIENT_ID_RIPD] = ripd_oper_xpaths,

View file

@ -18,6 +18,7 @@
#include "ripngd/ripng_nb.h" #include "ripngd/ripng_nb.h"
#include "routing_nb.h" #include "routing_nb.h"
#include "affinitymap.h" #include "affinitymap.h"
#include "zebra/zebra_cli.h"
/* mgmt options, we use GNU getopt library. */ /* mgmt options, we use GNU getopt library. */
static const struct option longopts[] = { 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; extern const struct frr_yang_module_info frr_staticd_cli_info;
#endif #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 * 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 * clients into mgmtd. The modules are used by libyang in order to support
* parsing binary data returns from the backend. * 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 = { const struct frr_yang_module_info zebra_route_map_info = {
.name = "frr-zebra-route-map", .name = "frr-zebra-route-map",
.ignore_cfg_cbs = true, .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. * YANG module info used by backend clients get added here.
*/ */
&zebra_info, &frr_zebra_cli_info,
&zebra_route_map_info, &zebra_route_map_info,
#ifdef HAVE_RIPD #ifdef HAVE_RIPD

View file

@ -26,6 +26,7 @@
#include "ripd/rip_nb.h" #include "ripd/rip_nb.h"
#include "ripngd/ripng_nb.h" #include "ripngd/ripng_nb.h"
#include "staticd/static_vty.h" #include "staticd/static_vty.h"
#include "zebra/zebra_cli.h"
extern struct frr_daemon_info *mgmt_daemon_info; 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 * backend components that are moved to new MGMTD infra
* here one by one. * here one by one.
*/ */
zebra_cli_init();
#if HAVE_RIPD #if HAVE_RIPD
rip_cli_init(); rip_cli_init();
#endif #endif

View file

@ -16,6 +16,7 @@ clippy_scan += \
lib_LTLIBRARIES += mgmtd/libmgmt_be_nb.la lib_LTLIBRARIES += mgmtd/libmgmt_be_nb.la
mgmtd_libmgmt_be_nb_la_SOURCES = \ mgmtd_libmgmt_be_nb_la_SOURCES = \
zebra/zebra_cli.c \
# end # end
nodist_mgmtd_libmgmt_be_nb_la_SOURCES = \ nodist_mgmtd_libmgmt_be_nb_la_SOURCES = \
lib/affinitymap_cli.c \ lib/affinitymap_cli.c \
@ -44,6 +45,7 @@ noinst_HEADERS += \
mgmtd/mgmt_history.h \ mgmtd/mgmt_history.h \
mgmtd/mgmt_memory.h \ mgmtd/mgmt_memory.h \
mgmtd/mgmt_txn.h \ mgmtd/mgmt_txn.h \
zebra/zebra_cli.h \
# end # end
sbin_PROGRAMS += mgmtd/mgmtd sbin_PROGRAMS += mgmtd/mgmtd
@ -52,6 +54,7 @@ mgmtd_mgmtd_SOURCES = \
mgmtd/mgmt_main.c \ mgmtd/mgmt_main.c \
# end # end
nodist_mgmtd_mgmtd_SOURCES = \ nodist_mgmtd_mgmtd_SOURCES = \
yang/frr-zebra.yang.c \
# nothing # nothing
mgmtd_mgmtd_CFLAGS = $(AM_CFLAGS) -I ./ mgmtd_mgmtd_CFLAGS = $(AM_CFLAGS) -I ./
mgmtd_mgmtd_LDADD = mgmtd/libmgmtd.a lib/libfrr.la $(LIBCAP) $(LIBM) $(LIBYANG_LIBS) $(UST_LIBS) mgmtd_mgmtd_LDADD = mgmtd/libmgmtd.a lib/libfrr.la $(LIBCAP) $(LIBM) $(LIBYANG_LIBS) $(UST_LIBS)

View file

@ -3,7 +3,15 @@
"interface": [ "interface": [
{ {
"name": "r1-eth0", "name": "r1-eth0",
"description": "r1-eth0-desc" "description": "r1-eth0-desc",
"frr-zebra:zebra": {
"ipv4-addrs": [
{
"ip": "1.1.1.1",
"prefix-length": 24
}
]
}
} }
] ]
} }

View file

@ -14,6 +14,12 @@
"phy-address": "rubout" "phy-address": "rubout"
}, },
"frr-zebra:zebra": { "frr-zebra:zebra": {
"ipv4-addrs": [
{
"ip": "1.1.1.1",
"prefix-length": 24
}
],
"state": { "state": {
"up-count": 0, "up-count": 0,
"down-count": 0 "down-count": 0

View file

@ -3007,14 +3007,14 @@ DEFUN (vtysh_show_work_queues_daemon,
return show_one_daemon(vty, argv, argc - 1, argv[argc - 1]->text); 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) LINK_PARAMS_STR)
{ {
vty->node = LINK_PARAMS_NODE; vty->node = LINK_PARAMS_NODE;
return CMD_SUCCESS; return CMD_SUCCESS;
} }
DEFUNSH_HIDDEN(VTYSH_ZEBRA, no_link_params_enable, no_link_params_enable_cmd, DEFUNSH_HIDDEN(VTYSH_MGMTD, no_link_params_enable, no_link_params_enable_cmd,
"no enable", NO_STR "Disable link parameters on this interface\n") "no enable", NO_STR "Disable link parameters on this interface\n")
{ {
if (vty->node == LINK_PARAMS_NODE) if (vty->node == LINK_PARAMS_NODE)
@ -3022,7 +3022,7 @@ DEFUNSH_HIDDEN(VTYSH_ZEBRA, no_link_params_enable, no_link_params_enable_cmd,
return CMD_SUCCESS; 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") "Exit from Link Params configuration node\n")
{ {
if (vty->node == LINK_PARAMS_NODE) 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; 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") "Exit current mode and down to previous mode\n")
{ {
if (vty->node == LINK_PARAMS_NODE) 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; 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") "Exit current mode and down to previous mode\n")
{ {
return vtysh_exit_link_params(self, vty, argc, argv); return vtysh_exit_link_params(self, vty, argc, argv);

View file

@ -53,23 +53,23 @@ extern struct event_loop *master;
VTYSH_BFDD | VTYSH_BABELD | VTYSH_BGPD | VTYSH_EIGRPD | VTYSH_ISISD | \ VTYSH_BFDD | VTYSH_BABELD | VTYSH_BGPD | VTYSH_EIGRPD | VTYSH_ISISD | \
VTYSH_FABRICD | VTYSH_LDPD | VTYSH_NHRPD | VTYSH_OSPF6D | \ VTYSH_FABRICD | VTYSH_LDPD | VTYSH_NHRPD | VTYSH_OSPF6D | \
VTYSH_OSPFD | VTYSH_PBRD | VTYSH_PIMD | VTYSH_PIM6D | \ VTYSH_OSPFD | VTYSH_PBRD | VTYSH_PIMD | VTYSH_PIM6D | \
VTYSH_VRRPD | VTYSH_ZEBRA | VTYSH_MGMTD VTYSH_VRRPD | VTYSH_MGMTD
#define VTYSH_ACL_SHOW \ #define VTYSH_ACL_SHOW \
VTYSH_BFDD | VTYSH_BABELD | VTYSH_BGPD | VTYSH_EIGRPD | VTYSH_ISISD | \ VTYSH_BFDD | VTYSH_BABELD | VTYSH_BGPD | VTYSH_EIGRPD | VTYSH_ISISD | \
VTYSH_FABRICD | VTYSH_LDPD | VTYSH_NHRPD | VTYSH_OSPF6D | \ VTYSH_FABRICD | VTYSH_LDPD | VTYSH_NHRPD | VTYSH_OSPF6D | \
VTYSH_OSPFD | VTYSH_PBRD | VTYSH_PIMD | VTYSH_PIM6D | \ VTYSH_OSPFD | VTYSH_PBRD | VTYSH_PIMD | VTYSH_PIM6D | \
VTYSH_RIPD | VTYSH_RIPNGD | VTYSH_VRRPD | VTYSH_ZEBRA 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 \ #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 VTYSH_PIMD | VTYSH_EIGRPD | VTYSH_FABRICD | VTYSH_MGMTD
#define VTYSH_RMAP_SHOW \ #define VTYSH_RMAP_SHOW \
VTYSH_ZEBRA | VTYSH_RIPD | VTYSH_RIPNGD | VTYSH_OSPFD | VTYSH_OSPF6D | \ VTYSH_ZEBRA | VTYSH_RIPD | VTYSH_RIPNGD | VTYSH_OSPFD | VTYSH_OSPF6D | \
VTYSH_BGPD | VTYSH_ISISD | VTYSH_PIMD | VTYSH_EIGRPD | \ VTYSH_BGPD | VTYSH_ISISD | VTYSH_PIMD | VTYSH_EIGRPD | \
VTYSH_FABRICD VTYSH_FABRICD
#define VTYSH_INTERFACE_SUBSET \ #define VTYSH_INTERFACE_SUBSET \
VTYSH_ZEBRA | VTYSH_OSPFD | VTYSH_OSPF6D | \ VTYSH_OSPFD | VTYSH_OSPF6D | \
VTYSH_ISISD | VTYSH_PIMD | VTYSH_PIM6D | VTYSH_NHRPD | \ VTYSH_ISISD | VTYSH_PIMD | VTYSH_PIM6D | VTYSH_NHRPD | \
VTYSH_EIGRPD | VTYSH_BABELD | VTYSH_PBRD | VTYSH_FABRICD | \ VTYSH_EIGRPD | VTYSH_BABELD | VTYSH_PBRD | VTYSH_FABRICD | \
VTYSH_VRRPD | VTYSH_MGMTD VTYSH_VRRPD | VTYSH_MGMTD

File diff suppressed because it is too large Load diff

View file

@ -442,7 +442,7 @@ int main(int argc, char **argv)
zebra_vty_init(); zebra_vty_init();
mgmt_be_client = mgmt_be_client_create("zebra", NULL, 0, mgmt_be_client = mgmt_be_client_create("zebra", NULL, 0,
zrouter.master); zrouter.master);
access_list_init(); access_list_init_new(true);
prefix_list_init(); prefix_list_init();
rtadv_init(); rtadv_init();

View file

@ -23,16 +23,12 @@
#include "table.h" #include "table.h"
#include "rib.h" #include "rib.h"
#include "vrf.h" #include "vrf.h"
#include "northbound_cli.h"
#include "zebra/zebra_router.h" #include "zebra/zebra_router.h"
#include "zebra/zapi_msg.h" #include "zebra/zapi_msg.h"
#include "zebra/zebra_vrf.h" #include "zebra/zebra_vrf.h"
#include "zebra/router-id.h" #include "zebra/router-id.h"
#include "zebra/redistribute.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, static struct connected *router_id_find_node(struct list *l,
struct connected *ifc) 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)); 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, DEFUN (show_ip_router_id,
show_ip_router_id_cmd, show_ip_router_id_cmd,
"show [ip|ipv6] router-id [vrf NAME]", "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) 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); install_element(VIEW_NODE, &show_ip_router_id_cmd);
} }

View file

@ -21,7 +21,6 @@
#include "vrf.h" #include "vrf.h"
#include "ns.h" #include "ns.h"
#include "lib_errors.h" #include "lib_errors.h"
#include "northbound_cli.h"
#include "zebra/interface.h" #include "zebra/interface.h"
#include "zebra/rtadv.h" #include "zebra/rtadv.h"
@ -31,7 +30,6 @@
#include "zebra/zebra_vrf.h" #include "zebra/zebra_vrf.h"
#include "zebra/zebra_errors.h" #include "zebra/zebra_errors.h"
#include "zebra/zebra_router.h" #include "zebra/zebra_router.h"
#include "zebra/zebra_nb.h"
extern struct zebra_privs_t zserv_privs; 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; 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) static struct rtadv_rdnss *rtadv_rdnss_new(void)
{ {
return XCALLOC(MTYPE_RTADV_RDNSS, sizeof(struct rtadv_rdnss)); 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; 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. */ /* Dump interface ND information to vty. */
static int nd_dump_vty(struct vty *vty, struct interface *ifp) 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); hook_register(zebra_if_extra_info, nd_dump_vty);
install_element(VIEW_NODE, &show_ipv6_nd_ra_if_cmd); 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) static int if_join_all_router(int sock, struct interface *ifp)

View file

@ -118,7 +118,6 @@ clippy_scan += \
zebra/debug.c \ zebra/debug.c \
zebra/interface.c \ zebra/interface.c \
zebra/rtadv.c \ zebra/rtadv.c \
zebra/zebra_evpn_mh.c \
zebra/zebra_mlag_vty.c \ zebra/zebra_mlag_vty.c \
zebra/zebra_routemap.c \ zebra/zebra_routemap.c \
zebra/zebra_vty.c \ zebra/zebra_vty.c \
@ -126,7 +125,7 @@ clippy_scan += \
zebra/zebra_vrf.c \ zebra/zebra_vrf.c \
zebra/dpdk/zebra_dplane_dpdk_vty.c \ zebra/dpdk/zebra_dplane_dpdk_vty.c \
zebra/label_manager.c \ zebra/label_manager.c \
zebra/router-id.c \ zebra/zebra_cli.c \
# end # end
noinst_HEADERS += \ noinst_HEADERS += \

2934
zebra/zebra_cli.c Normal file

File diff suppressed because it is too large Load diff

10
zebra/zebra_cli.h Normal file
View 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

View file

@ -20,7 +20,6 @@
#include "table.h" #include "table.h"
#include "vlan.h" #include "vlan.h"
#include "vxlan.h" #include "vxlan.h"
#include "northbound_cli.h"
#include "zebra/zebra_router.h" #include "zebra/zebra_router.h"
#include "zebra/debug.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; 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) void zebra_evpn_mh_json(json_object *json)
{ {
json_object *json_array; json_object *json_array;
@ -4031,15 +3861,6 @@ int zebra_evpn_mh_redirect_off(struct vty *vty, bool redirect_off)
return 0; 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) void zebra_evpn_mh_init(void)
{ {
zrouter.mh_info = XCALLOC(MTYPE_ZMH_INFO, sizeof(*zrouter.mh_info)); zrouter.mh_info = XCALLOC(MTYPE_ZMH_INFO, sizeof(*zrouter.mh_info));

View file

@ -19,8 +19,6 @@
#include "zebra_nhg.h" #include "zebra_nhg.h"
#include "zebra_nb.h" #include "zebra_nb.h"
#define EVPN_MH_VTY_STR "Multihoming\n"
/* Ethernet Segment entry - /* Ethernet Segment entry -
* - Local and remote ESs are maintained in a global RB tree, * - Local and remote ESs are maintained in a global RB tree,
* zmh_info->es_rb_tree using ESI as key * 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); struct zebra_evpn_es *es);
extern bool zebra_evpn_es_mac_ref(struct zebra_mac *mac, const esi_t *esi); 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 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(struct vty *vty, bool uj);
extern void zebra_evpn_acc_vl_show_detail(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, extern void zebra_evpn_if_es_print(struct vty *vty, json_object *json,

View file

@ -99,7 +99,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-zebra:zebra/ptm-enable", .xpath = "/frr-zebra:zebra/ptm-enable",
.cbs = { .cbs = {
.modify = zebra_ptm_enable_modify, .modify = zebra_ptm_enable_modify,
.cli_show = zebra_ptm_enable_cli_write,
} }
}, },
#endif #endif
@ -107,7 +106,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-zebra:zebra/route-map-delay", .xpath = "/frr-zebra:zebra/route-map-delay",
.cbs = { .cbs = {
.modify = zebra_route_map_delay_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv4-addrs",
.cbs = { .cbs = {
.create = lib_interface_zebra_ipv4_addrs_create, .create = lib_interface_zebra_ipv4_addrs_create,
.cli_show = lib_interface_zebra_ipv4_addrs_cli_write,
.destroy = lib_interface_zebra_ipv4_addrs_destroy, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv4-p2p-addrs",
.cbs = { .cbs = {
.create = lib_interface_zebra_ipv4_p2p_addrs_create, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-addrs",
.cbs = { .cbs = {
.create = lib_interface_zebra_ipv6_addrs_create, .create = lib_interface_zebra_ipv6_addrs_create,
.cli_show = lib_interface_zebra_ipv6_addrs_cli_write,
.destroy = lib_interface_zebra_ipv6_addrs_destroy, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/multicast",
.cbs = { .cbs = {
.modify = lib_interface_zebra_multicast_modify, .modify = lib_interface_zebra_multicast_modify,
.cli_show = lib_interface_zebra_multicast_cli_write,
.destroy = lib_interface_zebra_multicast_destroy, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-detect",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_detect_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/enabled",
.cbs = { .cbs = {
.modify = lib_interface_zebra_enabled_modify, .modify = lib_interface_zebra_enabled_modify,
.cli_show = lib_interface_zebra_enabled_cli_write,
.destroy = lib_interface_zebra_enabled_destroy, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
.cbs = { .cbs = {
.modify = lib_interface_zebra_bandwidth_modify, .modify = lib_interface_zebra_bandwidth_modify,
.cli_show = lib_interface_zebra_bandwidth_cli_write,
.destroy = lib_interface_zebra_bandwidth_destroy, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/mpls",
.cbs = { .cbs = {
.modify = lib_interface_zebra_mpls_modify, .modify = lib_interface_zebra_mpls_modify,
.cli_show = lib_interface_zebra_mpls_cli_write,
.destroy = lib_interface_zebra_mpls_destroy, .destroy = lib_interface_zebra_mpls_destroy,
} }
}, },
@ -402,15 +392,12 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = { .cbs = {
.create = lib_interface_zebra_link_params_create, .create = lib_interface_zebra_link_params_create,
.destroy = lib_interface_zebra_link_params_destroy, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/metric",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_metric_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/max-bandwidth",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_max_bandwidth_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/max-reservable-bandwidth",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_max_reservable_bandwidth_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/unreserved-bandwidths/unreserved-bandwidth",
.cbs = { .cbs = {
.create = lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_create, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/residual-bandwidth",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_residual_bandwidth_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/available-bandwidth",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_available_bandwidth_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/utilized-bandwidth",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_utilized_bandwidth_modify, .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, .destroy = lib_interface_zebra_link_params_utilized_bandwidth_destroy,
} }
}, },
@ -473,13 +454,11 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = { .cbs = {
.modify = lib_interface_zebra_legacy_admin_group_modify, .modify = lib_interface_zebra_legacy_admin_group_modify,
.destroy = lib_interface_zebra_legacy_admin_group_destroy, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities",
.cbs = { .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinity-mode",
.cbs = { .cbs = {
.modify = lib_interface_zebra_affinity_mode_modify, .modify = lib_interface_zebra_affinity_mode_modify,
.cli_show = cli_show_affinity_mode,
}, },
}, },
{ {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/neighbor", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/neighbor",
.cbs = { .cbs = {
.create = lib_interface_zebra_link_params_neighbor_create, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/delay",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_delay_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/delay-variation",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_delay_variation_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/packet-loss",
.cbs = { .cbs = {
.modify = lib_interface_zebra_link_params_packet_loss_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0/esi",
.cbs = { .cbs = {
.modify = lib_interface_zebra_evpn_mh_type_0_esi_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/system-mac",
.cbs = { .cbs = {
.modify = lib_interface_zebra_evpn_mh_type_3_system_mac_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/local-discriminator",
.cbs = { .cbs = {
.modify = lib_interface_zebra_evpn_mh_type_3_local_discriminator_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/df-preference",
.cbs = { .cbs = {
.modify = lib_interface_zebra_evpn_mh_df_preference_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/bypass",
.cbs = { .cbs = {
.modify = lib_interface_zebra_evpn_mh_bypass_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/uplink",
.cbs = { .cbs = {
.modify = lib_interface_zebra_evpn_mh_uplink_modify, .modify = lib_interface_zebra_evpn_mh_uplink_modify,
.cli_show = lib_interface_zebra_evpn_mh_uplink_cli_write,
} }
}, },
#if defined(HAVE_RTADV) #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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/send-advertisements",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_send_advertisements_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/max-rtr-adv-interval",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/managed-flag",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_managed_flag_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/other-config-flag",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_other_config_flag_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-flag",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/link-mtu",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_link_mtu_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/reachable-time",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/retrans-timer",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/cur-hop-limit",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-lifetime",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_default_lifetime_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/fast-retransmit",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/advertisement-interval-option",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-lifetime",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_modify, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-router-preference",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_default_router_preference_modify, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/prefix-list/prefix",
.cbs = { .cbs = {
.create = lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_create, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/dnssl/dnssl-domain",
.cbs = { .cbs = {
.create = lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_create, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/rdnss/rdnss-address",
.cbs = { .cbs = {
.create = lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_create, .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, .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", .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ptm-enable",
.cbs = { .cbs = {
.modify = lib_interface_zebra_ptm_enable_modify, .modify = lib_interface_zebra_ptm_enable_modify,
.cli_show = lib_interface_zebra_ptm_enable_cli_write,
} }
}, },
#endif #endif
@ -845,7 +794,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = { .cbs = {
.modify = lib_vrf_zebra_router_id_modify, .modify = lib_vrf_zebra_router_id_modify,
.destroy = lib_vrf_zebra_router_id_destroy, .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 = { .cbs = {
.modify = lib_vrf_zebra_ipv6_router_id_modify, .modify = lib_vrf_zebra_ipv6_router_id_modify,
.destroy = lib_vrf_zebra_ipv6_router_id_destroy, .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 = { .cbs = {
.create = lib_vrf_zebra_filter_protocol_create, .create = lib_vrf_zebra_filter_protocol_create,
.destroy = lib_vrf_zebra_filter_protocol_destroy, .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 = { .cbs = {
.create = lib_vrf_zebra_filter_nht_create, .create = lib_vrf_zebra_filter_nht_create,
.destroy = lib_vrf_zebra_filter_nht_destroy, .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 = { .cbs = {
.modify = lib_vrf_zebra_resolve_via_default_modify, .modify = lib_vrf_zebra_resolve_via_default_modify,
.destroy = lib_vrf_zebra_resolve_via_default_destroy, .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 = { .cbs = {
.modify = lib_vrf_zebra_ipv6_resolve_via_default_modify, .modify = lib_vrf_zebra_ipv6_resolve_via_default_modify,
.destroy = lib_vrf_zebra_ipv6_resolve_via_default_destroy, .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 = { .cbs = {
.create = lib_vrf_zebra_netns_table_range_create, .create = lib_vrf_zebra_netns_table_range_create,
.destroy = lib_vrf_zebra_netns_table_range_destroy, .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 = { .cbs = {
.modify = lib_vrf_zebra_l3vni_id_modify, .modify = lib_vrf_zebra_l3vni_id_modify,
.destroy = lib_vrf_zebra_l3vni_id_destroy, .destroy = lib_vrf_zebra_l3vni_id_destroy,
.cli_show = lib_vrf_zebra_l3vni_id_cli_write,
} }
}, },
{ {

View file

@ -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); int zebra_dplane_queue_limit_modify(struct nb_cb_modify_args *args);
#if HAVE_BFDD == 0 #if HAVE_BFDD == 0
int zebra_ptm_enable_modify(struct nb_cb_modify_args *args); 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 #endif
int zebra_route_map_delay_modify(struct nb_cb_modify_args *args); 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_modify(struct nb_cb_modify_args *args);
int zebra_debugs_debug_events_destroy(struct nb_cb_destroy_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); 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_modify(struct nb_cb_modify_args *args);
int zebra_debugs_debug_mlag_destroy(struct nb_cb_destroy_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); 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_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv4_addrs_label_modify(struct nb_cb_modify_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_addrs_label_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv4_p2p_addrs_create(struct nb_cb_create_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_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv4_p2p_addrs_label_modify( int lib_interface_zebra_ipv4_p2p_addrs_label_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv4_p2p_addrs_label_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_addrs_create(struct nb_cb_create_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_ipv6_addrs_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_multicast_modify(struct nb_cb_modify_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_multicast_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_detect_modify(struct nb_cb_modify_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); 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_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_modify(struct nb_cb_modify_args *args);
int lib_interface_zebra_bandwidth_destroy(struct nb_cb_destroy_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); 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_mpls_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_create(struct nb_cb_create_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_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_metric_modify(struct nb_cb_modify_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( int lib_interface_zebra_link_params_metric_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_max_bandwidth_modify( int lib_interface_zebra_link_params_max_bandwidth_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_max_bandwidth_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_max_reservable_bandwidth_modify( int lib_interface_zebra_link_params_max_reservable_bandwidth_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_max_reservable_bandwidth_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_create( 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); struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_residual_bandwidth_modify( int lib_interface_zebra_link_params_residual_bandwidth_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_residual_bandwidth_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_available_bandwidth_modify( int lib_interface_zebra_link_params_available_bandwidth_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_available_bandwidth_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_utilized_bandwidth_modify( int lib_interface_zebra_link_params_utilized_bandwidth_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_utilized_bandwidth_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_legacy_admin_group_modify( int lib_interface_zebra_legacy_admin_group_modify(struct nb_cb_modify_args *args);
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_destroy( int lib_interface_zebra_legacy_admin_group_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_affinity_create(struct nb_cb_create_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_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_affinity_mode_modify(struct nb_cb_modify_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( int lib_interface_zebra_link_params_neighbor_create(
struct nb_cb_create_args *args); 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( int lib_interface_zebra_link_params_neighbor_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_neighbor_remote_as_modify( int lib_interface_zebra_link_params_neighbor_remote_as_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_neighbor_ipv4_remote_id_modify(
struct nb_cb_modify_args *args); 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); 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( int lib_interface_zebra_link_params_delay_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_min_max_delay_create( int lib_interface_zebra_link_params_min_max_delay_create(
struct nb_cb_create_args *args); 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( int lib_interface_zebra_link_params_min_max_delay_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_min_max_delay_delay_min_modify( int lib_interface_zebra_link_params_min_max_delay_delay_min_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_min_max_delay_delay_max_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_delay_variation_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_delay_variation_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_packet_loss_modify( int lib_interface_zebra_link_params_packet_loss_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_link_params_packet_loss_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_evpn_mh_type_0_esi_modify(struct nb_cb_modify_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( int lib_interface_zebra_evpn_mh_type_0_esi_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_evpn_mh_type_3_system_mac_modify( int lib_interface_zebra_evpn_mh_type_3_system_mac_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_evpn_mh_type_3_system_mac_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_evpn_mh_type_3_local_discriminator_modify( int lib_interface_zebra_evpn_mh_type_3_local_discriminator_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_evpn_mh_type_3_local_discriminator_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_evpn_mh_df_preference_modify( int lib_interface_zebra_evpn_mh_df_preference_modify(
struct nb_cb_modify_args *args); 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); 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); 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) #if defined(HAVE_RTADV)
int lib_interface_zebra_ipv6_router_advertisements_send_advertisements_modify( int lib_interface_zebra_ipv6_router_advertisements_send_advertisements_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_managed_flag_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_other_config_flag_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_link_mtu_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_modify( int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_modify( int lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_modify( int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_default_router_preference_modify( int lib_interface_zebra_ipv6_router_advertisements_default_router_preference_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_create(
struct nb_cb_create_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_valid_lifetime_modify( int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_valid_lifetime_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_on_link_flag_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_preferred_lifetime_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_autonomous_flag_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_router_address_flag_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_create(
struct nb_cb_create_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_modify( int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_create( int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_create(
struct nb_cb_create_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_modify( int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_modify(
struct nb_cb_modify_args *args); 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( int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_destroy(
struct nb_cb_destroy_args *args); struct nb_cb_destroy_args *args);
#endif /* defined(HAVE_RTADV) */ #endif /* defined(HAVE_RTADV) */
#if HAVE_BFDD == 0 #if HAVE_BFDD == 0
int lib_interface_zebra_ptm_enable_modify(struct nb_cb_modify_args *args); 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 #endif
struct yang_data * struct yang_data *
lib_interface_zebra_state_up_count_get_elem(struct nb_cb_get_elem_args *args); 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); 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_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_router_id_destroy(struct nb_cb_destroy_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_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_ipv6_router_id_destroy(struct nb_cb_destroy_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_create(struct nb_cb_create_args *args);
int lib_vrf_zebra_filter_protocol_destroy(struct nb_cb_destroy_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( int lib_vrf_zebra_filter_protocol_route_map_modify(
struct nb_cb_modify_args *args); 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_create(struct nb_cb_create_args *args);
int lib_vrf_zebra_filter_nht_destroy(struct nb_cb_destroy_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_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_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_resolve_via_default_destroy(struct nb_cb_destroy_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_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_ipv6_resolve_via_default_destroy( int lib_vrf_zebra_ipv6_resolve_via_default_destroy(
struct nb_cb_destroy_args *args); 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_create(struct nb_cb_create_args *args);
int lib_vrf_zebra_netns_table_range_destroy(struct nb_cb_destroy_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_start_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_netns_table_range_end_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); 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); 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_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_l3vni_id_destroy(struct nb_cb_destroy_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); int lib_vrf_zebra_prefix_only_modify(struct nb_cb_modify_args *args);
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -20,7 +20,6 @@
#include "vrf.h" #include "vrf.h"
#include "vty.h" #include "vty.h"
#include "lib_errors.h" #include "lib_errors.h"
#include "northbound_cli.h"
#include "zebra/debug.h" #include "zebra/debug.h"
#include "zebra/interface.h" #include "zebra/interface.h"
@ -29,7 +28,6 @@
#include "zebra/zebra_ptm_redistribute.h" #include "zebra/zebra_ptm_redistribute.h"
#include "zebra/zebra_router.h" #include "zebra/zebra_router.h"
#include "zebra_vrf.h" #include "zebra_vrf.h"
#include "zebra_nb.h"
/* /*
* Choose the BFD implementation that we'll use. * 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); static int zebra_ptm_socket_init(void);
void zebra_ptm_sock_read(struct event *thread); 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); static int zebra_ptm_handle_msg_cb(void *arg, void *in_ctxt);
void zebra_bfd_peer_replay_req(void); void zebra_bfd_peer_replay_req(void);
void zebra_ptm_send_status_req(void); void zebra_ptm_send_status_req(void);
@ -117,7 +114,6 @@ void zebra_ptm_init(void)
} }
ptm_cb.pid = getpid(); ptm_cb.pid = getpid();
zebra_ptm_install_commands();
snprintf(buf, sizeof(buf), "%s", FRR_PTM_NAME); snprintf(buf, sizeof(buf), "%s", FRR_PTM_NAME);
ptm_hdl = ptm_lib_register(buf, NULL, zebra_ptm_handle_msg_cb, 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); 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) void zebra_if_ptm_enable(struct interface *ifp)
{ {
struct zebra_if *if_data; 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; 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) static int zebra_ptm_socket_init(void)
{ {
int ret; int ret;
@ -439,14 +360,6 @@ static int zebra_ptm_socket_init(void)
return sock; 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. */ /* BFD session goes down, send message to the protocols. */
static void if_bfd_session_update(struct interface *ifp, struct prefix *dp, static void if_bfd_session_update(struct interface *ifp, struct prefix *dp,
struct prefix *sp, int status, struct prefix *sp, int status,
@ -1572,11 +1485,6 @@ void zebra_ptm_show_status(struct vty *vty __attribute__((__unused__)),
/* NOTHING */ /* NOTHING */
} }
void zebra_ptm_write(struct vty *vty __attribute__((__unused__)))
{
/* NOTHING */
}
void zebra_ptm_if_set_ptm_state(struct interface *i __attribute__((__unused__)), void zebra_ptm_if_set_ptm_state(struct interface *i __attribute__((__unused__)),
struct zebra_if *zi __attribute__((__unused__))) struct zebra_if *zi __attribute__((__unused__)))
{ {

View file

@ -58,7 +58,6 @@ struct zebra_ptm_cb {
void zebra_ptm_init(void); void zebra_ptm_init(void);
void zebra_ptm_finish(void); void zebra_ptm_finish(void);
void zebra_ptm_connect(struct event *t); void zebra_ptm_connect(struct event *t);
void zebra_ptm_write(struct vty *vty);
int zebra_ptm_get_enable_state(void); int zebra_ptm_get_enable_state(void);
#if HAVE_BFDD == 0 #if HAVE_BFDD == 0

View file

@ -14,7 +14,6 @@
#include "filter.h" #include "filter.h"
#include "plist.h" #include "plist.h"
#include "nexthop.h" #include "nexthop.h"
#include "northbound_cli.h"
#include "lib/route_types.h" #include "lib/route_types.h"
#include "vrf.h" #include "vrf.h"
#include "frrstr.h" #include "frrstr.h"
@ -25,7 +24,6 @@
#include "zebra/zebra_rnh.h" #include "zebra/zebra_rnh.h"
#include "zebra/zebra_routemap.h" #include "zebra/zebra_routemap.h"
#include "zebra/zebra_vrf.h" #include "zebra/zebra_vrf.h"
#include "zebra/zebra_nb.h"
#include "zebra/zebra_routemap_clippy.c" #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; return CMD_SUCCESS;
} }
DEFPY_YANG( DEFPY (show_ip_protocol,
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,
show_ip_protocol_cmd, show_ip_protocol_cmd,
"show ip protocol [vrf <NAME$vrf_name|all$vrf_all>]", "show ip protocol [vrf <NAME$vrf_name|all$vrf_all>]",
SHOW_STR SHOW_STR
@ -737,61 +400,7 @@ DEFPY_YANG (show_ip_protocol,
return ret; return ret;
} }
DEFPY_YANG (ipv6_protocol, DEFPY (show_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,
show_ipv6_protocol_cmd, show_ipv6_protocol_cmd,
"show ipv6 protocol [vrf <NAME$vrf_name|all$vrf_all>]", "show ipv6 protocol [vrf <NAME$vrf_name|all$vrf_all>]",
SHOW_STR SHOW_STR
@ -804,84 +413,7 @@ DEFPY_YANG (show_ipv6_protocol,
return ret; return ret;
} }
void lib_vrf_zebra_filter_protocol_cli_write(struct vty *vty, DEFPY (show_ip_protocol_nht,
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,
show_ip_protocol_nht_cmd, show_ip_protocol_nht_cmd,
"show ip nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]", "show ip nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]",
SHOW_STR SHOW_STR
@ -900,61 +432,7 @@ DEFPY_YANG (show_ip_protocol_nht,
return ret; return ret;
} }
DEFPY_YANG (ipv6_protocol_nht_rmap, DEFPY (show_ipv6_protocol_nht,
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,
show_ipv6_protocol_nht_cmd, show_ipv6_protocol_nht_cmd,
"show ipv6 nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]", "show ipv6 nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]",
SHOW_STR SHOW_STR
@ -973,29 +451,6 @@ DEFPY_YANG (show_ipv6_protocol_nht,
return ret; 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*/ /*XXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
/* `match ip next-hop IP_ACCESS_LIST' */ /* `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) 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(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(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(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(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_add_hook(zebra_route_map_add);
route_map_delete_hook(zebra_route_map_delete); 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); 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);
} }

View file

@ -17,7 +17,6 @@
#include "srcdest_table.h" #include "srcdest_table.h"
#include "vrf.h" #include "vrf.h"
#include "vty.h" #include "vty.h"
#include "northbound_cli.h"
#include "zebra/zebra_router.h" #include "zebra/zebra_router.h"
#include "zebra/rtadv.h" #include "zebra/rtadv.h"
@ -34,7 +33,6 @@
#include "zebra/zebra_routemap.h" #include "zebra/zebra_routemap.h"
#include "zebra/zebra_vrf_clippy.c" #include "zebra/zebra_vrf_clippy.c"
#include "zebra/table_manager.h" #include "zebra/table_manager.h"
#include "zebra/zebra_nb.h"
static void zebra_vrf_table_create(struct zebra_vrf *zvrf, afi_t afi, static void zebra_vrf_table_create(struct zebra_vrf *zvrf, afi_t afi,
safi_t safi); 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]; 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, /* if ns_id is different and not VRF_UNKNOWN,
* then update vrf identifier, and enable VRF * then update vrf identifier, and enable VRF
*/ */
@ -597,12 +548,4 @@ void zebra_vrf_init(void)
zebra_vrf_delete); zebra_vrf_delete);
hook_register(zserv_client_close, release_daemon_table_chunks); 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);
}
} }

View file

@ -260,9 +260,6 @@ extern void zebra_vrf_init(void);
extern void zebra_rtable_node_cleanup(struct route_table *table, extern void zebra_rtable_node_cleanup(struct route_table *table,
struct route_node *node); struct route_node *node);
extern void zebra_vrf_indent_cli_write(struct vty *vty,
const struct lyd_node *dnode);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -1164,23 +1164,6 @@ DEFPY (show_ip_nht,
return CMD_SUCCESS; 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, static void show_nexthop_group_out(struct vty *vty, struct nhg_hash_entry *nhe,
json_object *json_nhe_hdr) json_object *json_nhe_hdr)
{ {
@ -1679,88 +1662,6 @@ DEFPY_HIDDEN(backup_nexthop_recursive_use_enable,
return CMD_SUCCESS; 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, DEFPY_HIDDEN(rnh_hide_backups, rnh_hide_backups_cmd,
"[no] ip nht hide-backup-events", "[no] ip nht hide-backup-events",
NO_STR 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); 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 */ /* show vrf */
DEFPY (show_vrf_vni, DEFPY (show_vrf_vni,
show_vrf_vni_cmd, show_vrf_vni_cmd,
@ -3911,8 +3749,6 @@ DEFPY (zebra_nexthop_group_keep,
static int config_write_protocol(struct vty *vty) static int config_write_protocol(struct vty *vty)
{ {
zebra_ptm_write(vty);
if (zrouter.allow_delete) if (zrouter.allow_delete)
vty_out(vty, "allow-external-route-update\n"); vty_out(vty, "allow-external-route-update\n");
@ -4440,47 +4276,6 @@ DEFPY (no_zebra_protodown_bit,
#endif /* HAVE_NETLINK */ #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 #ifdef HAVE_SCRIPTING
DEFUN(zebra_on_rib_process_script, zebra_on_rib_process_script_cmd, 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_ip_rpf_addr_cmd);
install_element(VIEW_NODE, &show_ipv6_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(CONFIG_NODE, &rnh_hide_backups_cmd);
install_element(VIEW_NODE, &show_frr_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_neigh_holdtime_cmd);
install_element(CONFIG_NODE, &evpn_mh_startup_delay_cmd); install_element(CONFIG_NODE, &evpn_mh_startup_delay_cmd);
install_element(CONFIG_NODE, &evpn_mh_redirect_off_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_cmd);
install_element(VIEW_NODE, &show_dataplane_providers_cmd); install_element(VIEW_NODE, &show_dataplane_providers_cmd);
install_element(CONFIG_NODE, &zebra_dplane_queue_limit_cmd); install_element(CONFIG_NODE, &zebra_dplane_queue_limit_cmd);
install_element(CONFIG_NODE, &no_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 #ifdef HAVE_NETLINK
install_element(CONFIG_NODE, &zebra_kernel_netlink_batch_tx_buf_cmd); install_element(CONFIG_NODE, &zebra_kernel_netlink_batch_tx_buf_cmd);
install_element(CONFIG_NODE, &no_zebra_kernel_netlink_batch_tx_buf_cmd); install_element(CONFIG_NODE, &no_zebra_kernel_netlink_batch_tx_buf_cmd);