summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/command.h8
-rw-r--r--lib/defun_lex.l1
-rw-r--r--lib/vty.c14
-rw-r--r--mgmtd/mgmt_be_adapter.c25
-rw-r--r--mgmtd/mgmt_main.c24
-rw-r--r--mgmtd/mgmt_vty.c2
-rw-r--r--mgmtd/subdir.am3
-rw-r--r--tests/topotests/mgmt_oper/simple-results/result-intf-eth0-only-config.json10
-rw-r--r--tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json6
-rw-r--r--vtysh/vtysh.c12
-rw-r--r--vtysh/vtysh.h8
-rw-r--r--zebra/interface.c974
-rw-r--r--zebra/main.c2
-rw-r--r--zebra/router-id.c197
-rw-r--r--zebra/rtadv.c694
-rw-r--r--zebra/subdir.am3
-rw-r--r--zebra/zebra_cli.c2934
-rw-r--r--zebra/zebra_cli.h10
-rw-r--r--zebra/zebra_evpn_mh.c179
-rw-r--r--zebra/zebra_evpn_mh.h3
-rw-r--r--zebra/zebra_nb.c59
-rw-r--r--zebra/zebra_nb.h168
-rw-r--r--zebra/zebra_ptm.c92
-rw-r--r--zebra/zebra_ptm.h1
-rw-r--r--zebra/zebra_routemap.c588
-rw-r--r--zebra/zebra_vrf.c57
-rw-r--r--zebra/zebra_vrf.h3
-rw-r--r--zebra/zebra_vty.c220
28 files changed, 3012 insertions, 3285 deletions
diff --git a/lib/command.h b/lib/command.h
index 4886b4bc47..04c66adb26 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -291,6 +291,10 @@ struct cmd_node {
#define DEFPY_YANG(funcname, cmdname, cmdstr, helpstr) \
DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_YANG)
+#define DEFPY_YANG_HIDDEN(funcname, cmdname, cmdstr, helpstr) \
+ DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, \
+ CMD_ATTR_YANG | CMD_ATTR_HIDDEN)
+
#define DEFPY_YANG_NOSH(funcname, cmdname, cmdstr, helpstr) \
DEFPY_ATTR(funcname, cmdname, cmdstr, helpstr, \
CMD_ATTR_YANG | CMD_ATTR_NOSH)
@@ -315,6 +319,10 @@ struct cmd_node {
#define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr) \
DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_NOSH)
+#define DEFUN_YANG_HIDDEN(funcname, cmdname, cmdstr, helpstr) \
+ DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, \
+ CMD_ATTR_YANG | CMD_ATTR_HIDDEN)
+
#define DEFUN_YANG_NOSH(funcname, cmdname, cmdstr, helpstr) \
DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, \
CMD_ATTR_YANG | CMD_ATTR_NOSH)
diff --git a/lib/defun_lex.l b/lib/defun_lex.l
index 124f864166..3104e48063 100644
--- a/lib/defun_lex.l
+++ b/lib/defun_lex.l
@@ -140,6 +140,7 @@ SPECIAL [(),]
"DEFPY_ATTR" value = strdup(yytext); return DEFUNNY;
"DEFPY_HIDDEN" value = strdup(yytext); return DEFUNNY;
"DEFPY_YANG" value = strdup(yytext); return DEFUNNY;
+"DEFPY_YANG_HIDDEN" value = strdup(yytext); return DEFUNNY;
"DEFPY_YANG_NOSH" value = strdup(yytext); return DEFUNNY;
"ALIAS" value = strdup(yytext); return DEFUNNY;
"ALIAS_HIDDEN" value = strdup(yytext); return DEFUNNY;
diff --git a/lib/vty.c b/lib/vty.c
index a6b4de579a..ea35c541ee 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -126,6 +126,7 @@ bool vty_log_commands;
static bool vty_log_commands_perm;
char const *const mgmt_daemons[] = {
+ "zebra",
#ifdef HAVE_RIPD
"ripd",
#endif
@@ -2264,19 +2265,6 @@ bool mgmt_vty_read_configs(void)
snprintf(path, sizeof(path), "%s/mgmtd.conf", frr_sysconfdir);
confp = vty_open_config(path, config_default);
- if (!confp) {
- char *orig;
-
- snprintf(path, sizeof(path), "%s/zebra.conf", frr_sysconfdir);
- orig = XSTRDUP(MTYPE_TMP, host_config_get());
-
- zlog_info("mgmtd: trying backup config file: %s", path);
- confp = vty_open_config(path, config_default);
-
- host_config_set(path);
- XFREE(MTYPE_TMP, orig);
- }
-
if (confp) {
zlog_info("mgmtd: reading config file: %s", path);
diff --git a/mgmtd/mgmt_be_adapter.c b/mgmtd/mgmt_be_adapter.c
index 6754657500..8d7ae88555 100644
--- a/mgmtd/mgmt_be_adapter.c
+++ b/mgmtd/mgmt_be_adapter.c
@@ -65,6 +65,23 @@ struct mgmt_be_xpath_map {
* above map as well.
*/
+static const char *const zebra_config_xpaths[] = {
+ "/frr-affinity-map:lib",
+ "/frr-filter:lib",
+ "/frr-route-map:lib",
+ "/frr-zebra:zebra",
+ "/frr-interface:lib",
+ "/frr-vrf:lib",
+ NULL,
+};
+
+static const char *const zebra_oper_xpaths[] = {
+ "/frr-interface:lib/interface",
+ "/frr-vrf:lib/vrf/frr-zebra:zebra",
+ "/frr-zebra:zebra",
+ NULL,
+};
+
#if HAVE_RIPD
static const char *const ripd_config_xpaths[] = {
"/frr-filter:lib",
@@ -105,6 +122,7 @@ static const char *const staticd_config_xpaths[] = {
#endif
static const char *const *be_client_config_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
+ [MGMTD_BE_CLIENT_ID_ZEBRA] = zebra_config_xpaths,
#ifdef HAVE_RIPD
[MGMTD_BE_CLIENT_ID_RIPD] = ripd_config_xpaths,
#endif
@@ -116,13 +134,6 @@ static const char *const *be_client_config_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
#endif
};
-static const char *const zebra_oper_xpaths[] = {
- "/frr-interface:lib/interface",
- "/frr-vrf:lib/vrf/frr-zebra:zebra",
- "/frr-zebra:zebra",
- NULL,
-};
-
static const char *const *be_client_oper_xpaths[MGMTD_BE_CLIENT_ID_MAX] = {
#ifdef HAVE_RIPD
[MGMTD_BE_CLIENT_ID_RIPD] = ripd_oper_xpaths,
diff --git a/mgmtd/mgmt_main.c b/mgmtd/mgmt_main.c
index e71637bbd2..6dbd1f2e52 100644
--- a/mgmtd/mgmt_main.c
+++ b/mgmtd/mgmt_main.c
@@ -18,6 +18,7 @@
#include "ripngd/ripng_nb.h"
#include "routing_nb.h"
#include "affinitymap.h"
+#include "zebra/zebra_cli.h"
/* mgmt options, we use GNU getopt library. */
static const struct option longopts[] = {
@@ -143,32 +144,11 @@ static struct frr_signal_t mgmt_signals[] = {
extern const struct frr_yang_module_info frr_staticd_cli_info;
#endif
-#if HAVE_BFDD == 0 || defined(HAVE_RTADV)
-const char *zebra_features[] = {
-#if HAVE_BFDD == 0
- "ptm-bfd",
-#endif
-#if defined(HAVE_RTADV)
- "ipv6-router-advertisements",
-#endif
- NULL
-};
-#endif
-
/*
* These are stub info structs that are used to load the modules used by backend
* clients into mgmtd. The modules are used by libyang in order to support
* parsing binary data returns from the backend.
*/
-const struct frr_yang_module_info zebra_info = {
- .name = "frr-zebra",
-#if HAVE_BFDD == 0 || defined(HAVE_RTADV)
- .features = zebra_features,
-#endif
- .ignore_cfg_cbs = true,
- .nodes = { { .xpath = NULL } },
-};
-
const struct frr_yang_module_info zebra_route_map_info = {
.name = "frr-zebra-route-map",
.ignore_cfg_cbs = true,
@@ -191,7 +171,7 @@ static const struct frr_yang_module_info *const mgmt_yang_modules[] = {
* YANG module info used by backend clients get added here.
*/
- &zebra_info,
+ &frr_zebra_cli_info,
&zebra_route_map_info,
#ifdef HAVE_RIPD
diff --git a/mgmtd/mgmt_vty.c b/mgmtd/mgmt_vty.c
index d5cfbbf771..7135bc5547 100644
--- a/mgmtd/mgmt_vty.c
+++ b/mgmtd/mgmt_vty.c
@@ -26,6 +26,7 @@
#include "ripd/rip_nb.h"
#include "ripngd/ripng_nb.h"
#include "staticd/static_vty.h"
+#include "zebra/zebra_cli.h"
extern struct frr_daemon_info *mgmt_daemon_info;
@@ -579,6 +580,7 @@ void mgmt_vty_init(void)
* backend components that are moved to new MGMTD infra
* here one by one.
*/
+ zebra_cli_init();
#if HAVE_RIPD
rip_cli_init();
#endif
diff --git a/mgmtd/subdir.am b/mgmtd/subdir.am
index e3008bab8c..a3955925ed 100644
--- a/mgmtd/subdir.am
+++ b/mgmtd/subdir.am
@@ -16,6 +16,7 @@ clippy_scan += \
lib_LTLIBRARIES += mgmtd/libmgmt_be_nb.la
mgmtd_libmgmt_be_nb_la_SOURCES = \
+ zebra/zebra_cli.c \
# end
nodist_mgmtd_libmgmt_be_nb_la_SOURCES = \
lib/affinitymap_cli.c \
@@ -44,6 +45,7 @@ noinst_HEADERS += \
mgmtd/mgmt_history.h \
mgmtd/mgmt_memory.h \
mgmtd/mgmt_txn.h \
+ zebra/zebra_cli.h \
# end
sbin_PROGRAMS += mgmtd/mgmtd
@@ -52,6 +54,7 @@ mgmtd_mgmtd_SOURCES = \
mgmtd/mgmt_main.c \
# end
nodist_mgmtd_mgmtd_SOURCES = \
+ yang/frr-zebra.yang.c \
# nothing
mgmtd_mgmtd_CFLAGS = $(AM_CFLAGS) -I ./
mgmtd_mgmtd_LDADD = mgmtd/libmgmtd.a lib/libfrr.la $(LIBCAP) $(LIBM) $(LIBYANG_LIBS) $(UST_LIBS)
diff --git a/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-only-config.json b/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-only-config.json
index adcf99053f..9289759274 100644
--- a/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-only-config.json
+++ b/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-only-config.json
@@ -3,7 +3,15 @@
"interface": [
{
"name": "r1-eth0",
- "description": "r1-eth0-desc"
+ "description": "r1-eth0-desc",
+ "frr-zebra:zebra": {
+ "ipv4-addrs": [
+ {
+ "ip": "1.1.1.1",
+ "prefix-length": 24
+ }
+ ]
+ }
}
]
}
diff --git a/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json b/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json
index 47c9686252..ef9e005619 100644
--- a/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json
+++ b/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json
@@ -14,6 +14,12 @@
"phy-address": "rubout"
},
"frr-zebra:zebra": {
+ "ipv4-addrs": [
+ {
+ "ip": "1.1.1.1",
+ "prefix-length": 24
+ }
+ ],
"state": {
"up-count": 0,
"down-count": 0
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index 299165e2aa..940b63b0e1 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -3007,22 +3007,22 @@ DEFUN (vtysh_show_work_queues_daemon,
return show_one_daemon(vty, argv, argc - 1, argv[argc - 1]->text);
}
-DEFUNSH(VTYSH_ZEBRA, vtysh_link_params, vtysh_link_params_cmd, "link-params",
+DEFUNSH(VTYSH_MGMTD, vtysh_link_params, vtysh_link_params_cmd, "link-params",
LINK_PARAMS_STR)
{
vty->node = LINK_PARAMS_NODE;
return CMD_SUCCESS;
}
-DEFUNSH_HIDDEN(VTYSH_ZEBRA, no_link_params_enable, no_link_params_enable_cmd,
- "no enable", NO_STR "Disable link parameters on this interface\n")
+DEFUNSH_HIDDEN(VTYSH_MGMTD, no_link_params_enable, no_link_params_enable_cmd,
+ "no enable", NO_STR "Disable link parameters on this interface\n")
{
if (vty->node == LINK_PARAMS_NODE)
vty->node = INTERFACE_NODE;
return CMD_SUCCESS;
}
-DEFUNSH(VTYSH_ZEBRA, exit_link_params, exit_link_params_cmd, "exit-link-params",
+DEFUNSH(VTYSH_MGMTD, exit_link_params, exit_link_params_cmd, "exit-link-params",
"Exit from Link Params configuration node\n")
{
if (vty->node == LINK_PARAMS_NODE)
@@ -3030,7 +3030,7 @@ DEFUNSH(VTYSH_ZEBRA, exit_link_params, exit_link_params_cmd, "exit-link-params",
return CMD_SUCCESS;
}
-DEFUNSH(VTYSH_ZEBRA, vtysh_exit_link_params, vtysh_exit_link_params_cmd, "exit",
+DEFUNSH(VTYSH_MGMTD, vtysh_exit_link_params, vtysh_exit_link_params_cmd, "exit",
"Exit current mode and down to previous mode\n")
{
if (vty->node == LINK_PARAMS_NODE)
@@ -3038,7 +3038,7 @@ DEFUNSH(VTYSH_ZEBRA, vtysh_exit_link_params, vtysh_exit_link_params_cmd, "exit",
return CMD_SUCCESS;
}
-DEFUNSH(VTYSH_ZEBRA, vtysh_quit_link_params, vtysh_quit_link_params_cmd, "quit",
+DEFUNSH(VTYSH_MGMTD, vtysh_quit_link_params, vtysh_quit_link_params_cmd, "quit",
"Exit current mode and down to previous mode\n")
{
return vtysh_exit_link_params(self, vty, argc, argv);
diff --git a/vtysh/vtysh.h b/vtysh/vtysh.h
index 4fe30777d8..7758ceaea5 100644
--- a/vtysh/vtysh.h
+++ b/vtysh/vtysh.h
@@ -53,23 +53,23 @@ extern struct event_loop *master;
VTYSH_BFDD | VTYSH_BABELD | VTYSH_BGPD | VTYSH_EIGRPD | VTYSH_ISISD | \
VTYSH_FABRICD | VTYSH_LDPD | VTYSH_NHRPD | VTYSH_OSPF6D | \
VTYSH_OSPFD | VTYSH_PBRD | VTYSH_PIMD | VTYSH_PIM6D | \
- VTYSH_VRRPD | VTYSH_ZEBRA | VTYSH_MGMTD
+ VTYSH_VRRPD | VTYSH_MGMTD
#define VTYSH_ACL_SHOW \
VTYSH_BFDD | VTYSH_BABELD | VTYSH_BGPD | VTYSH_EIGRPD | VTYSH_ISISD | \
VTYSH_FABRICD | VTYSH_LDPD | VTYSH_NHRPD | VTYSH_OSPF6D | \
VTYSH_OSPFD | VTYSH_PBRD | VTYSH_PIMD | VTYSH_PIM6D | \
VTYSH_RIPD | VTYSH_RIPNGD | VTYSH_VRRPD | VTYSH_ZEBRA
-#define VTYSH_AFFMAP VTYSH_ZEBRA | VTYSH_ISISD | VTYSH_MGMTD
+#define VTYSH_AFFMAP VTYSH_ISISD | VTYSH_MGMTD
#define VTYSH_RMAP_CONFIG \
- VTYSH_ZEBRA | VTYSH_OSPFD | VTYSH_OSPF6D | VTYSH_BGPD | VTYSH_ISISD | \
+ VTYSH_OSPFD | VTYSH_OSPF6D | VTYSH_BGPD | VTYSH_ISISD | \
VTYSH_PIMD | VTYSH_EIGRPD | VTYSH_FABRICD | VTYSH_MGMTD
#define VTYSH_RMAP_SHOW \
VTYSH_ZEBRA | VTYSH_RIPD | VTYSH_RIPNGD | VTYSH_OSPFD | VTYSH_OSPF6D | \
VTYSH_BGPD | VTYSH_ISISD | VTYSH_PIMD | VTYSH_EIGRPD | \
VTYSH_FABRICD
#define VTYSH_INTERFACE_SUBSET \
- VTYSH_ZEBRA | VTYSH_OSPFD | VTYSH_OSPF6D | \
+ VTYSH_OSPFD | VTYSH_OSPF6D | \
VTYSH_ISISD | VTYSH_PIMD | VTYSH_PIM6D | VTYSH_NHRPD | \
VTYSH_EIGRPD | VTYSH_BABELD | VTYSH_PBRD | VTYSH_FABRICD | \
VTYSH_VRRPD | VTYSH_MGMTD
diff --git a/zebra/interface.c b/zebra/interface.c
index 62ff676f48..cba052dff6 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -18,7 +18,6 @@
#include "log.h"
#include "zclient.h"
#include "vrf.h"
-#include "lib/northbound_cli.h"
#include "zebra/rtadv.h"
#include "zebra_ns.h"
@@ -37,7 +36,6 @@
#include "zebra/zebra_vxlan.h"
#include "zebra/zebra_errors.h"
#include "zebra/zebra_evpn_mh.h"
-#include "zebra/zebra_nb.h"
DEFINE_MTYPE_STATIC(ZEBRA, ZINFO, "Zebra Interface Information");
@@ -3685,36 +3683,6 @@ void if_arp(struct interface *ifp, bool enable)
if_refresh(ifp);
}
-DEFPY_YANG (multicast_new,
- multicast_new_cmd,
- "[no] multicast <enable$on|disable$off>",
- NO_STR
- "Control multicast flag on interface\n"
- "Set multicast flag on interface\n"
- "Unset multicast flag on interface\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast",
- NB_OP_CREATE, on ? "true" : "false");
- else
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast",
- NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_multicast_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool multicast = yang_dnode_get_bool(dnode, NULL);
-
- if (multicast)
- vty_out(vty, " multicast enable\n");
- else
- vty_out(vty, " multicast disable\n");
-}
-
int if_multicast_set(struct interface *ifp)
{
struct zebra_if *if_data;
@@ -3733,47 +3701,6 @@ int if_multicast_set(struct interface *ifp)
return 0;
}
-DEFUN_HIDDEN (multicast,
- multicast_cmd,
- "multicast",
- "Set multicast flag to interface\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast",
- NB_OP_CREATE, "true");
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG (mpls,
- mpls_cmd,
- "[no] mpls <enable$on|disable$off>",
- NO_STR
- MPLS_STR
- "Set mpls to be on for the interface\n"
- "Set mpls to be off for the interface\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/mpls",
- NB_OP_CREATE, on ? "true" : "false");
- else
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/mpls",
- NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_mpls_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool mpls = yang_dnode_get_bool(dnode, NULL);
-
- if (mpls)
- vty_out(vty, " mpls enable\n");
- else
- vty_out(vty, " mpls disable\n");
-}
-
int if_multicast_unset(struct interface *ifp)
{
struct zebra_if *if_data;
@@ -3792,18 +3719,6 @@ int if_multicast_unset(struct interface *ifp)
return 0;
}
-DEFUN_HIDDEN (no_multicast,
- no_multicast_cmd,
- "no multicast",
- NO_STR
- "Unset multicast flag to interface\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast",
- NB_OP_CREATE, "false");
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
int if_linkdetect(struct interface *ifp, bool detect)
{
int if_was_operative;
@@ -3827,30 +3742,6 @@ int if_linkdetect(struct interface *ifp, bool detect)
return 0;
}
-DEFPY_YANG (linkdetect,
- linkdetect_cmd,
- "[no] link-detect",
- NO_STR
- "Enable link detection on interface\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-detect",
- NB_OP_CREATE, no ? "false" : "true");
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_detect_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool link_detect = yang_dnode_get_bool(dnode, NULL);
-
- if (!link_detect)
- vty_out(vty, " no link-detect\n");
- else if (show_defaults)
- vty_out(vty, " link-detect\n");
-}
-
int if_shutdown(struct interface *ifp)
{
struct zebra_if *if_data;
@@ -3870,30 +3761,6 @@ int if_shutdown(struct interface *ifp)
return 0;
}
-DEFPY_YANG (shutdown_if,
- shutdown_if_cmd,
- "[no] shutdown",
- NO_STR
- "Shutdown the selected interface\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/enabled",
- NB_OP_CREATE, no ? "true" : "false");
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_enabled_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool enabled = yang_dnode_get_bool(dnode, NULL);
-
- if (!enabled)
- vty_out(vty, " shutdown\n");
- else if (show_defaults)
- vty_out(vty, " no shutdown\n");
-}
-
int if_no_shutdown(struct interface *ifp)
{
struct zebra_if *if_data;
@@ -3918,39 +3785,6 @@ int if_no_shutdown(struct interface *ifp)
return 0;
}
-DEFPY_YANG (bandwidth_if,
- bandwidth_if_cmd,
- "[no] bandwidth ![(1-100000)]$bw",
- NO_STR
- "Set bandwidth informational parameter\n"
- "Bandwidth in megabits\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/bandwidth",
- NB_OP_CREATE, bw_str);
- else
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/bandwidth",
- NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_bandwidth_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- uint32_t bandwidth = yang_dnode_get_uint32(dnode, NULL);
-
- vty_out(vty, " bandwidth %u\n", bandwidth);
-}
-
-struct cmd_node link_params_node = {
- .name = "link-params",
- .node = LINK_PARAMS_NODE,
- .parent_node = INTERFACE_NODE,
- .prompt = "%s(config-link-params)# ",
-};
-
void link_param_cmd_set_uint32(struct interface *ifp, uint32_t *field,
uint32_t type, uint32_t value)
{
@@ -3995,600 +3829,6 @@ void link_param_cmd_unset(struct interface *ifp, uint32_t type)
zebra_interface_parameters_update(ifp);
}
-DEFUN_YANG_NOSH (link_params,
- link_params_cmd,
- "link-params",
- LINK_PARAMS_STR)
-{
- int ret;
-
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-params", NB_OP_CREATE, NULL);
-
- ret = nb_cli_apply_changes(vty, NULL);
- if (ret == CMD_SUCCESS) {
- char xpath[XPATH_MAXLEN];
- snprintf(xpath, sizeof(xpath), "%s/frr-zebra:zebra/link-params", VTY_CURR_XPATH);
- VTY_PUSH_XPATH(LINK_PARAMS_NODE, xpath);
- }
-
- return ret;
-}
-
-DEFUN_NOSH (exit_link_params,
- exit_link_params_cmd,
- "exit-link-params",
- "Exit from Link Params configuration mode\n")
-{
- cmd_exit(vty);
- return CMD_SUCCESS;
-}
-
-void lib_interface_zebra_link_params_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- vty_out(vty, " link-params\n");
-}
-
-void lib_interface_zebra_link_params_cli_write_end(struct vty *vty,
- const struct lyd_node *dnode)
-{
- vty_out(vty, " exit-link-params\n");
-}
-
-DEFUN_YANG (no_link_params,
- no_link_params_cmd,
- "no link-params",
- NO_STR
- LINK_PARAMS_STR)
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-params", NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-/* Specific Traffic Engineering parameters commands */
-DEFUN_HIDDEN (link_params_enable,
- link_params_enable_cmd,
- "enable",
- "Activate link parameters on this interface\n")
-{
- vty_out(vty, "This command is deprecated. Link parameters are activated when \"link-params\" node is entered.\n");
-
- return CMD_SUCCESS;
-}
-
-DEFUN_NOSH (no_link_params_enable,
- no_link_params_enable_cmd,
- "no enable",
- NO_STR
- "Disable link parameters on this interface\n")
-{
- int ret;
-
- vty_out(vty, "This command is deprecated. To disable link parameters use \"no link-params\" in the interface node.\n");
-
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
-
- ret = nb_cli_apply_changes(vty, NULL);
- if (ret == CMD_SUCCESS)
- cmd_exit(vty);
-
- return ret;
-}
-
-/* STANDARD TE metrics */
-DEFPY_YANG (link_params_metric,
- link_params_metric_cmd,
- "[no] metric ![(0-4294967295)]$metric",
- NO_STR
- "Link metric for MPLS-TE purpose\n"
- "Metric value in decimal\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty, "./metric", NB_OP_MODIFY, metric_str);
- else
- nb_cli_enqueue_change(vty, "./metric", NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_metric_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint32_t metric = yang_dnode_get_uint32(dnode, NULL);
-
- vty_out(vty, " metric %u\n", metric);
-}
-
-DEFPY_YANG (link_params_maxbw,
- link_params_maxbw_cmd,
- "max-bw BANDWIDTH",
- "Maximum bandwidth that can be used\n"
- "Bytes/second (IEEE floating point format)\n")
-{
- char value[YANG_VALUE_MAXLEN];
- float bw;
-
- if (sscanf(bandwidth, "%g", &bw) != 1) {
- vty_out(vty, "Invalid bandwidth value\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- snprintf(value, sizeof(value), "%a", bw);
-
- nb_cli_enqueue_change(vty, "./max-bandwidth", NB_OP_MODIFY, value);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_max_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- float max_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode, NULL);
-
- vty_out(vty, " max-bw %g\n", max_bandwidth);
-}
-
-DEFPY_YANG (link_params_max_rsv_bw,
- link_params_max_rsv_bw_cmd,
- "max-rsv-bw BANDWIDTH",
- "Maximum bandwidth that may be reserved\n"
- "Bytes/second (IEEE floating point format)\n")
-{
- char value[YANG_VALUE_MAXLEN];
- float bw;
-
- if (sscanf(bandwidth, "%g", &bw) != 1) {
- vty_out(vty, "Invalid bandwidth value\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- snprintf(value, sizeof(value), "%a", bw);
-
- nb_cli_enqueue_change(vty, "./max-reservable-bandwidth", NB_OP_MODIFY,
- value);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_max_reservable_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- float max_reservable_bandwidth =
- yang_dnode_get_bandwidth_ieee_float32(dnode, NULL);
-
- vty_out(vty, " max-rsv-bw %g\n", max_reservable_bandwidth);
-}
-
-DEFPY_YANG (link_params_unrsv_bw,
- link_params_unrsv_bw_cmd,
- "unrsv-bw (0-7)$priority BANDWIDTH",
- "Unreserved bandwidth at each priority level\n"
- "Priority\n"
- "Bytes/second (IEEE floating point format)\n")
-{
- char xpath[XPATH_MAXLEN];
- char value[YANG_VALUE_MAXLEN];
- float bw;
-
- if (sscanf(bandwidth, "%g", &bw) != 1) {
- vty_out(vty, "Invalid bandwidth value\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- snprintf(xpath, sizeof(xpath),
- "./unreserved-bandwidths/unreserved-bandwidth[priority='%s']/unreserved-bandwidth",
- priority_str);
- snprintf(value, sizeof(value), "%a", bw);
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, value);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint8_t priority = yang_dnode_get_uint8(dnode, "priority");
- float unreserved_bandwidth =
- yang_dnode_get_bandwidth_ieee_float32(dnode,
- "unreserved-bandwidth");
-
- vty_out(vty, " unrsv-bw %u %g\n", priority, unreserved_bandwidth);
-}
-
-DEFPY_YANG(link_params_admin_grp, link_params_admin_grp_cmd,
- "admin-grp BITPATTERN",
- "Administrative group membership\n"
- "32-bit Hexadecimal value (e.g. 0xa1)\n")
-{
- int idx_bitpattern = 1;
- unsigned long value;
- char value_str[11];
-
- if (sscanf(argv[idx_bitpattern]->arg, "0x%lx", &value) != 1) {
- vty_out(vty, "link_params_admin_grp: fscanf: %s\n",
- safe_strerror(errno));
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (value > 0xFFFFFFFF) {
- vty_out(vty, "value must be not be superior to 0xFFFFFFFF\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- snprintf(value_str, sizeof(value_str), "%ld", value);
-
- nb_cli_enqueue_change(
- vty, "./legacy-admin-group",
- NB_OP_MODIFY, value_str);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(no_link_params_admin_grp, no_link_params_admin_grp_cmd,
- "no admin-grp",
- NO_STR "Disable Administrative group membership on this interface\n")
-{
- nb_cli_enqueue_change(
- vty, "./legacy-admin-group",
- NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-/* RFC5392 & RFC5316: INTER-AS */
-DEFPY_YANG (link_params_inter_as,
- link_params_inter_as_cmd,
- "[no] neighbor ![A.B.C.D$ip as (1-4294967295)$as]",
- NO_STR
- "Configure remote ASBR information (Neighbor IP address and AS number)\n"
- "Remote IP address in dot decimal A.B.C.D\n"
- "Remote AS number\n"
- "AS number in the range <1-4294967295>\n")
-{
- if (!no) {
- nb_cli_enqueue_change(vty, "./neighbor", NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty, "./neighbor/remote-as", NB_OP_MODIFY,
- as_str);
- nb_cli_enqueue_change(vty, "./neighbor/ipv4-remote-id",
- NB_OP_MODIFY, ip_str);
- } else {
- nb_cli_enqueue_change(vty, "./neighbor", NB_OP_DESTROY, NULL);
- }
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_neighbor_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint32_t remote_as = yang_dnode_get_uint32(dnode, "remote-as");
- const char *ipv4_remote_id = yang_dnode_get_string(dnode,
- "ipv4-remote-id");
-
- vty_out(vty, " neighbor %s as %u\n", ipv4_remote_id, remote_as);
-}
-
-/* RFC7471: OSPF Traffic Engineering (TE) Metric extensions &
- * draft-ietf-isis-metric-extensions-07.txt */
-DEFPY_YANG (link_params_delay,
- link_params_delay_cmd,
- "[no] delay ![(0-16777215)$delay [min (0-16777215)$min max (0-16777215)$max]]",
- NO_STR
- "Unidirectional Average Link Delay\n"
- "Average delay in micro-second as decimal (0...16777215)\n"
- "Minimum delay\n"
- "Minimum delay in micro-second as decimal (0...16777215)\n"
- "Maximum delay\n"
- "Maximum delay in micro-second as decimal (0...16777215)\n")
-{
- if (!no) {
- nb_cli_enqueue_change(vty, "./delay", NB_OP_MODIFY, delay_str);
- if (min_str && max_str) {
- nb_cli_enqueue_change(vty, "./min-max-delay",
- NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty, "./min-max-delay/delay-min",
- NB_OP_MODIFY, min_str);
- nb_cli_enqueue_change(vty, "./min-max-delay/delay-max",
- NB_OP_MODIFY, max_str);
- } else {
- nb_cli_enqueue_change(vty, "./min-max-delay",
- NB_OP_DESTROY, NULL);
- }
- } else {
- nb_cli_enqueue_change(vty, "./delay", NB_OP_DESTROY, NULL);
- nb_cli_enqueue_change(vty, "./min-max-delay", NB_OP_DESTROY,
- NULL);
- }
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_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, " delay %u", delay);
-
- if (yang_dnode_exists(dnode, "../min-max-delay")) {
- uint32_t delay_min =
- yang_dnode_get_uint32(dnode,
- "../min-max-delay/delay-min");
- uint32_t delay_max =
- yang_dnode_get_uint32(dnode,
- "../min-max-delay/delay-max");
-
- vty_out(vty, " min %u max %u", delay_min, delay_max);
- }
-
- vty_out(vty, "\n");
-}
-
-DEFPY_YANG (link_params_delay_var,
- link_params_delay_var_cmd,
- "[no] delay-variation ![(0-16777215)$delay_var]",
- NO_STR
- "Unidirectional Link Delay Variation\n"
- "delay variation in micro-second as decimal (0...16777215)\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty, "./delay-variation", NB_OP_MODIFY,
- delay_var_str);
- else
- nb_cli_enqueue_change(vty, "./delay-variation", NB_OP_DESTROY,
- NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_delay_variation_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint32_t delay_variation = yang_dnode_get_uint32(dnode, NULL);
-
- vty_out(vty, " delay-variation %u\n", delay_variation);
-}
-
-DEFPY_YANG(
- link_params_pkt_loss, link_params_pkt_loss_cmd,
- "[no] packet-loss ![PERCENTAGE]",
- NO_STR
- "Unidirectional Link Packet Loss\n"
- "percentage of total traffic by 0.000003% step and less than 50.331642%\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty, "./packet-loss", NB_OP_MODIFY,
- percentage);
- else
- nb_cli_enqueue_change(vty, "./packet-loss", NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_packet_loss_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- double packet_loss = yang_dnode_get_dec64(dnode, NULL);
-
- vty_out(vty, " packet-loss %lf\n", packet_loss);
-}
-
-DEFPY_YANG (link_params_res_bw,
- link_params_res_bw_cmd,
- "[no] res-bw ![BANDWIDTH]",
- NO_STR
- "Unidirectional Residual Bandwidth\n"
- "Bytes/second (IEEE floating point format)\n")
-{
- char value[YANG_VALUE_MAXLEN];
- float bw;
-
- if (!no) {
- if (sscanf(bandwidth, "%g", &bw) != 1) {
- vty_out(vty, "Invalid bandwidth value\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- snprintf(value, sizeof(value), "%a", bw);
-
- nb_cli_enqueue_change(vty, "./residual-bandwidth", NB_OP_MODIFY,
- value);
- } else {
- nb_cli_enqueue_change(vty, "./residual-bandwidth",
- NB_OP_DESTROY, NULL);
- }
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_residual_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- float residual_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode,
- NULL);
-
- vty_out(vty, " res-bw %g\n", residual_bandwidth);
-}
-
-DEFPY_YANG (link_params_ava_bw,
- link_params_ava_bw_cmd,
- "[no] ava-bw ![BANDWIDTH]",
- NO_STR
- "Unidirectional Available Bandwidth\n"
- "Bytes/second (IEEE floating point format)\n")
-{
- char value[YANG_VALUE_MAXLEN];
- float bw;
-
- if (!no) {
- if (sscanf(bandwidth, "%g", &bw) != 1) {
- vty_out(vty, "Invalid bandwidth value\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- snprintf(value, sizeof(value), "%a", bw);
-
- nb_cli_enqueue_change(vty, "./available-bandwidth",
- NB_OP_MODIFY, value);
- } else {
- nb_cli_enqueue_change(vty, "./available-bandwidth",
- NB_OP_DESTROY, NULL);
- }
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_available_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- float available_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode,
- NULL);
-
- vty_out(vty, " ava-bw %g\n", available_bandwidth);
-}
-
-DEFPY_YANG (link_params_use_bw,
- link_params_use_bw_cmd,
- "[no] use-bw ![BANDWIDTH]",
- NO_STR
- "Unidirectional Utilised Bandwidth\n"
- "Bytes/second (IEEE floating point format)\n")
-{
- char value[YANG_VALUE_MAXLEN];
- float bw;
-
- if (!no) {
- if (sscanf(bandwidth, "%g", &bw) != 1) {
- vty_out(vty, "Invalid bandwidth value\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- snprintf(value, sizeof(value), "%a", bw);
-
- nb_cli_enqueue_change(vty, "./utilized-bandwidth", NB_OP_MODIFY,
- value);
- } else {
- nb_cli_enqueue_change(vty, "./utilized-bandwidth",
- NB_OP_DESTROY, NULL);
- }
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_link_params_utilized_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- float utilized_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode,
- NULL);
-
- vty_out(vty, " use-bw %g\n", utilized_bandwidth);
-}
-
-static int ag_change(struct vty *vty, int argc, struct cmd_token **argv,
- const char *xpath_base, bool no, int start_idx)
-{
- char xpath[XPATH_MAXLEN];
-
- for (int i = start_idx; i < argc; i++) {
- snprintf(xpath, XPATH_MAXLEN, "%s[.='%s']", xpath_base,
- argv[i]->arg);
- nb_cli_enqueue_change(vty, xpath,
- no ? NB_OP_DESTROY : NB_OP_CREATE, NULL);
- }
- return nb_cli_apply_changes(vty, NULL);
-}
-
-/*
- * XPath:
- * /frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities/affinity
- */
-DEFPY_YANG(link_params_affinity, link_params_affinity_cmd,
- "[no] affinity NAME...",
- NO_STR
- "Interface affinities\n"
- "Affinity names\n")
-{
- return ag_change(vty, argc, argv,
- "./affinities/affinity",
- no, no ? 2 : 1);
-}
-
-
-/*
- * XPath:
- * /frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities/affinity-mode
- */
-DEFPY_YANG(link_params_affinity_mode, link_params_affinity_mode_cmd,
- "affinity-mode <standard|extended|both>$affmode",
- "Interface affinity mode\n"
- "Standard Admin-Group only RFC3630,5305,5329\n"
- "Extended Admin-Group only RFC7308 (default)\n"
- "Standard and extended Admin-Group format\n")
-{
- const char *xpath = "./affinity-mode";
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, affmode);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(no_link_params_affinity_mode, no_link_params_affinity_mode_cmd,
- "no affinity-mode [<standard|extended|both>]",
- NO_STR
- "Interface affinity mode\n"
- "Standard Admin-Group only RFC3630,5305,5329\n"
- "Extended Admin-Group only RFC7308 (default)\n"
- "Standard and extended Admin-Group format\n")
-{
- const char *xpath = "./affinity-mode";
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, "extended");
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-static int ag_iter_cb(const struct lyd_node *dnode, void *arg)
-{
- struct vty *vty = (struct vty *)arg;
-
- vty_out(vty, " %s", yang_dnode_get_string(dnode, "."));
- return YANG_ITER_CONTINUE;
-}
-
-void cli_show_legacy_admin_group(struct vty *vty, const struct lyd_node *dnode,
- bool show_defaults)
-{
- vty_out(vty, " admin-grp 0x%x\n",
- yang_dnode_get_uint32(dnode, NULL));
-}
-
-void cli_show_affinity_mode(struct vty *vty, const struct lyd_node *dnode,
- bool show_defaults)
-{
- enum affinity_mode affinity_mode = yang_dnode_get_enum(dnode, ".");
-
- if (affinity_mode == AFFINITY_MODE_STANDARD)
- vty_out(vty, " affinity-mode standard\n");
- else if (affinity_mode == AFFINITY_MODE_BOTH)
- vty_out(vty, " affinity-mode both\n");
- else if (affinity_mode == AFFINITY_MODE_EXTENDED && show_defaults)
- vty_out(vty, " affinity-mode extended\n");
-}
-
-void cli_show_affinity(struct vty *vty, const struct lyd_node *dnode,
- bool show_defaults)
-{
- if (!yang_dnode_exists(dnode, "affinity"))
- return;
-
- vty_out(vty, " affinity");
- yang_dnode_iterate(ag_iter_cb, vty, dnode, "affinity");
- vty_out(vty, "\n");
-}
-
void if_ip_address_install(struct interface *ifp, struct prefix *prefix,
const char *label, struct prefix *pp)
{
@@ -4668,144 +3908,6 @@ void if_ip_address_uninstall(struct interface *ifp, struct prefix *prefix,
UNSET_FLAG(ifc->conf, ZEBRA_IFC_QUEUED);
}
-#ifdef HAVE_NETLINK
-DEFPY_YANG (ip_address,
- ip_address_cmd,
- "[no] ip address A.B.C.D/M [label LINE$label]",
- NO_STR
- "Interface Internet Protocol config commands\n"
- "Set the IP address of an interface\n"
- "IP address (e.g. 10.0.0.1/8)\n"
- "Label of this address\n"
- "Label\n")
-#else
-DEFPY_YANG (ip_address,
- ip_address_cmd,
- "[no] ip address A.B.C.D/M",
- NO_STR
- "Interface Internet Protocol config commands\n"
- "Set the IP address of an interface\n"
- "IP address (e.g. 10.0.0.1/8)\n")
-#endif
-{
- char ip[INET_ADDRSTRLEN + 3];
- char *mask;
-
- if (no) {
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
- } else {
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
-#ifdef HAVE_NETLINK
- if (label)
- nb_cli_enqueue_change(vty, "./label", NB_OP_MODIFY,
- label);
- else
- nb_cli_enqueue_change(vty, "./label", NB_OP_DESTROY,
- NULL);
-#endif
- }
-
- strlcpy(ip, address_str, sizeof(ip));
-
- mask = strchr(ip, '/');
- *mask = 0;
- mask++;
-
- return nb_cli_apply_changes(vty,
- "./frr-zebra:zebra/ipv4-addrs[ip='%s'][prefix-length='%s']",
- ip, mask);
-}
-
-void lib_interface_zebra_ipv4_addrs_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *ip = yang_dnode_get_string(dnode, "ip");
- uint8_t prefix_length = yang_dnode_get_uint8(dnode, "prefix-length");
-
- vty_out(vty, " ip address %s/%u", ip, prefix_length);
-
- if (yang_dnode_exists(dnode, "label")) {
- const char *label = yang_dnode_get_string(dnode, "label");
- vty_out(vty, " label %s", label);
- }
-
- vty_out(vty, "\n");
-}
-
-#ifdef HAVE_NETLINK
-DEFPY_YANG (ip_address_peer,
- ip_address_peer_cmd,
- "[no] ip address A.B.C.D peer A.B.C.D/M [label LINE$label]",
- NO_STR
- "Interface Internet Protocol config commands\n"
- "Set the IP address of an interface\n"
- "Local IP (e.g. 10.0.0.1) for P-t-P address\n"
- "Specify P-t-P address\n"
- "Peer IP address (e.g. 10.0.0.1/8)\n"
- "Label of this address\n"
- "Label\n")
-#else
-DEFPY_YANG (ip_address_peer,
- ip_address_peer_cmd,
- "[no] ip address A.B.C.D peer A.B.C.D/M",
- NO_STR
- "Interface Internet Protocol config commands\n"
- "Set the IP address of an interface\n"
- "Local IP (e.g. 10.0.0.1) for P-t-P address\n"
- "Specify P-t-P address\n"
- "Peer IP address (e.g. 10.0.0.1/8)\n")
-#endif
-{
- char peer_ip[INET_ADDRSTRLEN + 3];
- char *peer_mask;
-
- if (no) {
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
- } else {
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
-#ifdef HAVE_NETLINK
- if (label)
- nb_cli_enqueue_change(vty, "./label", NB_OP_MODIFY,
- label);
- else
- nb_cli_enqueue_change(vty, "./label", NB_OP_DESTROY,
- NULL);
-#endif
- }
-
- strlcpy(peer_ip, peer_str, sizeof(peer_ip));
-
- peer_mask = strchr(peer_ip, '/');
- *peer_mask = 0;
- peer_mask++;
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/ipv4-p2p-addrs[ip='%s'][peer-ip='%s'][peer-prefix-length='%s']",
- address_str, peer_ip, peer_mask);
-}
-
-void lib_interface_zebra_ipv4_p2p_addrs_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *ip = yang_dnode_get_string(dnode, "ip");
- const char *peer_ip = yang_dnode_get_string(dnode, "peer-ip");
- uint8_t peer_prefix_length = yang_dnode_get_uint8(dnode,
- "peer-prefix-length");
-
- vty_out(vty, " ip address %s peer %s/%u", ip, peer_ip,
- peer_prefix_length);
-
- if (yang_dnode_exists(dnode, "label")) {
- const char *label = yang_dnode_get_string(dnode, "label");
- vty_out(vty, " label %s", label);
- }
-
- vty_out(vty, "\n");
-}
-
void if_ipv6_address_install(struct interface *ifp, struct prefix *prefix)
{
struct zebra_if *if_data;
@@ -4872,43 +3974,6 @@ void if_ipv6_address_uninstall(struct interface *ifp, struct prefix *prefix)
UNSET_FLAG(ifc->conf, ZEBRA_IFC_QUEUED);
}
-DEFPY_YANG (ipv6_address,
- ipv6_address_cmd,
- "[no] ipv6 address X:X::X:X/M",
- NO_STR
- "Interface IPv6 config commands\n"
- "Set the IP address of an interface\n"
- "IPv6 address (e.g. 3ffe:506::1/48)\n")
-{
- char ip[INET6_ADDRSTRLEN + 4];
- char *mask;
-
- if (no)
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
- else
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
-
- strlcpy(ip, address_str, sizeof(ip));
-
- mask = strchr(ip, '/');
- *mask = 0;
- mask++;
-
- return nb_cli_apply_changes(vty,
- "./frr-zebra:zebra/ipv6-addrs[ip='%s'][prefix-length='%s']",
- ip, mask);
-}
-
-void lib_interface_zebra_ipv6_addrs_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *ip = yang_dnode_get_string(dnode, "ip");
- uint8_t prefix_length = yang_dnode_get_uint8(dnode, "prefix-length");
-
- vty_out(vty, " ipv6 address %s/%u\n", ip, prefix_length);
-}
-
/* Allocate and initialize interface vector. */
void zebra_if_init(void)
{
@@ -4916,10 +3981,6 @@ void zebra_if_init(void)
hook_register_prio(if_add, 0, if_zebra_new_hook);
hook_register_prio(if_del, 0, if_zebra_delete_hook);
- /* Install configuration write function. */
- if_cmd_init_default();
- install_node(&link_params_node);
-
install_element(VIEW_NODE, &show_interface_cmd);
install_element(VIEW_NODE, &show_interface_vrf_all_cmd);
install_element(VIEW_NODE, &show_interface_name_vrf_cmd);
@@ -4927,39 +3988,4 @@ void zebra_if_init(void)
install_element(ENABLE_NODE, &show_interface_desc_cmd);
install_element(ENABLE_NODE, &show_interface_desc_vrf_all_cmd);
- install_element(INTERFACE_NODE, &multicast_new_cmd);
- install_element(INTERFACE_NODE, &multicast_cmd);
- install_element(INTERFACE_NODE, &no_multicast_cmd);
- install_element(INTERFACE_NODE, &mpls_cmd);
- install_element(INTERFACE_NODE, &linkdetect_cmd);
- install_element(INTERFACE_NODE, &shutdown_if_cmd);
- install_element(INTERFACE_NODE, &bandwidth_if_cmd);
- install_element(INTERFACE_NODE, &ip_address_cmd);
- install_element(INTERFACE_NODE, &ip_address_peer_cmd);
- install_element(INTERFACE_NODE, &ipv6_address_cmd);
- install_element(INTERFACE_NODE, &link_params_cmd);
- install_element(INTERFACE_NODE, &no_link_params_cmd);
- install_default(LINK_PARAMS_NODE);
- install_element(LINK_PARAMS_NODE, &link_params_enable_cmd);
- install_element(LINK_PARAMS_NODE, &no_link_params_enable_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_metric_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_maxbw_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_max_rsv_bw_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_unrsv_bw_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_admin_grp_cmd);
- install_element(LINK_PARAMS_NODE, &no_link_params_admin_grp_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_inter_as_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_delay_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_delay_var_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_pkt_loss_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_ava_bw_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_res_bw_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_use_bw_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_affinity_cmd);
- install_element(LINK_PARAMS_NODE, &link_params_affinity_mode_cmd);
- install_element(LINK_PARAMS_NODE, &no_link_params_affinity_mode_cmd);
- install_element(LINK_PARAMS_NODE, &exit_link_params_cmd);
-
- /* setup EVPN MH elements */
- zebra_evpn_interface_init();
}
diff --git a/zebra/main.c b/zebra/main.c
index 47aef46cac..606ecc7279 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -442,7 +442,7 @@ int main(int argc, char **argv)
zebra_vty_init();
mgmt_be_client = mgmt_be_client_create("zebra", NULL, 0,
zrouter.master);
- access_list_init();
+ access_list_init_new(true);
prefix_list_init();
rtadv_init();
diff --git a/zebra/router-id.c b/zebra/router-id.c
index 7af8596859..2f251a79e5 100644
--- a/zebra/router-id.c
+++ b/zebra/router-id.c
@@ -23,16 +23,12 @@
#include "table.h"
#include "rib.h"
#include "vrf.h"
-#include "northbound_cli.h"
#include "zebra/zebra_router.h"
#include "zebra/zapi_msg.h"
#include "zebra/zebra_vrf.h"
#include "zebra/router-id.h"
#include "zebra/redistribute.h"
-#include "zebra/zebra_nb.h"
-
-#include "router-id_clippy.c"
static struct connected *router_id_find_node(struct list *l,
struct connected *ifc)
@@ -245,181 +241,6 @@ void router_id_del_address(struct connected *ifc)
zsend_router_id_update(client, afi, &after, zvrf_id(zvrf));
}
-DEFPY_YANG (ip_router_id,
- ip_router_id_cmd,
- "ip router-id A.B.C.D$id vrf NAME",
- IP_STR
- "Manually set the router-id\n"
- "IP address to use for router-id\n"
- VRF_CMD_HELP_STR)
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_MODIFY,
- id_str);
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']", vrf);
-}
-
-ALIAS_YANG (ip_router_id,
- router_id_cmd,
- "router-id A.B.C.D$id vrf NAME",
- "Manually set the router-id\n"
- "IP address to use for router-id\n"
- VRF_CMD_HELP_STR);
-
-DEFPY_YANG (ipv6_router_id,
- ipv6_router_id_cmd,
- "ipv6 router-id X:X::X:X$id vrf NAME",
- IPV6_STR
- "Manually set the router-id\n"
- "IPv6 address to use for router-id\n"
- VRF_CMD_HELP_STR)
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
- NB_OP_MODIFY, id_str);
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']", vrf);
-}
-
-
-DEFPY_YANG (ip_router_id_in_vrf,
- ip_router_id_in_vrf_cmd,
- "ip router-id A.B.C.D$id",
- IP_STR
- "Manually set the router-id\n"
- "IP address to use for router-id\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_MODIFY,
- id_str);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-ALIAS_YANG (ip_router_id_in_vrf,
- router_id_in_vrf_cmd,
- "router-id A.B.C.D$id",
- "Manually set the router-id\n"
- "IP address to use for router-id\n");
-
-void lib_vrf_zebra_router_id_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *id = yang_dnode_get_string(dnode, NULL);
-
- zebra_vrf_indent_cli_write(vty, dnode);
-
- vty_out(vty, "ip router-id %s\n", id);
-}
-
-DEFPY_YANG (ipv6_router_id_in_vrf,
- ipv6_router_id_in_vrf_cmd,
- "ipv6 router-id X:X::X:X$id",
- IP6_STR
- "Manually set the IPv6 router-id\n"
- "IPV6 address to use for router-id\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
- NB_OP_MODIFY, id_str);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_vrf_zebra_ipv6_router_id_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *id = yang_dnode_get_string(dnode, NULL);
-
- zebra_vrf_indent_cli_write(vty, dnode);
-
- vty_out(vty, "ipv6 router-id %s\n", id);
-}
-
-DEFPY_YANG (no_ip_router_id,
- no_ip_router_id_cmd,
- "no ip router-id A.B.C.D vrf NAME",
- NO_STR
- IP_STR
- "Remove the manually configured router-id\n"
- "IP address to use for router-id\n"
- VRF_CMD_HELP_STR)
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_DESTROY,
- NULL);
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']", vrf);
-}
-
-ALIAS_YANG (no_ip_router_id,
- no_router_id_cmd,
- "no router-id A.B.C.D vrf NAME",
- NO_STR
- "Remove the manually configured router-id\n"
- "IP address to use for router-id\n"
- VRF_CMD_HELP_STR);
-
-DEFPY_YANG (no_ipv6_router_id,
- no_ipv6_router_id_cmd,
- "no ipv6 router-id X:X::X:X vrf NAME",
- NO_STR
- IPV6_STR
- "Remove the manually configured IPv6 router-id\n"
- "IPv6 address to use for router-id\n"
- VRF_CMD_HELP_STR)
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']", vrf);
-}
-
-DEFPY_YANG (no_ip_router_id_in_vrf,
- no_ip_router_id_in_vrf_cmd,
- "no ip router-id [A.B.C.D]",
- NO_STR
- IP_STR
- "Remove the manually configured router-id\n"
- "IP address to use for router-id\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_DESTROY,
- NULL);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-ALIAS_YANG (no_ip_router_id_in_vrf,
- no_router_id_in_vrf_cmd,
- "no router-id [A.B.C.D]",
- NO_STR
- "Remove the manually configured router-id\n"
- "IP address to use for router-id\n");
-
-DEFPY_YANG (no_ipv6_router_id_in_vrf,
- no_ipv6_router_id_in_vrf_cmd,
- "no ipv6 router-id [X:X::X:X]",
- NO_STR
- IP6_STR
- "Remove the manually configured IPv6 router-id\n"
- "IPv6 address to use for router-id\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
- NB_OP_DESTROY, NULL);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
DEFUN (show_ip_router_id,
show_ip_router_id_cmd,
"show [ip|ipv6] router-id [vrf NAME]",
@@ -486,24 +307,6 @@ static int router_id_v6_cmp(void *a, void *b)
void router_id_cmd_init(void)
{
- install_element(CONFIG_NODE, &ip_router_id_cmd);
- install_element(CONFIG_NODE, &router_id_cmd);
- install_element(CONFIG_NODE, &ipv6_router_id_cmd);
- install_element(CONFIG_NODE, &no_ip_router_id_cmd);
- install_element(CONFIG_NODE, &no_router_id_cmd);
- install_element(CONFIG_NODE, &ip_router_id_in_vrf_cmd);
- install_element(VRF_NODE, &ip_router_id_in_vrf_cmd);
- install_element(CONFIG_NODE, &router_id_in_vrf_cmd);
- install_element(VRF_NODE, &router_id_in_vrf_cmd);
- install_element(CONFIG_NODE, &ipv6_router_id_in_vrf_cmd);
- install_element(VRF_NODE, &ipv6_router_id_in_vrf_cmd);
- install_element(CONFIG_NODE, &no_ipv6_router_id_cmd);
- install_element(CONFIG_NODE, &no_ip_router_id_in_vrf_cmd);
- install_element(VRF_NODE, &no_ip_router_id_in_vrf_cmd);
- install_element(CONFIG_NODE, &no_router_id_in_vrf_cmd);
- install_element(VRF_NODE, &no_router_id_in_vrf_cmd);
- install_element(CONFIG_NODE, &no_ipv6_router_id_in_vrf_cmd);
- install_element(VRF_NODE, &no_ipv6_router_id_in_vrf_cmd);
install_element(VIEW_NODE, &show_ip_router_id_cmd);
}
diff --git a/zebra/rtadv.c b/zebra/rtadv.c
index 2e418afde3..6aca643bd8 100644
--- a/zebra/rtadv.c
+++ b/zebra/rtadv.c
@@ -21,7 +21,6 @@
#include "vrf.h"
#include "ns.h"
#include "lib_errors.h"
-#include "northbound_cli.h"
#include "zebra/interface.h"
#include "zebra/rtadv.h"
@@ -31,7 +30,6 @@
#include "zebra/zebra_vrf.h"
#include "zebra/zebra_errors.h"
#include "zebra/zebra_router.h"
-#include "zebra/zebra_nb.h"
extern struct zebra_privs_t zserv_privs;
@@ -1550,562 +1548,6 @@ DEFPY(show_ipv6_nd_ra_if, show_ipv6_nd_ra_if_cmd,
return CMD_SUCCESS;
}
-DEFPY_YANG (ipv6_nd_ra_fast_retrans,
- ipv6_nd_ra_fast_retrans_cmd,
- "[no] ipv6 nd ra-fast-retrans",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Fast retransmit of RA packets\n")
-{
- if (no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/fast-retransmit",
- NB_OP_MODIFY, "false");
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/fast-retransmit",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- bool fast_retransmit = yang_dnode_get_bool(dnode, NULL);
-
- if (!fast_retransmit)
- vty_out(vty, " no ipv6 nd ra-fast-retrans\n");
- else if (show_defaults)
- vty_out(vty, " ipv6 nd ra-fast-retrans\n");
-}
-
-DEFPY_YANG (ipv6_nd_ra_hop_limit,
- ipv6_nd_ra_hop_limit_cmd,
- "[no] ipv6 nd ra-hop-limit ![(0-255)$hopcount]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Advertisement Hop Limit\n"
- "Advertisement Hop Limit in hops (default:64)\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/cur-hop-limit",
- NB_OP_MODIFY, hopcount_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/cur-hop-limit",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint8_t hop_limit = yang_dnode_get_uint8(dnode, NULL);
-
- vty_out(vty, " ipv6 nd ra-hop-limit %u\n", hop_limit);
-}
-
-DEFPY_YANG (ipv6_nd_ra_retrans_interval,
- ipv6_nd_ra_retrans_interval_cmd,
- "[no] ipv6 nd ra-retrans-interval ![(0-4294967295)$interval]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Advertisement Retransmit Interval\n"
- "Advertisement Retransmit Interval in msec\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/retrans-timer",
- NB_OP_MODIFY, interval_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/retrans-timer",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_retrans_timer_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint32_t retrans_timer = yang_dnode_get_uint32(dnode, NULL);
-
- vty_out(vty, " ipv6 nd ra-retrans-interval %u\n", retrans_timer);
-}
-
-DEFPY_YANG (ipv6_nd_suppress_ra,
- ipv6_nd_suppress_ra_cmd,
- "[no] ipv6 nd suppress-ra",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Suppress Router Advertisement\n")
-{
- if (no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/send-advertisements",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/send-advertisements",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_send_advertisements_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- bool send_advertisements = yang_dnode_get_bool(dnode, NULL);
-
- if (send_advertisements)
- vty_out(vty, " no ipv6 nd suppress-ra\n");
- else if (show_defaults)
- vty_out(vty, " ipv6 nd suppress-ra\n");
-}
-
-DEFPY_YANG (ipv6_nd_ra_interval,
- ipv6_nd_ra_interval_cmd,
- "[no] ipv6 nd ra-interval ![<(1-1800)$sec|msec (70-1800000)$msec>]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Router Advertisement interval\n"
- "Router Advertisement interval in seconds\n"
- "Router Advertisement interval in milliseconds\n"
- "Router Advertisement interval in milliseconds\n")
-{
- char value[YANG_VALUE_MAXLEN];
-
- if (!no) {
- if (sec)
- snprintf(value, sizeof(value), "%lu", sec * 1000);
- else
- snprintf(value, sizeof(value), "%lu", msec);
-
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/max-rtr-adv-interval",
- NB_OP_MODIFY, value);
- } else {
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/max-rtr-adv-interval",
- NB_OP_DESTROY, NULL);
- }
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint32_t max_rtr_adv_interval = yang_dnode_get_uint32(dnode, NULL);
-
- if (max_rtr_adv_interval % 1000)
- vty_out(vty, " ipv6 nd ra-interval msec %u\n",
- max_rtr_adv_interval);
- else
- vty_out(vty, " ipv6 nd ra-interval %u\n",
- max_rtr_adv_interval / 1000);
-}
-
-DEFPY_YANG (ipv6_nd_ra_lifetime,
- ipv6_nd_ra_lifetime_cmd,
- "[no] ipv6 nd ra-lifetime ![(0-9000)$lifetime]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Router lifetime\n"
- "Router lifetime in seconds (0 stands for a non-default gw)\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/default-lifetime",
- NB_OP_MODIFY, lifetime_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/default-lifetime",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_default_lifetime_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint16_t default_lifetime = yang_dnode_get_uint16(dnode, NULL);
-
- vty_out(vty, " ipv6 nd ra-lifetime %u\n", default_lifetime);
-}
-
-DEFPY_YANG (ipv6_nd_reachable_time,
- ipv6_nd_reachable_time_cmd,
- "[no] ipv6 nd reachable-time ![(1-3600000)$msec]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Reachable time\n"
- "Reachable time in milliseconds\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/reachable-time",
- NB_OP_MODIFY, msec_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/reachable-time",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_reachable_time_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint32_t reachable_time = yang_dnode_get_uint32(dnode, NULL);
-
- vty_out(vty, " ipv6 nd reachable-time %u\n", reachable_time);
-}
-
-DEFPY_YANG (ipv6_nd_homeagent_preference,
- ipv6_nd_homeagent_preference_cmd,
- "[no] ipv6 nd home-agent-preference ![(0-65535)$pref]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Home Agent preference\n"
- "preference value (default is 0, least preferred)\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference",
- NB_OP_MODIFY, pref_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint16_t home_agent_preference = yang_dnode_get_uint16(dnode, NULL);
-
- vty_out(vty, " ipv6 nd home-agent-preference %u\n",
- home_agent_preference);
-}
-
-DEFPY_YANG (ipv6_nd_homeagent_lifetime,
- ipv6_nd_homeagent_lifetime_cmd,
- "[no] ipv6 nd home-agent-lifetime ![(1-65520)$lifetime]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Home Agent lifetime\n"
- "Home Agent lifetime in seconds\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/home-agent-lifetime",
- NB_OP_MODIFY, lifetime_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/home-agent-lifetime",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint16_t home_agent_lifetime = yang_dnode_get_uint16(dnode, NULL);
-
- vty_out(vty, " ipv6 nd home-agent-lifetime %u\n", home_agent_lifetime);
-}
-
-DEFPY_YANG (ipv6_nd_managed_config_flag,
- ipv6_nd_managed_config_flag_cmd,
- "[no] ipv6 nd managed-config-flag",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Managed address configuration flag\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/managed-flag",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/managed-flag",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_managed_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- bool managed_flag = yang_dnode_get_bool(dnode, NULL);
-
- if (managed_flag)
- vty_out(vty, " ipv6 nd managed-config-flag\n");
- else if (show_defaults)
- vty_out(vty, " no ipv6 nd managed-config-flag\n");
-}
-
-DEFPY_YANG (ipv6_nd_homeagent_config_flag,
- ipv6_nd_homeagent_config_flag_cmd,
- "[no] ipv6 nd home-agent-config-flag",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Home Agent configuration flag\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/home-agent-flag",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/home-agent-flag",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- bool home_agent_flag = yang_dnode_get_bool(dnode, NULL);
-
- if (home_agent_flag)
- vty_out(vty, " ipv6 nd home-agent-config-flag\n");
- else if (show_defaults)
- vty_out(vty, " no ipv6 nd home-agent-config-flag\n");
-}
-
-DEFPY_YANG (ipv6_nd_adv_interval_config_option,
- ipv6_nd_adv_interval_config_option_cmd,
- "[no] ipv6 nd adv-interval-option",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Advertisement Interval Option\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/advertisement-interval-option",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/advertisement-interval-option",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- bool advertisement_interval_option = yang_dnode_get_bool(dnode, NULL);
-
- if (advertisement_interval_option)
- vty_out(vty, " ipv6 nd adv-interval-option\n");
- else if (show_defaults)
- vty_out(vty, " no ipv6 nd adv-interval-option\n");
-}
-
-DEFPY_YANG (ipv6_nd_other_config_flag,
- ipv6_nd_other_config_flag_cmd,
- "[no] ipv6 nd other-config-flag",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Other statefull configuration flag\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/other-config-flag",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/other-config-flag",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_other_config_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- bool other_config_flag = yang_dnode_get_bool(dnode, NULL);
-
- if (other_config_flag)
- vty_out(vty, " ipv6 nd other-config-flag\n");
- else if (show_defaults)
- vty_out(vty, " no ipv6 nd other-config-flag\n");
-}
-
-DEFPY_YANG (ipv6_nd_prefix,
- ipv6_nd_prefix_cmd,
- "[no] ipv6 nd prefix X:X::X:X/M$prefix [<(0-4294967295)|infinite>$valid <(0-4294967295)|infinite>$preferred] [{router-address$routeraddr|off-link$offlink|no-autoconfig$noautoconf}]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Prefix information\n"
- "IPv6 prefix\n"
- "Valid lifetime in seconds\n"
- "Infinite valid lifetime\n"
- "Preferred lifetime in seconds\n"
- "Infinite preferred lifetime\n"
- "Set Router Address flag\n"
- "Do not use prefix for onlink determination\n"
- "Do not use prefix for autoconfiguration\n")
-{
- if (!no) {
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- if (valid) {
- if (strmatch(valid, "infinite"))
- valid = "4294967295";
- nb_cli_enqueue_change(vty, "./valid-lifetime",
- NB_OP_MODIFY, valid);
- } else {
- nb_cli_enqueue_change(vty, "./valid-lifetime",
- NB_OP_DESTROY, NULL);
- }
- if (preferred) {
- if (strmatch(preferred, "infinite"))
- preferred = "4294967295";
- nb_cli_enqueue_change(vty, "./preferred-lifetime",
- NB_OP_MODIFY, preferred);
- } else {
- nb_cli_enqueue_change(vty, "./preferred-lifetime",
- NB_OP_DESTROY, NULL);
- }
- if (routeraddr)
- nb_cli_enqueue_change(vty, "./router-address-flag",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty, "./router-address-flag",
- NB_OP_DESTROY, NULL);
- if (offlink)
- nb_cli_enqueue_change(vty, "./on-link-flag",
- NB_OP_MODIFY, "false");
- else
- nb_cli_enqueue_change(vty, "./on-link-flag",
- NB_OP_DESTROY, NULL);
- if (noautoconf)
- nb_cli_enqueue_change(vty, "./autonomous-flag",
- NB_OP_MODIFY, "false");
- else
- nb_cli_enqueue_change(vty, "./autonomous-flag",
- NB_OP_DESTROY, NULL);
- } else {
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
- }
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/prefix-list/prefix[prefix-spec='%s']",
- prefix_str);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- const char *prefix = yang_dnode_get_string(dnode, "prefix-spec");
- struct lyd_node *valid = yang_dnode_get(dnode, "valid-lifetime");
- struct lyd_node *preferred = yang_dnode_get(dnode, "preferred-lifetime");
- bool router_address_flag = yang_dnode_get_bool(dnode,
- "router-address-flag");
- bool on_link_flag = yang_dnode_get_bool(dnode, "on-link-flag");
- bool autonomous_flag = yang_dnode_get_bool(dnode, "autonomous-flag");
-
- vty_out(vty, " ipv6 nd prefix %s", prefix);
-
- if (!yang_dnode_is_default(valid, NULL) ||
- !yang_dnode_is_default(preferred, NULL) || show_defaults) {
- uint32_t valid_lifetime = yang_dnode_get_uint32(valid, NULL);
- uint32_t preferred_lifetime = yang_dnode_get_uint32(preferred,
- NULL);
-
- if (valid_lifetime == UINT32_MAX)
- vty_out(vty, " infinite");
- else
- vty_out(vty, " %u", valid_lifetime);
- if (preferred_lifetime == UINT32_MAX)
- vty_out(vty, " infinite");
- else
- vty_out(vty, " %u", preferred_lifetime);
- }
-
- if (!on_link_flag)
- vty_out(vty, " off-link");
-
- if (!autonomous_flag)
- vty_out(vty, " no-autoconfig");
-
- if (router_address_flag)
- vty_out(vty, " router-address");
-
- vty_out(vty, "\n");
-}
-
-DEFPY_YANG (ipv6_nd_router_preference,
- ipv6_nd_router_preference_cmd,
- "[no] ipv6 nd router-preference ![<high|medium|low>$pref]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Default router preference\n"
- "High default router preference\n"
- "Medium default router preference (default)\n"
- "Low default router preference\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/default-router-preference",
- NB_OP_MODIFY, pref);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/default-router-preference",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_default_router_preference_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- const char *default_router_preference = yang_dnode_get_string(dnode,
- NULL);
-
- vty_out(vty, " ipv6 nd router-preference %s\n",
- default_router_preference);
-}
-
-DEFPY_YANG (ipv6_nd_mtu,
- ipv6_nd_mtu_cmd,
- "[no] ipv6 nd mtu ![(1-65535)]",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Advertised MTU\n"
- "MTU in bytes\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/link-mtu",
- NB_OP_MODIFY, mtu_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/link-mtu",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_link_mtu_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint16_t link_mtu = yang_dnode_get_uint32(dnode, NULL);
-
- vty_out(vty, " ipv6 nd mtu %u\n", link_mtu);
-}
-
static struct rtadv_rdnss *rtadv_rdnss_new(void)
{
return XCALLOC(MTYPE_RTADV_RDNSS, sizeof(struct rtadv_rdnss));
@@ -2201,123 +1643,6 @@ int rtadv_dnssl_encode(uint8_t *out, const char *in)
return outp;
}
-DEFPY_YANG (ipv6_nd_rdnss,
- ipv6_nd_rdnss_cmd,
- "[no] ipv6 nd rdnss X:X::X:X$addr [<(0-4294967295)|infinite>]$lifetime",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "Recursive DNS server information\n"
- "IPv6 address\n"
- "Valid lifetime in seconds\n"
- "Infinite valid lifetime\n")
-{
- if (!no) {
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- if (lifetime) {
- if (strmatch(lifetime, "infinite"))
- lifetime = "4294967295";
- nb_cli_enqueue_change(vty, "./lifetime", NB_OP_MODIFY,
- lifetime);
- } else {
- nb_cli_enqueue_change(vty, "./lifetime", NB_OP_DESTROY,
- NULL);
- }
- } else {
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
- }
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/rdnss/rdnss-address[address='%s']",
- addr_str);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- const char *address = yang_dnode_get_string(dnode, "address");
-
- vty_out(vty, " ipv6 nd rdnss %s", address);
-
- if (yang_dnode_exists(dnode, "lifetime")) {
- uint32_t lifetime = yang_dnode_get_uint32(dnode, "lifetime");
-
- if (lifetime == UINT32_MAX)
- vty_out(vty, " infinite");
- else
- vty_out(vty, " %u", lifetime);
- }
-
- vty_out(vty, "\n");
-}
-
-DEFPY_YANG (ipv6_nd_dnssl,
- ipv6_nd_dnssl_cmd,
- "[no] ipv6 nd dnssl SUFFIX [<(0-4294967295)|infinite>]$lifetime",
- NO_STR
- "Interface IPv6 config commands\n"
- "Neighbor discovery\n"
- "DNS search list information\n"
- "Domain name suffix\n"
- "Valid lifetime in seconds\n"
- "Infinite valid lifetime\n")
-{
- struct rtadv_dnssl dnssl;
- size_t len;
-
- len = strlcpy(dnssl.name, suffix, sizeof(dnssl.name));
- if (len == 0 || len >= sizeof(dnssl.name)) {
- vty_out(vty, "Malformed DNS search domain\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (dnssl.name[len - 1] == '.') {
- /*
- * Allow, but don't require, a trailing dot signifying the root
- * zone. Canonicalize by cutting it off if present.
- */
- dnssl.name[len - 1] = '\0';
- len--;
- }
-
- if (!no) {
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- if (lifetime) {
- if (strmatch(lifetime, "infinite"))
- lifetime = "4294967295";
- nb_cli_enqueue_change(vty, "./lifetime", NB_OP_MODIFY,
- lifetime);
- } else {
- nb_cli_enqueue_change(vty, "./lifetime", NB_OP_DESTROY,
- NULL);
- }
- } else {
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
- }
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/ipv6-router-advertisements/dnssl/dnssl-domain[domain='%s']",
- dnssl.name);
-}
-
-void lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- const char *domain = yang_dnode_get_string(dnode, "domain");
-
- vty_out(vty, " ipv6 nd dnssl %s", domain);
-
- if (yang_dnode_exists(dnode, "lifetime")) {
- uint32_t lifetime = yang_dnode_get_uint32(dnode, "lifetime");
-
- if (lifetime == UINT32_MAX)
- vty_out(vty, " infinite");
- else
- vty_out(vty, " %u", lifetime);
- }
-
- vty_out(vty, "\n");
-}
-
/* Dump interface ND information to vty. */
static int nd_dump_vty(struct vty *vty, struct interface *ifp)
{
@@ -2535,25 +1860,6 @@ void rtadv_cmd_init(void)
hook_register(zebra_if_extra_info, nd_dump_vty);
install_element(VIEW_NODE, &show_ipv6_nd_ra_if_cmd);
-
- install_element(INTERFACE_NODE, &ipv6_nd_ra_fast_retrans_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_ra_retrans_interval_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_ra_hop_limit_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_suppress_ra_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_ra_interval_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_ra_lifetime_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_reachable_time_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_managed_config_flag_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_other_config_flag_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_homeagent_config_flag_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_homeagent_preference_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_homeagent_lifetime_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_adv_interval_config_option_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_prefix_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_router_preference_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_mtu_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_rdnss_cmd);
- install_element(INTERFACE_NODE, &ipv6_nd_dnssl_cmd);
}
static int if_join_all_router(int sock, struct interface *ifp)
diff --git a/zebra/subdir.am b/zebra/subdir.am
index ad1bcee695..d9c8d9045e 100644
--- a/zebra/subdir.am
+++ b/zebra/subdir.am
@@ -118,7 +118,6 @@ clippy_scan += \
zebra/debug.c \
zebra/interface.c \
zebra/rtadv.c \
- zebra/zebra_evpn_mh.c \
zebra/zebra_mlag_vty.c \
zebra/zebra_routemap.c \
zebra/zebra_vty.c \
@@ -126,7 +125,7 @@ clippy_scan += \
zebra/zebra_vrf.c \
zebra/dpdk/zebra_dplane_dpdk_vty.c \
zebra/label_manager.c \
- zebra/router-id.c \
+ zebra/zebra_cli.c \
# end
noinst_HEADERS += \
diff --git a/zebra/zebra_cli.c b/zebra/zebra_cli.c
new file mode 100644
index 0000000000..1d98c27828
--- /dev/null
+++ b/zebra/zebra_cli.c
@@ -0,0 +1,2934 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "command.h"
+#include "defaults.h"
+#include "northbound_cli.h"
+#include "vrf.h"
+
+#include "zebra_cli.h"
+#include "zebra/zebra_cli_clippy.c"
+
+#define EVPN_MH_VTY_STR "Multihoming\n"
+
+FRR_CFG_DEFAULT_BOOL(ZEBRA_IP_NHT_RESOLVE_VIA_DEFAULT,
+ { .val_bool = true, .match_profile = "traditional", },
+ { .val_bool = false },
+);
+
+#if HAVE_BFDD == 0
+DEFPY_YANG (zebra_ptm_enable,
+ 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,
+ no ? "false" : "true");
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static 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");
+}
+#endif
+
+DEFPY_YANG (zebra_route_map_timer,
+ zebra_route_map_timer_cmd,
+ "[no] zebra route-map delay-timer ![(0-600)$delay]",
+ NO_STR
+ 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")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "/frr-zebra:zebra/route-map-delay",
+ NB_OP_MODIFY, delay_str);
+ else
+ nb_cli_enqueue_change(vty, "/frr-zebra:zebra/route-map-delay",
+ NB_OP_DESTROY, NULL);
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static 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 (multicast_new,
+ multicast_new_cmd,
+ "[no] multicast <enable$on|disable$off>",
+ NO_STR
+ "Control multicast flag on interface\n"
+ "Set multicast flag on interface\n"
+ "Unset multicast flag on interface\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast",
+ NB_OP_CREATE, on ? "true" : "false");
+ else
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast",
+ NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_multicast_cli_write(struct vty *vty,
+ const struct lyd_node *dnode,
+ bool show_defaults)
+{
+ bool multicast = yang_dnode_get_bool(dnode, NULL);
+
+ if (multicast)
+ vty_out(vty, " multicast enable\n");
+ else
+ vty_out(vty, " multicast disable\n");
+}
+
+/* Deprecated multicast commands */
+
+DEFPY_YANG_HIDDEN (multicast,
+ multicast_cmd,
+ "[no] multicast",
+ NO_STR
+ "Set multicast flag to interface\n")
+{
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/multicast",
+ NB_OP_CREATE, no ? "false" : "true");
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG (mpls,
+ mpls_cmd,
+ "[no] mpls <enable$on|disable$off>",
+ NO_STR
+ MPLS_STR
+ "Set mpls to be on for the interface\n"
+ "Set mpls to be off for the interface\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/mpls",
+ NB_OP_CREATE, on ? "true" : "false");
+ else
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/mpls",
+ NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_mpls_cli_write(struct vty *vty,
+ const struct lyd_node *dnode,
+ bool show_defaults)
+{
+ bool mpls = yang_dnode_get_bool(dnode, NULL);
+
+ if (mpls)
+ vty_out(vty, " mpls enable\n");
+ else
+ vty_out(vty, " mpls disable\n");
+}
+
+DEFPY_YANG (linkdetect,
+ linkdetect_cmd,
+ "[no] link-detect",
+ NO_STR
+ "Enable link detection on interface\n")
+{
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-detect",
+ NB_OP_CREATE, no ? "false" : "true");
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_detect_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ bool link_detect = yang_dnode_get_bool(dnode, NULL);
+
+ if (!link_detect)
+ vty_out(vty, " no link-detect\n");
+ else if (show_defaults)
+ vty_out(vty, " link-detect\n");
+}
+
+DEFPY_YANG (shutdown_if,
+ shutdown_if_cmd,
+ "[no] shutdown",
+ NO_STR
+ "Shutdown the selected interface\n")
+{
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/enabled", NB_OP_CREATE,
+ no ? "true" : "false");
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_enabled_cli_write(struct vty *vty,
+ const struct lyd_node *dnode,
+ bool show_defaults)
+{
+ bool enabled = yang_dnode_get_bool(dnode, NULL);
+
+ if (!enabled)
+ vty_out(vty, " shutdown\n");
+ else if (show_defaults)
+ vty_out(vty, " no shutdown\n");
+}
+
+DEFPY_YANG (bandwidth_if,
+ bandwidth_if_cmd,
+ "[no] bandwidth ![(1-100000)]$bw",
+ NO_STR
+ "Set bandwidth informational parameter\n"
+ "Bandwidth in megabits\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/bandwidth",
+ NB_OP_CREATE, bw_str);
+ else
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/bandwidth",
+ NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_bandwidth_cli_write(struct vty *vty,
+ const struct lyd_node *dnode,
+ bool show_defaults)
+{
+ uint32_t bandwidth = yang_dnode_get_uint32(dnode, NULL);
+
+ vty_out(vty, " bandwidth %u\n", bandwidth);
+}
+
+DEFUN_YANG_NOSH (link_params,
+ link_params_cmd,
+ "link-params",
+ LINK_PARAMS_STR)
+{
+ int ret;
+
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-params",
+ NB_OP_CREATE, NULL);
+
+ ret = nb_cli_apply_changes(vty, NULL);
+ if (ret == CMD_SUCCESS) {
+ char xpath[XPATH_MAXLEN];
+
+ snprintf(xpath, sizeof(xpath), "%s/frr-zebra:zebra/link-params",
+ VTY_CURR_XPATH);
+ VTY_PUSH_XPATH(LINK_PARAMS_NODE, xpath);
+ }
+
+ return ret;
+}
+
+DEFUN_NOSH (exit_link_params,
+ exit_link_params_cmd,
+ "exit-link-params",
+ "Exit from Link Params configuration mode\n")
+{
+ cmd_exit(vty);
+ return CMD_SUCCESS;
+}
+
+static void lib_interface_zebra_link_params_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ vty_out(vty, " link-params\n");
+}
+
+static void
+lib_interface_zebra_link_params_cli_write_end(struct vty *vty,
+ const struct lyd_node *dnode)
+{
+ vty_out(vty, " exit-link-params\n");
+}
+
+DEFUN_YANG (no_link_params,
+ no_link_params_cmd,
+ "no link-params",
+ NO_STR
+ LINK_PARAMS_STR)
+{
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-params", NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+/* [no] enable is deprecated, link-params is enabled when entering the node. */
+
+DEFUN_YANG_HIDDEN (link_params_enable,
+ link_params_enable_cmd,
+ "enable",
+ "Activate link parameters on this interface\n")
+{
+ vty_out(vty, "This command is deprecated. Link parameters are activated when \"link-params\" node is entered.\n");
+
+ return CMD_SUCCESS;
+}
+
+DEFUN_YANG_NOSH (no_link_params_enable,
+ no_link_params_enable_cmd,
+ "no enable",
+ NO_STR
+ "Disable link parameters on this interface\n")
+{
+ int ret;
+
+ vty_out(vty, "This command is deprecated. To disable link parameters use \"no link-params\" in the interface node.\n");
+
+ nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
+
+ ret = nb_cli_apply_changes(vty, NULL);
+ if (ret == CMD_SUCCESS)
+ cmd_exit(vty);
+
+ return ret;
+}
+
+DEFPY_YANG (link_params_metric,
+ link_params_metric_cmd,
+ "[no] metric ![(0-4294967295)]$metric",
+ NO_STR
+ "Link metric for MPLS-TE purpose\n"
+ "Metric value in decimal\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./metric", NB_OP_MODIFY, metric_str);
+ else
+ nb_cli_enqueue_change(vty, "./metric", NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_metric_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ uint32_t metric = yang_dnode_get_uint32(dnode, NULL);
+
+ vty_out(vty, " metric %u\n", metric);
+}
+
+DEFPY_YANG (link_params_maxbw,
+ link_params_maxbw_cmd,
+ "max-bw BANDWIDTH",
+ "Maximum bandwidth that can be used\n"
+ "Bytes/second (IEEE floating point format)\n")
+{
+ char value[YANG_VALUE_MAXLEN];
+ float bw;
+
+ if (sscanf(bandwidth, "%g", &bw) != 1) {
+ vty_out(vty, "Invalid bandwidth value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ snprintf(value, sizeof(value), "%a", bw);
+
+ nb_cli_enqueue_change(vty, "./max-bandwidth", NB_OP_MODIFY, value);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_max_bandwidth_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ float max_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode, NULL);
+
+ vty_out(vty, " max-bw %g\n", max_bandwidth);
+}
+
+DEFPY_YANG (link_params_max_rsv_bw,
+ link_params_max_rsv_bw_cmd,
+ "max-rsv-bw BANDWIDTH",
+ "Maximum bandwidth that may be reserved\n"
+ "Bytes/second (IEEE floating point format)\n")
+{
+ char value[YANG_VALUE_MAXLEN];
+ float bw;
+
+ if (sscanf(bandwidth, "%g", &bw) != 1) {
+ vty_out(vty, "Invalid bandwidth value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ snprintf(value, sizeof(value), "%a", bw);
+
+ nb_cli_enqueue_change(vty, "./max-reservable-bandwidth", NB_OP_MODIFY,
+ value);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_max_reservable_bandwidth_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ float max_reservable_bandwidth =
+ yang_dnode_get_bandwidth_ieee_float32(dnode, NULL);
+
+ vty_out(vty, " max-rsv-bw %g\n", max_reservable_bandwidth);
+}
+
+DEFPY_YANG (link_params_unrsv_bw,
+ link_params_unrsv_bw_cmd,
+ "unrsv-bw (0-7)$priority BANDWIDTH",
+ "Unreserved bandwidth at each priority level\n"
+ "Priority\n"
+ "Bytes/second (IEEE floating point format)\n")
+{
+ char xpath[XPATH_MAXLEN];
+ char value[YANG_VALUE_MAXLEN];
+ float bw;
+
+ if (sscanf(bandwidth, "%g", &bw) != 1) {
+ vty_out(vty, "Invalid bandwidth value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ snprintf(xpath, sizeof(xpath),
+ "./unreserved-bandwidths/unreserved-bandwidth[priority='%s']/unreserved-bandwidth",
+ priority_str);
+ snprintf(value, sizeof(value), "%a", bw);
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, value);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void
+lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ uint8_t priority = yang_dnode_get_uint8(dnode, "priority");
+ float unreserved_bandwidth =
+ yang_dnode_get_bandwidth_ieee_float32(dnode,
+ "unreserved-bandwidth");
+
+ vty_out(vty, " unrsv-bw %u %g\n", priority, unreserved_bandwidth);
+}
+
+DEFPY_YANG (link_params_admin_grp,
+ link_params_admin_grp_cmd,
+ "[no] admin-grp ![BITPATTERN]",
+ NO_STR
+ "Administrative group membership\n"
+ "32-bit Hexadecimal value (e.g. 0xa1)\n")
+{
+ uint32_t value;
+ char value_str[YANG_VALUE_MAXLEN];
+
+ if (!no) {
+ if (bitpattern[0] != '0' || bitpattern[1] != 'x' ||
+ strlen(bitpattern) > 10) {
+ vty_out(vty, "Invalid bitpattern value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ sscanf(bitpattern, "%x", &value);
+ snprintf(value_str, sizeof(value_str), "%u", value);
+
+ nb_cli_enqueue_change(vty, "./legacy-admin-group", NB_OP_MODIFY,
+ value_str);
+ } else {
+ nb_cli_enqueue_change(vty, "./legacy-admin-group",
+ NB_OP_DESTROY, NULL);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_legacy_admin_group_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ vty_out(vty, " admin-grp %#x\n", yang_dnode_get_uint32(dnode, NULL));
+}
+
+/* RFC5392 & RFC5316: INTER-AS */
+DEFPY_YANG (link_params_inter_as,
+ link_params_inter_as_cmd,
+ "[no] neighbor ![A.B.C.D$ip as (1-4294967295)$as]",
+ NO_STR
+ "Configure remote ASBR information (Neighbor IP address and AS number)\n"
+ "Remote IP address in dot decimal A.B.C.D\n"
+ "Remote AS number\n"
+ "AS number in the range <1-4294967295>\n")
+{
+ if (!no) {
+ nb_cli_enqueue_change(vty, "./neighbor", NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./neighbor/remote-as", NB_OP_MODIFY,
+ as_str);
+ nb_cli_enqueue_change(vty, "./neighbor/ipv4-remote-id",
+ NB_OP_MODIFY, ip_str);
+ } else {
+ nb_cli_enqueue_change(vty, "./neighbor", NB_OP_DESTROY, NULL);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_neighbor_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ uint32_t remote_as = yang_dnode_get_uint32(dnode, "remote-as");
+ const char *ipv4_remote_id = yang_dnode_get_string(dnode,
+ "ipv4-remote-id");
+
+ vty_out(vty, " neighbor %s as %u\n", ipv4_remote_id, remote_as);
+}
+
+/* RFC7471 & RFC8570 */
+DEFPY_YANG (link_params_delay,
+ link_params_delay_cmd,
+ "[no] delay ![(0-16777215)$delay [min (0-16777215)$min max (0-16777215)$max]]",
+ NO_STR
+ "Unidirectional Average Link Delay\n"
+ "Average delay in micro-second as decimal (0...16777215)\n"
+ "Minimum delay\n"
+ "Minimum delay in micro-second as decimal (0...16777215)\n"
+ "Maximum delay\n"
+ "Maximum delay in micro-second as decimal (0...16777215)\n")
+{
+ if (!no) {
+ nb_cli_enqueue_change(vty, "./delay", NB_OP_MODIFY, delay_str);
+ if (min_str && max_str) {
+ nb_cli_enqueue_change(vty, "./min-max-delay",
+ NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./min-max-delay/delay-min",
+ NB_OP_MODIFY, min_str);
+ nb_cli_enqueue_change(vty, "./min-max-delay/delay-max",
+ NB_OP_MODIFY, max_str);
+ } else {
+ nb_cli_enqueue_change(vty, "./min-max-delay",
+ NB_OP_DESTROY, NULL);
+ }
+ } else {
+ nb_cli_enqueue_change(vty, "./delay", NB_OP_DESTROY, NULL);
+ nb_cli_enqueue_change(vty, "./min-max-delay", NB_OP_DESTROY,
+ NULL);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_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, " delay %u", delay);
+
+ if (yang_dnode_exists(dnode, "../min-max-delay")) {
+ uint32_t delay_min =
+ yang_dnode_get_uint32(dnode,
+ "../min-max-delay/delay-min");
+ uint32_t delay_max =
+ yang_dnode_get_uint32(dnode,
+ "../min-max-delay/delay-max");
+
+ vty_out(vty, " min %u max %u", delay_min, delay_max);
+ }
+
+ vty_out(vty, "\n");
+}
+
+DEFPY_YANG (link_params_delay_var,
+ link_params_delay_var_cmd,
+ "[no] delay-variation ![(0-16777215)$delay_var]",
+ NO_STR
+ "Unidirectional Link Delay Variation\n"
+ "delay variation in micro-second as decimal (0...16777215)\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./delay-variation", NB_OP_MODIFY,
+ delay_var_str);
+ else
+ nb_cli_enqueue_change(vty, "./delay-variation", NB_OP_DESTROY,
+ NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_delay_variation_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ uint32_t delay_variation = yang_dnode_get_uint32(dnode, NULL);
+
+ vty_out(vty, " delay-variation %u\n", delay_variation);
+}
+
+DEFPY_YANG(
+ link_params_pkt_loss, link_params_pkt_loss_cmd,
+ "[no] packet-loss ![PERCENTAGE]",
+ NO_STR
+ "Unidirectional Link Packet Loss\n"
+ "percentage of total traffic by 0.000003% step and less than 50.331642%\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./packet-loss", NB_OP_MODIFY,
+ percentage);
+ else
+ nb_cli_enqueue_change(vty, "./packet-loss", NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_packet_loss_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ double packet_loss = yang_dnode_get_dec64(dnode, NULL);
+
+ vty_out(vty, " packet-loss %lf\n", packet_loss);
+}
+
+DEFPY_YANG (link_params_res_bw,
+ link_params_res_bw_cmd,
+ "[no] res-bw ![BANDWIDTH]",
+ NO_STR
+ "Unidirectional Residual Bandwidth\n"
+ "Bytes/second (IEEE floating point format)\n")
+{
+ char value[YANG_VALUE_MAXLEN];
+ float bw;
+
+ if (!no) {
+ if (sscanf(bandwidth, "%g", &bw) != 1) {
+ vty_out(vty, "Invalid bandwidth value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ snprintf(value, sizeof(value), "%a", bw);
+
+ nb_cli_enqueue_change(vty, "./residual-bandwidth", NB_OP_MODIFY,
+ value);
+ } else {
+ nb_cli_enqueue_change(vty, "./residual-bandwidth",
+ NB_OP_DESTROY, NULL);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_residual_bandwidth_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ float residual_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode,
+ NULL);
+
+ vty_out(vty, " res-bw %g\n", residual_bandwidth);
+}
+
+DEFPY_YANG (link_params_ava_bw,
+ link_params_ava_bw_cmd,
+ "[no] ava-bw ![BANDWIDTH]",
+ NO_STR
+ "Unidirectional Available Bandwidth\n"
+ "Bytes/second (IEEE floating point format)\n")
+{
+ char value[YANG_VALUE_MAXLEN];
+ float bw;
+
+ if (!no) {
+ if (sscanf(bandwidth, "%g", &bw) != 1) {
+ vty_out(vty, "Invalid bandwidth value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ snprintf(value, sizeof(value), "%a", bw);
+
+ nb_cli_enqueue_change(vty, "./available-bandwidth",
+ NB_OP_MODIFY, value);
+ } else {
+ nb_cli_enqueue_change(vty, "./available-bandwidth",
+ NB_OP_DESTROY, NULL);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_available_bandwidth_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ float available_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode,
+ NULL);
+
+ vty_out(vty, " ava-bw %g\n", available_bandwidth);
+}
+
+DEFPY_YANG (link_params_use_bw,
+ link_params_use_bw_cmd,
+ "[no] use-bw ![BANDWIDTH]",
+ NO_STR
+ "Unidirectional Utilised Bandwidth\n"
+ "Bytes/second (IEEE floating point format)\n")
+{
+ char value[YANG_VALUE_MAXLEN];
+ float bw;
+
+ if (!no) {
+ if (sscanf(bandwidth, "%g", &bw) != 1) {
+ vty_out(vty, "Invalid bandwidth value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ snprintf(value, sizeof(value), "%a", bw);
+
+ nb_cli_enqueue_change(vty, "./utilized-bandwidth", NB_OP_MODIFY,
+ value);
+ } else {
+ nb_cli_enqueue_change(vty, "./utilized-bandwidth",
+ NB_OP_DESTROY, NULL);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_utilized_bandwidth_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ float utilized_bandwidth = yang_dnode_get_bandwidth_ieee_float32(dnode,
+ NULL);
+
+ vty_out(vty, " use-bw %g\n", utilized_bandwidth);
+}
+
+DEFPY_YANG (link_params_affinity,
+ link_params_affinity_cmd,
+ "[no] affinity NAME...",
+ NO_STR
+ "Interface affinities\n"
+ "Affinity names\n")
+{
+ char xpath[XPATH_MAXLEN];
+ int i;
+
+ for (i = no ? 2 : 1; i < argc; i++) {
+ snprintf(xpath, XPATH_MAXLEN, "./affinities/affinity[.='%s']",
+ argv[i]->arg);
+ nb_cli_enqueue_change(vty, xpath,
+ no ? NB_OP_DESTROY : NB_OP_CREATE, NULL);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static int ag_iter_cb(const struct lyd_node *dnode, void *arg)
+{
+ struct vty *vty = arg;
+
+ vty_out(vty, " %s", yang_dnode_get_string(dnode, NULL));
+ return YANG_ITER_CONTINUE;
+}
+
+static void lib_interface_zebra_link_params_affinities_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ vty_out(vty, " affinity");
+ yang_dnode_iterate(ag_iter_cb, vty, dnode, "affinity");
+ vty_out(vty, "\n");
+}
+
+DEFPY_YANG (link_params_affinity_mode,
+ link_params_affinity_mode_cmd,
+ "[no] affinity-mode ![<standard|extended|both>$mode]",
+ NO_STR
+ "Interface affinity mode\n"
+ "Standard Admin-Group only RFC3630,5305,5329\n"
+ "Extended Admin-Group only RFC7308 (default)\n"
+ "Standard and extended Admin-Group format\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./affinity-mode", NB_OP_MODIFY,
+ mode);
+ else
+ nb_cli_enqueue_change(vty, "./affinity-mode", NB_OP_DESTROY,
+ NULL);
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static void lib_interface_zebra_link_params_affinity_mode_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ enum affinity_mode affinity_mode = yang_dnode_get_enum(dnode, NULL);
+
+ if (affinity_mode == AFFINITY_MODE_STANDARD)
+ vty_out(vty, " affinity-mode standard\n");
+ else if (affinity_mode == AFFINITY_MODE_BOTH)
+ vty_out(vty, " affinity-mode both\n");
+ else if (affinity_mode == AFFINITY_MODE_EXTENDED && show_defaults)
+ vty_out(vty, " affinity-mode extended\n");
+}
+
+#ifdef HAVE_NETLINK
+DEFPY_YANG (ip_address,
+ ip_address_cmd,
+ "[no] ip address A.B.C.D/M [label LINE$label]",
+ NO_STR
+ "Interface Internet Protocol config commands\n"
+ "Set the IP address of an interface\n"
+ "IP address (e.g. 10.0.0.1/8)\n"
+ "Label of this address\n"
+ "Label\n")
+#else
+DEFPY_YANG (ip_address,
+ ip_address_cmd,
+ "[no] ip address A.B.C.D/M",
+ NO_STR
+ "Interface Internet Protocol config commands\n"
+ "Set the IP address of an interface\n"
+ "IP address (e.g. 10.0.0.1/8)\n")
+#endif
+{
+ char ip[INET_ADDRSTRLEN + 3];
+ char *mask;
+
+ if (no) {
+ nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
+ } else {
+ nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+#ifdef HAVE_NETLINK
+ if (label)
+ nb_cli_enqueue_change(vty, "./label", NB_OP_MODIFY,
+ label);
+ else
+ nb_cli_enqueue_change(vty, "./label", NB_OP_DESTROY,
+ NULL);
+#endif
+ }
+
+ strlcpy(ip, address_str, sizeof(ip));
+
+ mask = strchr(ip, '/');
+ *mask = 0;
+ mask++;
+
+ return nb_cli_apply_changes(vty,
+ "./frr-zebra:zebra/ipv4-addrs[ip='%s'][prefix-length='%s']",
+ ip, mask);
+}
+
+static void lib_interface_zebra_ipv4_addrs_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ const char *ip = yang_dnode_get_string(dnode, "ip");
+ uint8_t prefix_length = yang_dnode_get_uint8(dnode, "prefix-length");
+
+ vty_out(vty, " ip address %s/%u", ip, prefix_length);
+
+ if (yang_dnode_exists(dnode, "label")) {
+ const char *label = yang_dnode_get_string(dnode, "label");
+
+ vty_out(vty, " label %s", label);
+ }
+
+ vty_out(vty, "\n");
+}
+
+#ifdef HAVE_NETLINK
+DEFPY_YANG (ip_address_peer,
+ ip_address_peer_cmd,
+ "[no] ip address A.B.C.D peer A.B.C.D/M [label LINE$label]",
+ NO_STR
+ "Interface Internet Protocol config commands\n"
+ "Set the IP address of an interface\n"
+ "Local IP (e.g. 10.0.0.1) for P-t-P address\n"
+ "Specify P-t-P address\n"
+ "Peer IP address (e.g. 10.0.0.1/8)\n"
+ "Label of this address\n"
+ "Label\n")
+#else
+DEFPY_YANG (ip_address_peer,
+ ip_address_peer_cmd,
+ "[no] ip address A.B.C.D peer A.B.C.D/M",
+ NO_STR
+ "Interface Internet Protocol config commands\n"
+ "Set the IP address of an interface\n"
+ "Local IP (e.g. 10.0.0.1) for P-t-P address\n"
+ "Specify P-t-P address\n"
+ "Peer IP address (e.g. 10.0.0.1/8)\n")
+#endif
+{
+ char peer_ip[INET_ADDRSTRLEN + 3];
+ char *peer_mask;
+
+ if (no) {
+ nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
+ } else {
+ nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+#ifdef HAVE_NETLINK
+ if (label)
+ nb_cli_enqueue_change(vty, "./label", NB_OP_MODIFY,
+ label);
+ else
+ nb_cli_enqueue_change(vty, "./label", NB_OP_DESTROY,
+ NULL);
+#endif
+ }
+
+ strlcpy(peer_ip, peer_str, sizeof(peer_ip));
+
+ peer_mask = strchr(peer_ip, '/');
+ *peer_mask = 0;
+ peer_mask++;
+
+ return nb_cli_apply_changes(
+ vty,
+ "./frr-zebra:zebra/ipv4-p2p-addrs[ip='%s'][peer-ip='%s'][peer-prefix-length='%s']",
+ address_str, peer_ip, peer_mask);
+}
+
+static void lib_interface_zebra_ipv4_p2p_addrs_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ const char *ip = yang_dnode_get_string(dnode, "ip");
+ const char *peer_ip = yang_dnode_get_string(dnode, "peer-ip");
+ uint8_t peer_prefix_length = yang_dnode_get_uint8(dnode,
+ "peer-prefix-length");
+
+ vty_out(vty, " ip address %s peer %s/%u", ip, peer_ip,
+ peer_prefix_length);
+
+ if (yang_dnode_exists(dnode, "label")) {
+ const char *label = yang_dnode_get_string(dnode, "label");
+
+ vty_out(vty, " label %s", label);
+ }
+
+ vty_out(vty, "\n");
+}
+
+DEFPY_YANG (ipv6_address,
+ ipv6_address_cmd,
+ "[no] ipv6 address X:X::X:X/M",
+ NO_STR
+ "Interface IPv6 config commands\n"
+ "Set the IP address of an interface\n"
+ "IPv6 address (e.g. 3ffe:506::1/48)\n")
+{
+ char ip[INET6_ADDRSTRLEN + 4];
+ char *mask;
+
+ if (no)
+ nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
+ else
+ nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+
+ strlcpy(ip, address_str, sizeof(ip));
+
+ mask = strchr(ip, '/');
+ *mask = 0;
+ mask++;
+
+ return nb_cli_apply_changes(vty,
+ "./frr-zebra:zebra/ipv6-addrs[ip='%s'][prefix-length='%s']",
+ ip, mask);
+}
+
+static void lib_interface_zebra_ipv6_addrs_cli_write(
+ struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
+{
+ const char *ip = yang_dnode_get_string(dnode, "ip");
+ uint8_t prefix_length = yang_dnode_get_uint8(dnode, "prefix-length");
+
+ vty_out(vty, " ipv6 address %s/%u\n", ip, prefix_length);
+}
+
+/* CLI for setting an ES in bypass mode */
+DEFPY_YANG_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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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");
+}
+
+#if defined(HAVE_RTADV)
+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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+static 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);
+}
+
+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);
+}
+
+static 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")
+{
+ char domain[254];
+ size_t len;
+
+ len = strlcpy(domain, suffix, sizeof(domain));
+ if (len == 0 || len >= sizeof(domain)) {
+ vty_out(vty, "Malformed DNS search domain\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (domain[len - 1] == '.') {
+ /*
+ * Allow, but don't require, a trailing dot signifying the root
+ * zone. Canonicalize by cutting it off if present.
+ */
+ domain[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']",
+ domain);
+}
+
+static 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");
+}
+#endif /* HAVE_RTADV */
+
+#if HAVE_BFDD == 0
+DEFPY_YANG (zebra_ptm_enable_if,
+ zebra_ptm_enable_if_cmd,
+ "[no] ptm-enable",
+ NO_STR
+ "Enable neighbor check with specified topology\n")
+{
+ if (no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ptm-enable",
+ NB_OP_MODIFY, "false");
+ else
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ptm-enable",
+ NB_OP_DESTROY, NULL);
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+static 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");
+}
+#endif /* HAVE_BFDD == 0 */
+
+/*
+ * VRF commands
+ */
+
+static 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, " ");
+}
+
+DEFPY_YANG (ip_router_id,
+ ip_router_id_cmd,
+ "[no] ip router-id A.B.C.D$id vrf NAME",
+ NO_STR
+ IP_STR
+ "Manually set the router-id\n"
+ "IP address to use for router-id\n"
+ VRF_CMD_HELP_STR)
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_MODIFY,
+ id_str);
+ else
+ 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 (ip_router_id,
+ router_id_cmd,
+ "[no] router-id A.B.C.D$id vrf NAME",
+ NO_STR
+ "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,
+ "[no] ipv6 router-id X:X::X:X$id vrf NAME",
+ NO_STR
+ IPV6_STR
+ "Manually set the router-id\n"
+ "IPv6 address to use for router-id\n"
+ VRF_CMD_HELP_STR)
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
+ NB_OP_MODIFY, id_str);
+ else
+ 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 (ip_router_id_in_vrf,
+ ip_router_id_in_vrf_cmd,
+ "[no] ip router-id ![A.B.C.D$id]",
+ NO_STR
+ IP_STR
+ "Manually set the router-id\n"
+ "IP address to use for router-id\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/router-id", NB_OP_MODIFY,
+ id_str);
+ else
+ 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 (ip_router_id_in_vrf,
+ router_id_in_vrf_cmd,
+ "[no] router-id ![A.B.C.D$id]",
+ NO_STR
+ "Manually set the router-id\n"
+ "IP address to use for router-id\n");
+
+DEFPY_YANG (ipv6_router_id_in_vrf,
+ ipv6_router_id_in_vrf_cmd,
+ "[no] ipv6 router-id ![X:X::X:X$id]",
+ NO_STR
+ IP6_STR
+ "Manually set the IPv6 router-id\n"
+ "IPV6 address to use for router-id\n")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-router-id",
+ NB_OP_MODIFY, id_str);
+ else
+ 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);
+}
+
+static 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);
+}
+
+static 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 (ip_protocol,
+ ip_protocol_cmd,
+ "[no] ip protocol " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
+ " $proto ![route-map ROUTE-MAP$rmap]",
+ NO_STR
+ 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")
+{
+ if (!no) {
+ nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
+ } else {
+ 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 (ipv6_protocol,
+ ipv6_protocol_cmd,
+ "[no] ipv6 protocol " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
+ " $proto ![route-map ROUTE-MAP$rmap]",
+ NO_STR
+ 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")
+{
+ if (!no) {
+ nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
+ } else {
+ 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);
+}
+
+static void lib_vrf_zebra_filter_protocol_cli_write(struct vty *vty,
+ const struct lyd_node *dnode,
+ bool show_defaults)
+{
+ const char *afi_safi = yang_dnode_get_string(dnode, "afi-safi");
+ const char *proto = yang_dnode_get_string(dnode, "protocol");
+ const char *rmap = yang_dnode_get_string(dnode, "route-map");
+ afi_t afi;
+ safi_t safi;
+
+ yang_afi_safi_identity2value(afi_safi, &afi, &safi);
+
+ if (safi != SAFI_UNICAST)
+ return;
+
+ zebra_vrf_indent_cli_write(vty, dnode);
+
+ if (afi == AFI_IP)
+ vty_out(vty, "ip protocol %s route-map %s\n", proto, rmap);
+ else
+ vty_out(vty, "ipv6 protocol %s route-map %s\n", proto, rmap);
+}
+
+DEFPY_YANG (ip_protocol_nht_rmap,
+ ip_protocol_nht_rmap_cmd,
+ "[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")
+{
+ if (!no) {
+ nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
+ } else {
+ 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 (ipv6_protocol_nht_rmap,
+ 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")
+{
+ if (!no) {
+ nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
+ } else {
+ 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);
+}
+
+static 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);
+}
+
+DEFPY_YANG (ip_nht_default_route,
+ 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, no ? "false" : "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 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 ");
+ }
+}
+
+DEFPY_YANG (ipv6_nht_default_route,
+ 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, no ? "false" : "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 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_YANG (vrf_netns,
+ vrf_netns_cmd,
+ "[no] netns ![NAME$netns_name]",
+ NO_STR
+ "Attach VRF to a Namespace\n"
+ "The file name in " NS_RUN_DIR ", or a full pathname\n")
+{
+ return CMD_SUCCESS;
+}
+
+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);
+}
+
+static 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);
+}
+
+DEFPY_YANG (vni_mapping,
+ 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")
+{
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", NB_OP_MODIFY,
+ vni_str);
+ else
+ 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_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);
+}
+
+static 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");
+}
+
+DEFPY_YANG(
+ match_ip_address_prefix_len, match_ip_address_prefix_len_cmd,
+ "match ip address prefix-len (0-32)$length",
+ MATCH_STR
+ IP_STR
+ "Match prefix length of IP address\n"
+ "Match prefix length of IP address\n"
+ "Prefix length\n")
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:ipv4-prefix-length']";
+ char xpath_value[XPATH_MAXLEN];
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ snprintf(
+ xpath_value, sizeof(xpath_value),
+ "%s/rmap-match-condition/frr-zebra-route-map:ipv4-prefix-length",
+ xpath);
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ no_match_ip_address_prefix_len, no_match_ip_address_prefix_len_cmd,
+ "no match ip address prefix-len [(0-32)]",
+ NO_STR
+ MATCH_STR
+ IP_STR
+ "Match prefix length of IP address\n"
+ "Match prefix length of IP address\n"
+ "Prefix length\n")
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:ipv4-prefix-length']";
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ match_ipv6_address_prefix_len, match_ipv6_address_prefix_len_cmd,
+ "match ipv6 address prefix-len (0-128)$length",
+ MATCH_STR
+ IPV6_STR
+ "Match prefix length of IPv6 address\n"
+ "Match prefix length of IPv6 address\n"
+ "Prefix length\n")
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:ipv6-prefix-length']";
+ char xpath_value[XPATH_MAXLEN];
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ snprintf(
+ xpath_value, sizeof(xpath_value),
+ "%s/rmap-match-condition/frr-zebra-route-map:ipv6-prefix-length",
+ xpath);
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ no_match_ipv6_address_prefix_len, no_match_ipv6_address_prefix_len_cmd,
+ "no match ipv6 address prefix-len [(0-128)]",
+ NO_STR
+ MATCH_STR
+ IPV6_STR
+ "Match prefix length of IPv6 address\n"
+ "Match prefix length of IPv6 address\n"
+ "Prefix length\n")
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:ipv6-prefix-length']";
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ match_ip_nexthop_prefix_len, match_ip_nexthop_prefix_len_cmd,
+ "match ip next-hop prefix-len (0-32)$length",
+ MATCH_STR
+ IP_STR
+ "Match prefixlen of nexthop IP address\n"
+ "Match prefixlen of given nexthop\n"
+ "Prefix length\n")
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:ipv4-next-hop-prefix-length']";
+ char xpath_value[XPATH_MAXLEN];
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ snprintf(
+ xpath_value, sizeof(xpath_value),
+ "%s/rmap-match-condition/frr-zebra-route-map:ipv4-prefix-length",
+ xpath);
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ no_match_ip_nexthop_prefix_len, no_match_ip_nexthop_prefix_len_cmd,
+ "no match ip next-hop prefix-len [(0-32)]",
+ NO_STR
+ MATCH_STR
+ IP_STR
+ "Match prefixlen of nexthop IP address\n"
+ "Match prefix length of nexthop\n"
+ "Prefix length\n")
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:ipv4-next-hop-prefix-length']";
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ match_source_protocol, match_source_protocol_cmd,
+ "match source-protocol " FRR_REDIST_STR_ZEBRA "$proto",
+ MATCH_STR
+ "Match protocol via which the route was learnt\n"
+ FRR_REDIST_HELP_STR_ZEBRA)
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:source-protocol']";
+ char xpath_value[XPATH_MAXLEN];
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ snprintf(xpath_value, sizeof(xpath_value),
+ "%s/rmap-match-condition/frr-zebra-route-map:source-protocol",
+ xpath);
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, proto);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ no_match_source_protocol, no_match_source_protocol_cmd,
+ "no match source-protocol [" FRR_REDIST_STR_ZEBRA "]",
+ NO_STR
+ MATCH_STR
+ "Match protocol via which the route was learnt\n"
+ FRR_REDIST_HELP_STR_ZEBRA)
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:source-protocol']";
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ match_source_instance, match_source_instance_cmd,
+ "match source-instance (0-255)$instance",
+ MATCH_STR
+ "Match the protocol's instance number\n"
+ "The instance number\n")
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:source-instance']";
+ char xpath_value[XPATH_MAXLEN];
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ snprintf(xpath_value, sizeof(xpath_value),
+ "%s/rmap-match-condition/frr-zebra-route-map:source-instance",
+ xpath);
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, instance_str);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ no_match_source_instance, no_match_source_instance_cmd,
+ "no match source-instance [(0-255)]",
+ NO_STR MATCH_STR
+ "Match the protocol's instance number\n"
+ "The instance number\n")
+{
+ const char *xpath =
+ "./match-condition[condition='frr-zebra-route-map:source-instance']";
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+/* set functions */
+
+DEFPY_YANG(
+ set_src, set_src_cmd,
+ "set src <A.B.C.D$addrv4|X:X::X:X$addrv6>",
+ SET_STR
+ "src address for route\n"
+ "IPv4 src address\n"
+ "IPv6 src address\n")
+{
+ const char *xpath =
+ "./set-action[action='frr-zebra-route-map:src-address']";
+ char xpath_value[XPATH_MAXLEN];
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (addrv4_str) {
+ snprintf(
+ xpath_value, sizeof(xpath_value),
+ "%s/rmap-set-action/frr-zebra-route-map:ipv4-src-address",
+ xpath);
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY,
+ addrv4_str);
+ } else {
+ snprintf(
+ xpath_value, sizeof(xpath_value),
+ "%s/rmap-set-action/frr-zebra-route-map:ipv6-src-address",
+ xpath);
+ nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY,
+ addrv6_str);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+ no_set_src, no_set_src_cmd,
+ "no set src [<A.B.C.D|X:X::X:X>]",
+ NO_STR
+ SET_STR
+ "Source address for route\n"
+ "IPv4 address\n"
+ "IPv6 address\n")
+{
+ const char *xpath =
+ "./set-action[action='frr-zebra-route-map:src-address']";
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+#if HAVE_BFDD == 0 || defined(HAVE_RTADV)
+const char *features[] = {
+#if HAVE_BFDD == 0
+ "ptm-bfd",
+#endif
+#if defined(HAVE_RTADV)
+ "ipv6-router-advertisements",
+#endif
+ NULL
+};
+#endif
+
+/* clang-format off */
+const struct frr_yang_module_info frr_zebra_cli_info = {
+ .name = "frr-zebra",
+ .ignore_cfg_cbs = true,
+#if HAVE_BFDD == 0 || defined(HAVE_RTADV)
+ .features = features,
+#endif
+ .nodes = {
+#if HAVE_BFDD == 0
+ {
+ .xpath = "/frr-zebra:zebra/ptm-enable",
+ .cbs.cli_show = zebra_ptm_enable_cli_write,
+ },
+#endif
+ {
+ .xpath = "/frr-zebra:zebra/route-map-delay",
+ .cbs.cli_show = zebra_route_map_delay_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv4-addrs",
+ .cbs.cli_show = lib_interface_zebra_ipv4_addrs_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv4-p2p-addrs",
+ .cbs.cli_show = lib_interface_zebra_ipv4_p2p_addrs_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-addrs",
+ .cbs.cli_show = lib_interface_zebra_ipv6_addrs_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/multicast",
+ .cbs.cli_show = lib_interface_zebra_multicast_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-detect",
+ .cbs.cli_show = lib_interface_zebra_link_detect_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/enabled",
+ .cbs.cli_show = lib_interface_zebra_enabled_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
+ .cbs.cli_show = lib_interface_zebra_bandwidth_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/mpls",
+ .cbs.cli_show = lib_interface_zebra_mpls_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params",
+ .cbs.cli_show = lib_interface_zebra_link_params_cli_write,
+ .cbs.cli_show_end = lib_interface_zebra_link_params_cli_write_end,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/metric",
+ .cbs.cli_show = lib_interface_zebra_link_params_metric_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/max-bandwidth",
+ .cbs.cli_show = lib_interface_zebra_link_params_max_bandwidth_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/max-reservable-bandwidth",
+ .cbs.cli_show = lib_interface_zebra_link_params_max_reservable_bandwidth_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/unreserved-bandwidths/unreserved-bandwidth",
+ .cbs.cli_show = lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/residual-bandwidth",
+ .cbs.cli_show = lib_interface_zebra_link_params_residual_bandwidth_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/available-bandwidth",
+ .cbs.cli_show = lib_interface_zebra_link_params_available_bandwidth_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/utilized-bandwidth",
+ .cbs.cli_show = lib_interface_zebra_link_params_utilized_bandwidth_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/legacy-admin-group",
+ .cbs.cli_show = lib_interface_zebra_link_params_legacy_admin_group_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities",
+ .cbs.cli_show = lib_interface_zebra_link_params_affinities_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinity-mode",
+ .cbs.cli_show = lib_interface_zebra_link_params_affinity_mode_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/neighbor",
+ .cbs.cli_show = lib_interface_zebra_link_params_neighbor_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/delay",
+ .cbs.cli_show = lib_interface_zebra_link_params_delay_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/delay-variation",
+ .cbs.cli_show = lib_interface_zebra_link_params_delay_variation_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/packet-loss",
+ .cbs.cli_show = lib_interface_zebra_link_params_packet_loss_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0/esi",
+ .cbs.cli_show = lib_interface_zebra_evpn_mh_type_0_esi_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/system-mac",
+ .cbs.cli_show = lib_interface_zebra_evpn_mh_type_3_system_mac_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/local-discriminator",
+ .cbs.cli_show = lib_interface_zebra_evpn_mh_type_3_local_discriminator_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/df-preference",
+ .cbs.cli_show = lib_interface_zebra_evpn_mh_df_preference_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/bypass",
+ .cbs.cli_show = lib_interface_zebra_evpn_mh_bypass_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/uplink",
+ .cbs.cli_show = lib_interface_zebra_evpn_mh_uplink_cli_write,
+ },
+#if defined(HAVE_RTADV)
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/send-advertisements",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_send_advertisements_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/max-rtr-adv-interval",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/managed-flag",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_managed_flag_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/other-config-flag",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_other_config_flag_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-flag",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/link-mtu",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_link_mtu_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/reachable-time",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_reachable_time_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/retrans-timer",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_retrans_timer_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/cur-hop-limit",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-lifetime",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_default_lifetime_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/fast-retransmit",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/advertisement-interval-option",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-lifetime",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-router-preference",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_default_router_preference_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/prefix-list/prefix",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/dnssl/dnssl-domain",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_cli_write,
+ },
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/rdnss/rdnss-address",
+ .cbs.cli_show = lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_cli_write,
+ },
+#endif /* defined(HAVE_RTADV) */
+#if HAVE_BFDD == 0
+ {
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ptm-enable",
+ .cbs.cli_show = lib_interface_zebra_ptm_enable_cli_write,
+ },
+#endif
+ {
+ .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/router-id",
+ .cbs.cli_show = lib_vrf_zebra_router_id_cli_write,
+ },
+ {
+ .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ipv6-router-id",
+ .cbs.cli_show = lib_vrf_zebra_ipv6_router_id_cli_write,
+ },
+ {
+ .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/filter-protocol",
+ .cbs.cli_show = lib_vrf_zebra_filter_protocol_cli_write,
+ },
+ {
+ .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/filter-nht",
+ .cbs.cli_show = lib_vrf_zebra_filter_nht_cli_write,
+ },
+ {
+ .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/resolve-via-default",
+ .cbs.cli_show = lib_vrf_zebra_resolve_via_default_cli_write,
+ },
+ {
+ .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ipv6-resolve-via-default",
+ .cbs.cli_show = lib_vrf_zebra_ipv6_resolve_via_default_cli_write,
+ },
+ {
+ .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/netns/table-range",
+ .cbs.cli_show = lib_vrf_zebra_netns_table_range_cli_write,
+ },
+ {
+ .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/l3vni-id",
+ .cbs.cli_show = lib_vrf_zebra_l3vni_id_cli_write,
+ },
+ {
+ .xpath = NULL,
+ },
+ }
+};
+
+struct cmd_node link_params_node = {
+ .name = "link-params",
+ .node = LINK_PARAMS_NODE,
+ .parent_node = INTERFACE_NODE,
+ .prompt = "%s(config-link-params)# ",
+};
+
+void zebra_cli_init(void)
+{
+ install_node(&link_params_node);
+
+ install_element(INTERFACE_NODE, &multicast_new_cmd);
+ install_element(INTERFACE_NODE, &multicast_cmd);
+ install_element(INTERFACE_NODE, &mpls_cmd);
+ install_element(INTERFACE_NODE, &linkdetect_cmd);
+ install_element(INTERFACE_NODE, &shutdown_if_cmd);
+ install_element(INTERFACE_NODE, &bandwidth_if_cmd);
+ install_element(INTERFACE_NODE, &ip_address_cmd);
+ install_element(INTERFACE_NODE, &ip_address_peer_cmd);
+ install_element(INTERFACE_NODE, &ipv6_address_cmd);
+ install_element(INTERFACE_NODE, &link_params_cmd);
+ install_element(INTERFACE_NODE, &no_link_params_cmd);
+ install_default(LINK_PARAMS_NODE);
+ install_element(LINK_PARAMS_NODE, &link_params_enable_cmd);
+ install_element(LINK_PARAMS_NODE, &no_link_params_enable_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_metric_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_maxbw_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_max_rsv_bw_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_unrsv_bw_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_admin_grp_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_inter_as_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_delay_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_delay_var_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_pkt_loss_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_ava_bw_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_res_bw_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_use_bw_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_affinity_cmd);
+ install_element(LINK_PARAMS_NODE, &link_params_affinity_mode_cmd);
+ install_element(LINK_PARAMS_NODE, &exit_link_params_cmd);
+
+ 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);
+
+#if defined(HAVE_RTADV)
+ 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);
+#endif
+#if HAVE_BFDD == 0
+ install_element(INTERFACE_NODE, &zebra_ptm_enable_if_cmd);
+#endif
+
+ 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, &ip_router_id_in_vrf_cmd);
+ install_element(CONFIG_NODE, &router_id_in_vrf_cmd);
+ install_element(CONFIG_NODE, &ipv6_router_id_in_vrf_cmd);
+ install_element(VRF_NODE, &ip_router_id_in_vrf_cmd);
+ install_element(VRF_NODE, &router_id_in_vrf_cmd);
+ install_element(VRF_NODE, &ipv6_router_id_in_vrf_cmd);
+
+ install_element(CONFIG_NODE, &ip_protocol_cmd);
+ install_element(VRF_NODE, &ip_protocol_cmd);
+ install_element(CONFIG_NODE, &ipv6_protocol_cmd);
+ install_element(VRF_NODE, &ipv6_protocol_cmd);
+ install_element(CONFIG_NODE, &ip_protocol_nht_rmap_cmd);
+ install_element(VRF_NODE, &ip_protocol_nht_rmap_cmd);
+ install_element(CONFIG_NODE, &ipv6_protocol_nht_rmap_cmd);
+ install_element(VRF_NODE, &ipv6_protocol_nht_rmap_cmd);
+ install_element(CONFIG_NODE, &zebra_route_map_timer_cmd);
+
+ install_element(CONFIG_NODE, &ip_nht_default_route_cmd);
+ install_element(CONFIG_NODE, &ipv6_nht_default_route_cmd);
+ install_element(VRF_NODE, &ip_nht_default_route_cmd);
+ install_element(VRF_NODE, &ipv6_nht_default_route_cmd);
+
+ install_element(CONFIG_NODE, &vni_mapping_cmd);
+ install_element(VRF_NODE, &vni_mapping_cmd);
+
+ if (vrf_is_backend_netns())
+ install_element(VRF_NODE, &vrf_netns_cmd);
+
+ install_element(CONFIG_NODE, &ip_table_range_cmd);
+ install_element(VRF_NODE, &ip_table_range_cmd);
+#if HAVE_BFDD == 0
+ install_element(CONFIG_NODE, &zebra_ptm_enable_cmd);
+#endif
+ 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);
+}
diff --git a/zebra/zebra_cli.h b/zebra/zebra_cli.h
new file mode 100644
index 0000000000..01931a47ab
--- /dev/null
+++ b/zebra/zebra_cli.h
@@ -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
diff --git a/zebra/zebra_evpn_mh.c b/zebra/zebra_evpn_mh.c
index eb0cb6e0b3..35d5027fb8 100644
--- a/zebra/zebra_evpn_mh.c
+++ b/zebra/zebra_evpn_mh.c
@@ -20,7 +20,6 @@
#include "table.h"
#include "vlan.h"
#include "vxlan.h"
-#include "northbound_cli.h"
#include "zebra/zebra_router.h"
#include "zebra/debug.h"
@@ -3305,175 +3304,6 @@ void zebra_evpn_mh_if_init(struct zebra_if *zif)
zif->es_info.df_pref = EVPN_MH_DF_PREF_DEFAULT;
}
-#include "zebra/zebra_evpn_mh_clippy.c"
-/* CLI for setting an ES in bypass mode */
-DEFPY_HIDDEN(zebra_evpn_es_bypass, zebra_evpn_es_bypass_cmd,
- "[no] evpn mh bypass",
- NO_STR "EVPN\n" EVPN_MH_VTY_STR "set bypass mode\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/evpn-mh/bypass",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/evpn-mh/bypass",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_evpn_mh_bypass_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool bypass = yang_dnode_get_bool(dnode, NULL);
-
- if (bypass)
- vty_out(vty, " evpn mh bypass\n");
- else if (show_defaults)
- vty_out(vty, " no evpn mh bypass\n");
-}
-
-/* CLI for configuring DF preference part for an ES */
-DEFPY_YANG (zebra_evpn_es_pref,
- zebra_evpn_es_pref_cmd,
- "[no$no] evpn mh es-df-pref ![(1-65535)$df_pref]",
- NO_STR
- "EVPN\n"
- EVPN_MH_VTY_STR
- "Preference value used for DF election\n"
- "Preference\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/evpn-mh/df-preference",
- NB_OP_MODIFY, df_pref_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/evpn-mh/df-preference",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_evpn_mh_df_preference_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint16_t df_pref = yang_dnode_get_uint16(dnode, NULL);
-
- vty_out(vty, " evpn mh es-df-pref %u\n", df_pref);
-}
-
-/* CLI for setting up sysmac part of ESI on an access port */
-DEFPY_YANG (zebra_evpn_es_sys_mac,
- zebra_evpn_es_sys_mac_cmd,
- "[no$no] evpn mh es-sys-mac ![X:X:X:X:X:X$mac]",
- NO_STR
- "EVPN\n"
- EVPN_MH_VTY_STR
- "Ethernet segment system MAC\n"
- MAC_STR
-)
-{
- if (!no)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/evpn-mh/type-3/system-mac",
- NB_OP_MODIFY, mac_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/evpn-mh/type-3/system-mac",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_evpn_mh_type_3_system_mac_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- char buf[ETHER_ADDR_STRLEN];
- struct ethaddr mac;
-
- yang_dnode_get_mac(&mac, dnode, NULL);
-
- vty_out(vty, " evpn mh es-sys-mac %s\n",
- prefix_mac2str(&mac, buf, sizeof(buf)));
-}
-
-/* CLI for setting up local-ID part of ESI on an access port */
-DEFPY_YANG (zebra_evpn_es_id,
- zebra_evpn_es_id_cmd,
- "[no$no] evpn mh es-id ![(1-16777215)$es_lid | NAME$esi_str]",
- NO_STR
- "EVPN\n"
- EVPN_MH_VTY_STR
- "Ethernet segment identifier\n"
- "local discriminator\n"
- "10-byte ID - 00:AA:BB:CC:DD:EE:FF:GG:HH:II\n"
-)
-{
- if (no) {
- /* We don't know which one is configured, so detroy both types. */
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/evpn-mh/type-0/esi",
- NB_OP_DESTROY, NULL);
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/evpn-mh/type-3/local-discriminator",
- NB_OP_DESTROY, NULL);
- } else {
- if (esi_str)
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/evpn-mh/type-0/esi",
- NB_OP_MODIFY, esi_str);
- else
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/evpn-mh/type-3/local-discriminator",
- NB_OP_MODIFY, es_lid_str);
- }
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_evpn_mh_type_0_esi_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- const char *esi_str = yang_dnode_get_string(dnode, NULL);
-
- vty_out(vty, " evpn mh es-id %s\n", esi_str);
-}
-
-void lib_interface_zebra_evpn_mh_type_3_local_discriminator_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- uint32_t es_lid = yang_dnode_get_uint32(dnode, NULL);
-
- vty_out(vty, " evpn mh es-id %u\n", es_lid);
-}
-
-/* CLI for tagging an interface as an uplink */
-DEFPY_YANG (zebra_evpn_mh_uplink,
- zebra_evpn_mh_uplink_cmd,
- "[no] evpn mh uplink",
- NO_STR
- "EVPN\n"
- EVPN_MH_VTY_STR
- "Uplink to the VxLAN core\n")
-{
- if (!no)
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/evpn-mh/uplink",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/evpn-mh/uplink",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_evpn_mh_uplink_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool uplink = yang_dnode_get_bool(dnode, NULL);
-
- if (uplink)
- vty_out(vty, " evpn mh uplink\n");
- else if (show_defaults)
- vty_out(vty, " no evpn mh uplink\n");
-}
-
void zebra_evpn_mh_json(json_object *json)
{
json_object *json_array;
@@ -4031,15 +3861,6 @@ int zebra_evpn_mh_redirect_off(struct vty *vty, bool redirect_off)
return 0;
}
-void zebra_evpn_interface_init(void)
-{
- install_element(INTERFACE_NODE, &zebra_evpn_es_id_cmd);
- install_element(INTERFACE_NODE, &zebra_evpn_es_sys_mac_cmd);
- install_element(INTERFACE_NODE, &zebra_evpn_es_pref_cmd);
- install_element(INTERFACE_NODE, &zebra_evpn_es_bypass_cmd);
- install_element(INTERFACE_NODE, &zebra_evpn_mh_uplink_cmd);
-}
-
void zebra_evpn_mh_init(void)
{
zrouter.mh_info = XCALLOC(MTYPE_ZMH_INFO, sizeof(*zrouter.mh_info));
diff --git a/zebra/zebra_evpn_mh.h b/zebra/zebra_evpn_mh.h
index bc8ffd7877..6080048976 100644
--- a/zebra/zebra_evpn_mh.h
+++ b/zebra/zebra_evpn_mh.h
@@ -19,8 +19,6 @@
#include "zebra_nhg.h"
#include "zebra_nb.h"
-#define EVPN_MH_VTY_STR "Multihoming\n"
-
/* Ethernet Segment entry -
* - Local and remote ESs are maintained in a global RB tree,
* zmh_info->es_rb_tree using ESI as key
@@ -337,7 +335,6 @@ extern bool zebra_evpn_es_mac_ref_entry(struct zebra_mac *mac,
struct zebra_evpn_es *es);
extern bool zebra_evpn_es_mac_ref(struct zebra_mac *mac, const esi_t *esi);
extern struct zebra_evpn_es *zebra_evpn_es_find(const esi_t *esi);
-extern void zebra_evpn_interface_init(void);
extern void zebra_evpn_acc_vl_show(struct vty *vty, bool uj);
extern void zebra_evpn_acc_vl_show_detail(struct vty *vty, bool uj);
extern void zebra_evpn_if_es_print(struct vty *vty, json_object *json,
diff --git a/zebra/zebra_nb.c b/zebra/zebra_nb.c
index fec378885e..aace4289d3 100644
--- a/zebra/zebra_nb.c
+++ b/zebra/zebra_nb.c
@@ -99,7 +99,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-zebra:zebra/ptm-enable",
.cbs = {
.modify = zebra_ptm_enable_modify,
- .cli_show = zebra_ptm_enable_cli_write,
}
},
#endif
@@ -107,7 +106,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-zebra:zebra/route-map-delay",
.cbs = {
.modify = zebra_route_map_delay_modify,
- .cli_show = zebra_route_map_delay_cli_write,
}
},
{
@@ -324,7 +322,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv4-addrs",
.cbs = {
.create = lib_interface_zebra_ipv4_addrs_create,
- .cli_show = lib_interface_zebra_ipv4_addrs_cli_write,
.destroy = lib_interface_zebra_ipv4_addrs_destroy,
}
},
@@ -339,7 +336,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv4-p2p-addrs",
.cbs = {
.create = lib_interface_zebra_ipv4_p2p_addrs_create,
- .cli_show = lib_interface_zebra_ipv4_p2p_addrs_cli_write,
.destroy = lib_interface_zebra_ipv4_p2p_addrs_destroy,
}
},
@@ -354,7 +350,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-addrs",
.cbs = {
.create = lib_interface_zebra_ipv6_addrs_create,
- .cli_show = lib_interface_zebra_ipv6_addrs_cli_write,
.destroy = lib_interface_zebra_ipv6_addrs_destroy,
}
},
@@ -362,7 +357,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/multicast",
.cbs = {
.modify = lib_interface_zebra_multicast_modify,
- .cli_show = lib_interface_zebra_multicast_cli_write,
.destroy = lib_interface_zebra_multicast_destroy,
}
},
@@ -370,14 +364,12 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-detect",
.cbs = {
.modify = lib_interface_zebra_link_detect_modify,
- .cli_show = lib_interface_zebra_link_detect_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/enabled",
.cbs = {
.modify = lib_interface_zebra_enabled_modify,
- .cli_show = lib_interface_zebra_enabled_cli_write,
.destroy = lib_interface_zebra_enabled_destroy,
}
},
@@ -385,7 +377,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
.cbs = {
.modify = lib_interface_zebra_bandwidth_modify,
- .cli_show = lib_interface_zebra_bandwidth_cli_write,
.destroy = lib_interface_zebra_bandwidth_destroy,
}
},
@@ -393,7 +384,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/mpls",
.cbs = {
.modify = lib_interface_zebra_mpls_modify,
- .cli_show = lib_interface_zebra_mpls_cli_write,
.destroy = lib_interface_zebra_mpls_destroy,
}
},
@@ -402,15 +392,12 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.create = lib_interface_zebra_link_params_create,
.destroy = lib_interface_zebra_link_params_destroy,
- .cli_show = lib_interface_zebra_link_params_cli_write,
- .cli_show_end = lib_interface_zebra_link_params_cli_write_end,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/metric",
.cbs = {
.modify = lib_interface_zebra_link_params_metric_modify,
- .cli_show = lib_interface_zebra_link_params_metric_cli_write,
.destroy = lib_interface_zebra_link_params_metric_destroy,
}
},
@@ -418,7 +405,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/max-bandwidth",
.cbs = {
.modify = lib_interface_zebra_link_params_max_bandwidth_modify,
- .cli_show = lib_interface_zebra_link_params_max_bandwidth_cli_write,
.destroy = lib_interface_zebra_link_params_max_bandwidth_destroy,
}
},
@@ -426,7 +412,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/max-reservable-bandwidth",
.cbs = {
.modify = lib_interface_zebra_link_params_max_reservable_bandwidth_modify,
- .cli_show = lib_interface_zebra_link_params_max_reservable_bandwidth_cli_write,
.destroy = lib_interface_zebra_link_params_max_reservable_bandwidth_destroy,
}
},
@@ -434,7 +419,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/unreserved-bandwidths/unreserved-bandwidth",
.cbs = {
.create = lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_create,
- .cli_show = lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_cli_write,
.destroy = lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_destroy,
}
},
@@ -448,7 +432,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/residual-bandwidth",
.cbs = {
.modify = lib_interface_zebra_link_params_residual_bandwidth_modify,
- .cli_show = lib_interface_zebra_link_params_residual_bandwidth_cli_write,
.destroy = lib_interface_zebra_link_params_residual_bandwidth_destroy,
}
},
@@ -456,7 +439,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/available-bandwidth",
.cbs = {
.modify = lib_interface_zebra_link_params_available_bandwidth_modify,
- .cli_show = lib_interface_zebra_link_params_available_bandwidth_cli_write,
.destroy = lib_interface_zebra_link_params_available_bandwidth_destroy,
}
},
@@ -464,7 +446,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/utilized-bandwidth",
.cbs = {
.modify = lib_interface_zebra_link_params_utilized_bandwidth_modify,
- .cli_show = lib_interface_zebra_link_params_utilized_bandwidth_cli_write,
.destroy = lib_interface_zebra_link_params_utilized_bandwidth_destroy,
}
},
@@ -473,13 +454,11 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.modify = lib_interface_zebra_legacy_admin_group_modify,
.destroy = lib_interface_zebra_legacy_admin_group_destroy,
- .cli_show = cli_show_legacy_admin_group,
},
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities",
.cbs = {
- .cli_show = cli_show_affinity,
},
},
{
@@ -493,14 +472,12 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinity-mode",
.cbs = {
.modify = lib_interface_zebra_affinity_mode_modify,
- .cli_show = cli_show_affinity_mode,
},
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/neighbor",
.cbs = {
.create = lib_interface_zebra_link_params_neighbor_create,
- .cli_show = lib_interface_zebra_link_params_neighbor_cli_write,
.destroy = lib_interface_zebra_link_params_neighbor_destroy,
}
},
@@ -520,7 +497,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/delay",
.cbs = {
.modify = lib_interface_zebra_link_params_delay_modify,
- .cli_show = lib_interface_zebra_link_params_delay_cli_write,
.destroy = lib_interface_zebra_link_params_delay_destroy,
}
},
@@ -547,7 +523,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/delay-variation",
.cbs = {
.modify = lib_interface_zebra_link_params_delay_variation_modify,
- .cli_show = lib_interface_zebra_link_params_delay_variation_cli_write,
.destroy = lib_interface_zebra_link_params_delay_variation_destroy,
}
},
@@ -555,7 +530,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/packet-loss",
.cbs = {
.modify = lib_interface_zebra_link_params_packet_loss_modify,
- .cli_show = lib_interface_zebra_link_params_packet_loss_cli_write,
.destroy = lib_interface_zebra_link_params_packet_loss_destroy,
}
},
@@ -563,7 +537,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0/esi",
.cbs = {
.modify = lib_interface_zebra_evpn_mh_type_0_esi_modify,
- .cli_show = lib_interface_zebra_evpn_mh_type_0_esi_cli_write,
.destroy = lib_interface_zebra_evpn_mh_type_0_esi_destroy,
}
},
@@ -571,7 +544,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/system-mac",
.cbs = {
.modify = lib_interface_zebra_evpn_mh_type_3_system_mac_modify,
- .cli_show = lib_interface_zebra_evpn_mh_type_3_system_mac_cli_write,
.destroy = lib_interface_zebra_evpn_mh_type_3_system_mac_destroy,
}
},
@@ -579,7 +551,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/local-discriminator",
.cbs = {
.modify = lib_interface_zebra_evpn_mh_type_3_local_discriminator_modify,
- .cli_show = lib_interface_zebra_evpn_mh_type_3_local_discriminator_cli_write,
.destroy = lib_interface_zebra_evpn_mh_type_3_local_discriminator_destroy,
}
},
@@ -587,21 +558,18 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/df-preference",
.cbs = {
.modify = lib_interface_zebra_evpn_mh_df_preference_modify,
- .cli_show = lib_interface_zebra_evpn_mh_df_preference_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/bypass",
.cbs = {
.modify = lib_interface_zebra_evpn_mh_bypass_modify,
- .cli_show = lib_interface_zebra_evpn_mh_bypass_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/uplink",
.cbs = {
.modify = lib_interface_zebra_evpn_mh_uplink_modify,
- .cli_show = lib_interface_zebra_evpn_mh_uplink_cli_write,
}
},
#if defined(HAVE_RTADV)
@@ -609,63 +577,54 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/send-advertisements",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_send_advertisements_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_send_advertisements_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/max-rtr-adv-interval",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/managed-flag",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_managed_flag_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_managed_flag_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/other-config-flag",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_other_config_flag_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_other_config_flag_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-flag",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/link-mtu",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_link_mtu_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_link_mtu_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/reachable-time",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_reachable_time_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/retrans-timer",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_retrans_timer_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/cur-hop-limit",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_cli_write,
.destroy = lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_destroy,
}
},
@@ -673,7 +632,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-lifetime",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_default_lifetime_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_default_lifetime_cli_write,
.destroy = lib_interface_zebra_ipv6_router_advertisements_default_lifetime_destroy,
}
},
@@ -681,21 +639,18 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/fast-retransmit",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/advertisement-interval-option",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_cli_write,
.destroy = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_destroy,
}
},
@@ -703,7 +658,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-lifetime",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_cli_write,
.destroy = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_destroy,
}
},
@@ -711,14 +665,12 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-router-preference",
.cbs = {
.modify = lib_interface_zebra_ipv6_router_advertisements_default_router_preference_modify,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_default_router_preference_cli_write,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/prefix-list/prefix",
.cbs = {
.create = lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_create,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_cli_write,
.destroy = lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_destroy,
}
},
@@ -726,7 +678,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/dnssl/dnssl-domain",
.cbs = {
.create = lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_create,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_cli_write,
.destroy = lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_destroy,
}
},
@@ -771,7 +722,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/rdnss/rdnss-address",
.cbs = {
.create = lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_create,
- .cli_show = lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_cli_write,
.destroy = lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_destroy,
}
},
@@ -788,7 +738,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ptm-enable",
.cbs = {
.modify = lib_interface_zebra_ptm_enable_modify,
- .cli_show = lib_interface_zebra_ptm_enable_cli_write,
}
},
#endif
@@ -845,7 +794,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.modify = lib_vrf_zebra_router_id_modify,
.destroy = lib_vrf_zebra_router_id_destroy,
- .cli_show = lib_vrf_zebra_router_id_cli_write,
}
},
{
@@ -853,7 +801,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.modify = lib_vrf_zebra_ipv6_router_id_modify,
.destroy = lib_vrf_zebra_ipv6_router_id_destroy,
- .cli_show = lib_vrf_zebra_ipv6_router_id_cli_write,
}
},
{
@@ -861,7 +808,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.create = lib_vrf_zebra_filter_protocol_create,
.destroy = lib_vrf_zebra_filter_protocol_destroy,
- .cli_show = lib_vrf_zebra_filter_protocol_cli_write,
}
},
{
@@ -875,7 +821,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.create = lib_vrf_zebra_filter_nht_create,
.destroy = lib_vrf_zebra_filter_nht_destroy,
- .cli_show = lib_vrf_zebra_filter_nht_cli_write,
}
},
{
@@ -889,7 +834,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.modify = lib_vrf_zebra_resolve_via_default_modify,
.destroy = lib_vrf_zebra_resolve_via_default_destroy,
- .cli_show = lib_vrf_zebra_resolve_via_default_cli_write,
}
},
{
@@ -897,7 +841,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.modify = lib_vrf_zebra_ipv6_resolve_via_default_modify,
.destroy = lib_vrf_zebra_ipv6_resolve_via_default_destroy,
- .cli_show = lib_vrf_zebra_ipv6_resolve_via_default_cli_write,
}
},
{
@@ -905,7 +848,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.create = lib_vrf_zebra_netns_table_range_create,
.destroy = lib_vrf_zebra_netns_table_range_destroy,
- .cli_show = lib_vrf_zebra_netns_table_range_cli_write,
}
},
{
@@ -1181,7 +1123,6 @@ const struct frr_yang_module_info frr_zebra_info = {
.cbs = {
.modify = lib_vrf_zebra_l3vni_id_modify,
.destroy = lib_vrf_zebra_l3vni_id_destroy,
- .cli_show = lib_vrf_zebra_l3vni_id_cli_write,
}
},
{
diff --git a/zebra/zebra_nb.h b/zebra/zebra_nb.h
index 9816afeace..2886469e9a 100644
--- a/zebra/zebra_nb.h
+++ b/zebra/zebra_nb.h
@@ -46,13 +46,8 @@ int zebra_allow_external_route_update_destroy(struct nb_cb_destroy_args *args);
int zebra_dplane_queue_limit_modify(struct nb_cb_modify_args *args);
#if HAVE_BFDD == 0
int zebra_ptm_enable_modify(struct nb_cb_modify_args *args);
-void zebra_ptm_enable_cli_write(struct vty *vty, const struct lyd_node *dnode,
- bool show_defaults);
#endif
int zebra_route_map_delay_modify(struct nb_cb_modify_args *args);
-void zebra_route_map_delay_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int zebra_debugs_debug_events_modify(struct nb_cb_modify_args *args);
int zebra_debugs_debug_events_destroy(struct nb_cb_destroy_args *args);
int zebra_debugs_debug_zapi_send_modify(struct nb_cb_modify_args *args);
@@ -90,77 +85,37 @@ int zebra_debugs_debug_dplane_detail_destroy(struct nb_cb_destroy_args *args);
int zebra_debugs_debug_mlag_modify(struct nb_cb_modify_args *args);
int zebra_debugs_debug_mlag_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv4_addrs_create(struct nb_cb_create_args *args);
-void lib_interface_zebra_ipv4_addrs_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_ipv4_addrs_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv4_addrs_label_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv4_addrs_label_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_ipv4_addrs_label_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv4_p2p_addrs_create(struct nb_cb_create_args *args);
-void lib_interface_zebra_ipv4_p2p_addrs_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_ipv4_p2p_addrs_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv4_p2p_addrs_label_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv4_p2p_addrs_label_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv4_p2p_addrs_label_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_addrs_create(struct nb_cb_create_args *args);
-void lib_interface_zebra_ipv6_addrs_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_ipv6_addrs_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_multicast_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_multicast_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_multicast_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_detect_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_detect_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_enabled_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_enabled_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_enabled_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_bandwidth_modify(struct nb_cb_modify_args *args);
int lib_interface_zebra_bandwidth_destroy(struct nb_cb_destroy_args *args);
-void lib_interface_zebra_bandwidth_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_mpls_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_mpls_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_mpls_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_create(struct nb_cb_create_args *args);
-void lib_interface_zebra_link_params_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
-void lib_interface_zebra_link_params_cli_write_end(struct vty *vty,
- const struct lyd_node *dnode);
int lib_interface_zebra_link_params_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_metric_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_metric_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_metric_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_max_bandwidth_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_max_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_max_bandwidth_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_max_reservable_bandwidth_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_max_reservable_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_max_reservable_bandwidth_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_create(
@@ -175,234 +130,136 @@ void lib_interface_zebra_link_params_unreserved_bandwidths_unreserved_bandwidth_
struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_residual_bandwidth_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_residual_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_residual_bandwidth_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_available_bandwidth_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_available_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_available_bandwidth_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_utilized_bandwidth_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_utilized_bandwidth_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_utilized_bandwidth_destroy(
struct nb_cb_destroy_args *args);
-int lib_interface_zebra_legacy_admin_group_modify(
- struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_legacy_admin_group_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
+int lib_interface_zebra_legacy_admin_group_modify(struct nb_cb_modify_args *args);
int lib_interface_zebra_legacy_admin_group_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_affinity_create(struct nb_cb_create_args *args);
-void lib_interface_zebra_link_params_affinities_affinity_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_affinity_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_affinity_mode_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_affinity_mode_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_neighbor_create(
struct nb_cb_create_args *args);
-void lib_interface_zebra_link_params_neighbor_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_neighbor_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_neighbor_remote_as_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_neighbor_remote_as_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_neighbor_ipv4_remote_id_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_neighbor_ipv4_remote_id_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_delay_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_delay_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_delay_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_min_max_delay_create(
struct nb_cb_create_args *args);
-void lib_interface_zebra_link_params_min_max_delay_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_min_max_delay_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_min_max_delay_delay_min_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_min_max_delay_delay_min_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_min_max_delay_delay_max_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_min_max_delay_delay_max_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_delay_variation_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_delay_variation_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_delay_variation_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_link_params_packet_loss_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_link_params_packet_loss_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_link_params_packet_loss_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_evpn_mh_type_0_esi_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_evpn_mh_type_0_esi_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_evpn_mh_type_0_esi_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_evpn_mh_type_3_system_mac_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_evpn_mh_type_3_system_mac_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_evpn_mh_type_3_system_mac_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_evpn_mh_type_3_local_discriminator_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_evpn_mh_type_3_local_discriminator_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_evpn_mh_type_3_local_discriminator_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_evpn_mh_df_preference_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_evpn_mh_df_preference_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_evpn_mh_bypass_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_evpn_mh_bypass_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_interface_zebra_evpn_mh_uplink_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_evpn_mh_uplink_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
#if defined(HAVE_RTADV)
int lib_interface_zebra_ipv6_router_advertisements_send_advertisements_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_send_advertisements_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_max_rtr_adv_interval_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_managed_flag_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_managed_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_other_config_flag_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_other_config_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_home_agent_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_link_mtu_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_link_mtu_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_reachable_time_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_retrans_timer_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_cur_hop_limit_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_default_lifetime_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_default_router_preference_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_default_router_preference_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_create(
struct nb_cb_create_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_valid_lifetime_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_valid_lifetime_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_on_link_flag_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_on_link_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_preferred_lifetime_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_preferred_lifetime_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_autonomous_flag_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_autonomous_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_router_address_flag_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_prefix_list_prefix_router_address_flag_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_create(
struct nb_cb_create_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_rdnss_rdnss_address_lifetime_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_create(
struct nb_cb_create_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_modify(
struct nb_cb_modify_args *args);
-void lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_interface_zebra_ipv6_router_advertisements_dnssl_dnssl_domain_lifetime_destroy(
struct nb_cb_destroy_args *args);
#endif /* defined(HAVE_RTADV) */
#if HAVE_BFDD == 0
int lib_interface_zebra_ptm_enable_modify(struct nb_cb_modify_args *args);
-void lib_interface_zebra_ptm_enable_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
#endif
struct yang_data *
lib_interface_zebra_state_up_count_get_elem(struct nb_cb_get_elem_args *args);
@@ -422,42 +279,22 @@ struct yang_data *lib_interface_zebra_state_mcast_group_get_elem(
struct nb_cb_get_elem_args *args);
int lib_vrf_zebra_router_id_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_router_id_destroy(struct nb_cb_destroy_args *args);
-void lib_vrf_zebra_router_id_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_vrf_zebra_ipv6_router_id_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_ipv6_router_id_destroy(struct nb_cb_destroy_args *args);
-void lib_vrf_zebra_ipv6_router_id_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_vrf_zebra_filter_protocol_create(struct nb_cb_create_args *args);
int lib_vrf_zebra_filter_protocol_destroy(struct nb_cb_destroy_args *args);
-void lib_vrf_zebra_filter_protocol_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_vrf_zebra_filter_protocol_route_map_modify(
struct nb_cb_modify_args *args);
int lib_vrf_zebra_filter_nht_create(struct nb_cb_create_args *args);
int lib_vrf_zebra_filter_nht_destroy(struct nb_cb_destroy_args *args);
-void lib_vrf_zebra_filter_nht_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_vrf_zebra_filter_nht_route_map_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_resolve_via_default_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_resolve_via_default_destroy(struct nb_cb_destroy_args *args);
-void lib_vrf_zebra_resolve_via_default_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_vrf_zebra_ipv6_resolve_via_default_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_ipv6_resolve_via_default_destroy(
struct nb_cb_destroy_args *args);
-void lib_vrf_zebra_ipv6_resolve_via_default_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults);
int lib_vrf_zebra_netns_table_range_create(struct nb_cb_create_args *args);
int lib_vrf_zebra_netns_table_range_destroy(struct nb_cb_destroy_args *args);
-void lib_vrf_zebra_netns_table_range_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_vrf_zebra_netns_table_range_start_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_netns_table_range_end_modify(struct nb_cb_modify_args *args);
const void *lib_vrf_zebra_ribs_rib_get_next(struct nb_cb_get_next_args *args);
@@ -633,9 +470,6 @@ lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_weight_get_elem(
struct nb_cb_get_elem_args *args);
int lib_vrf_zebra_l3vni_id_modify(struct nb_cb_modify_args *args);
int lib_vrf_zebra_l3vni_id_destroy(struct nb_cb_destroy_args *args);
-void lib_vrf_zebra_l3vni_id_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults);
int lib_vrf_zebra_prefix_only_modify(struct nb_cb_modify_args *args);
#ifdef __cplusplus
diff --git a/zebra/zebra_ptm.c b/zebra/zebra_ptm.c
index 78284acc78..d7d752f01e 100644
--- a/zebra/zebra_ptm.c
+++ b/zebra/zebra_ptm.c
@@ -20,7 +20,6 @@
#include "vrf.h"
#include "vty.h"
#include "lib_errors.h"
-#include "northbound_cli.h"
#include "zebra/debug.h"
#include "zebra/interface.h"
@@ -29,7 +28,6 @@
#include "zebra/zebra_ptm_redistribute.h"
#include "zebra/zebra_router.h"
#include "zebra_vrf.h"
-#include "zebra_nb.h"
/*
* Choose the BFD implementation that we'll use.
@@ -88,7 +86,6 @@ struct zebra_ptm_cb ptm_cb;
static int zebra_ptm_socket_init(void);
void zebra_ptm_sock_read(struct event *thread);
-static void zebra_ptm_install_commands(void);
static int zebra_ptm_handle_msg_cb(void *arg, void *in_ctxt);
void zebra_bfd_peer_replay_req(void);
void zebra_ptm_send_status_req(void);
@@ -117,7 +114,6 @@ void zebra_ptm_init(void)
}
ptm_cb.pid = getpid();
- zebra_ptm_install_commands();
snprintf(buf, sizeof(buf), "%s", FRR_PTM_NAME);
ptm_hdl = ptm_lib_register(buf, NULL, zebra_ptm_handle_msg_cb,
@@ -273,38 +269,6 @@ void zebra_global_ptm_disable(void)
zebra_ptm_reset_status(1);
}
-DEFUN_YANG (zebra_ptm_enable,
- zebra_ptm_enable_cmd,
- "ptm-enable",
- "Enable neighbor check with specified topology\n")
-{
- nb_cli_enqueue_change(vty, "/frr-zebra:zebra/ptm-enable", NB_OP_MODIFY,
- "true");
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFUN_YANG (no_zebra_ptm_enable,
- no_zebra_ptm_enable_cmd,
- "no ptm-enable",
- NO_STR
- "Enable neighbor check with specified topology\n")
-{
- nb_cli_enqueue_change(vty, "/frr-zebra:zebra/ptm-enable", NB_OP_MODIFY,
- "false");
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void zebra_ptm_enable_cli_write(struct vty *vty, const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool enable = yang_dnode_get_bool(dnode, NULL);
-
- if (enable)
- vty_out(vty, "ptm-enable\n");
- else if (show_defaults)
- vty_out(vty, "no ptm-enable\n");
-}
-
void zebra_if_ptm_enable(struct interface *ifp)
{
struct zebra_if *if_data;
@@ -356,49 +320,6 @@ void zebra_if_ptm_disable(struct interface *ifp)
if_data->ptm_enable = ZEBRA_IF_PTM_ENABLE_OFF;
}
-DEFUN_YANG (zebra_ptm_enable_if,
- zebra_ptm_enable_if_cmd,
- "ptm-enable",
- "Enable neighbor check with specified topology\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ptm-enable", NB_OP_MODIFY,
- "true");
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFUN_YANG (no_zebra_ptm_enable_if,
- no_zebra_ptm_enable_if_cmd,
- "no ptm-enable",
- NO_STR
- "Enable neighbor check with specified topology\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ptm-enable", NB_OP_MODIFY,
- "false");
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_interface_zebra_ptm_enable_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool enable = yang_dnode_get_bool(dnode, NULL);
-
- if (!enable)
- vty_out(vty, " no ptm-enable\n");
- else if (show_defaults)
- vty_out(vty, " ptm-enable\n");
-}
-
-void zebra_ptm_write(struct vty *vty)
-{
- struct lyd_node *dnode;
-
- dnode = yang_dnode_get(running_config->dnode,
- "/frr-zebra:zebra/ptm-enable");
- if (dnode)
- nb_cli_show_dnode_cmds(vty, dnode, false);
-}
-
static int zebra_ptm_socket_init(void)
{
int ret;
@@ -439,14 +360,6 @@ static int zebra_ptm_socket_init(void)
return sock;
}
-static void zebra_ptm_install_commands(void)
-{
- install_element(CONFIG_NODE, &zebra_ptm_enable_cmd);
- install_element(CONFIG_NODE, &no_zebra_ptm_enable_cmd);
- install_element(INTERFACE_NODE, &zebra_ptm_enable_if_cmd);
- install_element(INTERFACE_NODE, &no_zebra_ptm_enable_if_cmd);
-}
-
/* BFD session goes down, send message to the protocols. */
static void if_bfd_session_update(struct interface *ifp, struct prefix *dp,
struct prefix *sp, int status,
@@ -1572,11 +1485,6 @@ void zebra_ptm_show_status(struct vty *vty __attribute__((__unused__)),
/* NOTHING */
}
-void zebra_ptm_write(struct vty *vty __attribute__((__unused__)))
-{
- /* NOTHING */
-}
-
void zebra_ptm_if_set_ptm_state(struct interface *i __attribute__((__unused__)),
struct zebra_if *zi __attribute__((__unused__)))
{
diff --git a/zebra/zebra_ptm.h b/zebra/zebra_ptm.h
index 2e4afa5cf9..20a53e2fea 100644
--- a/zebra/zebra_ptm.h
+++ b/zebra/zebra_ptm.h
@@ -58,7 +58,6 @@ struct zebra_ptm_cb {
void zebra_ptm_init(void);
void zebra_ptm_finish(void);
void zebra_ptm_connect(struct event *t);
-void zebra_ptm_write(struct vty *vty);
int zebra_ptm_get_enable_state(void);
#if HAVE_BFDD == 0
diff --git a/zebra/zebra_routemap.c b/zebra/zebra_routemap.c
index 45379a22a8..95da789108 100644
--- a/zebra/zebra_routemap.c
+++ b/zebra/zebra_routemap.c
@@ -14,7 +14,6 @@
#include "filter.h"
#include "plist.h"
#include "nexthop.h"
-#include "northbound_cli.h"
#include "lib/route_types.h"
#include "vrf.h"
#include "frrstr.h"
@@ -25,7 +24,6 @@
#include "zebra/zebra_rnh.h"
#include "zebra/zebra_routemap.h"
#include "zebra/zebra_vrf.h"
-#include "zebra/zebra_nb.h"
#include "zebra/zebra_routemap_clippy.c"
@@ -389,342 +387,7 @@ int ip_nht_rm_del(struct zebra_vrf *zvrf, const char *rmap, int rtype, int afi)
return CMD_SUCCESS;
}
-DEFPY_YANG(
- match_ip_address_prefix_len, match_ip_address_prefix_len_cmd,
- "match ip address prefix-len (0-32)$length",
- MATCH_STR
- IP_STR
- "Match prefix length of IP address\n"
- "Match prefix length of IP address\n"
- "Prefix length\n")
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:ipv4-prefix-length']";
- char xpath_value[XPATH_MAXLEN];
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
- snprintf(
- xpath_value, sizeof(xpath_value),
- "%s/rmap-match-condition/frr-zebra-route-map:ipv4-prefix-length",
- xpath);
- nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- no_match_ip_address_prefix_len, no_match_ip_address_prefix_len_cmd,
- "no match ip address prefix-len [(0-32)]",
- NO_STR
- MATCH_STR
- IP_STR
- "Match prefix length of IP address\n"
- "Match prefix length of IP address\n"
- "Prefix length\n")
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:ipv4-prefix-length']";
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- match_ipv6_address_prefix_len, match_ipv6_address_prefix_len_cmd,
- "match ipv6 address prefix-len (0-128)$length",
- MATCH_STR
- IPV6_STR
- "Match prefix length of IPv6 address\n"
- "Match prefix length of IPv6 address\n"
- "Prefix length\n")
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:ipv6-prefix-length']";
- char xpath_value[XPATH_MAXLEN];
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
- snprintf(
- xpath_value, sizeof(xpath_value),
- "%s/rmap-match-condition/frr-zebra-route-map:ipv6-prefix-length",
- xpath);
- nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- no_match_ipv6_address_prefix_len, no_match_ipv6_address_prefix_len_cmd,
- "no match ipv6 address prefix-len [(0-128)]",
- NO_STR
- MATCH_STR
- IPV6_STR
- "Match prefix length of IPv6 address\n"
- "Match prefix length of IPv6 address\n"
- "Prefix length\n")
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:ipv6-prefix-length']";
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- match_ip_nexthop_prefix_len, match_ip_nexthop_prefix_len_cmd,
- "match ip next-hop prefix-len (0-32)$length",
- MATCH_STR
- IP_STR
- "Match prefixlen of nexthop IP address\n"
- "Match prefixlen of given nexthop\n"
- "Prefix length\n")
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:ipv4-next-hop-prefix-length']";
- char xpath_value[XPATH_MAXLEN];
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
- snprintf(
- xpath_value, sizeof(xpath_value),
- "%s/rmap-match-condition/frr-zebra-route-map:ipv4-prefix-length",
- xpath);
- nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, length_str);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- no_match_ip_nexthop_prefix_len, no_match_ip_nexthop_prefix_len_cmd,
- "no match ip next-hop prefix-len [(0-32)]",
- NO_STR
- MATCH_STR
- IP_STR
- "Match prefixlen of nexthop IP address\n"
- "Match prefix length of nexthop\n"
- "Prefix length\n")
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:ipv4-next-hop-prefix-length']";
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- match_source_protocol, match_source_protocol_cmd,
- "match source-protocol " FRR_REDIST_STR_ZEBRA "$proto",
- MATCH_STR
- "Match protocol via which the route was learnt\n"
- FRR_REDIST_HELP_STR_ZEBRA)
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:source-protocol']";
- char xpath_value[XPATH_MAXLEN];
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
- snprintf(xpath_value, sizeof(xpath_value),
- "%s/rmap-match-condition/frr-zebra-route-map:source-protocol",
- xpath);
- nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, proto);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- no_match_source_protocol, no_match_source_protocol_cmd,
- "no match source-protocol [" FRR_REDIST_STR_ZEBRA "]",
- NO_STR
- MATCH_STR
- "Match protocol via which the route was learnt\n"
- FRR_REDIST_HELP_STR_ZEBRA)
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:source-protocol']";
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- match_source_instance, match_source_instance_cmd,
- "match source-instance (0-255)$instance",
- MATCH_STR
- "Match the protocol's instance number\n"
- "The instance number\n")
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:source-instance']";
- char xpath_value[XPATH_MAXLEN];
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
- snprintf(xpath_value, sizeof(xpath_value),
- "%s/rmap-match-condition/frr-zebra-route-map:source-instance",
- xpath);
- nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY, instance_str);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- no_match_source_instance, no_match_source_instance_cmd,
- "no match source-instance [(0-255)]",
- NO_STR MATCH_STR
- "Match the protocol's instance number\n"
- "The instance number\n")
-{
- const char *xpath =
- "./match-condition[condition='frr-zebra-route-map:source-instance']";
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-/* set functions */
-
-DEFPY_YANG(
- set_src, set_src_cmd,
- "set src <A.B.C.D$addrv4|X:X::X:X$addrv6>",
- SET_STR
- "src address for route\n"
- "IPv4 src address\n"
- "IPv6 src address\n")
-{
- const char *xpath =
- "./set-action[action='frr-zebra-route-map:src-address']";
- char xpath_value[XPATH_MAXLEN];
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
- if (addrv4_str) {
- snprintf(
- xpath_value, sizeof(xpath_value),
- "%s/rmap-set-action/frr-zebra-route-map:ipv4-src-address",
- xpath);
- nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY,
- addrv4_str);
- } else {
- snprintf(
- xpath_value, sizeof(xpath_value),
- "%s/rmap-set-action/frr-zebra-route-map:ipv6-src-address",
- xpath);
- nb_cli_enqueue_change(vty, xpath_value, NB_OP_MODIFY,
- addrv6_str);
- }
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG(
- no_set_src, no_set_src_cmd,
- "no set src [<A.B.C.D|X:X::X:X>]",
- NO_STR
- SET_STR
- "Source address for route\n"
- "IPv4 address\n"
- "IPv6 address\n")
-{
- const char *xpath =
- "./set-action[action='frr-zebra-route-map:src-address']";
-
- nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG (zebra_route_map_timer,
- zebra_route_map_timer_cmd,
- "zebra route-map delay-timer (0-600)$delay",
- ZEBRA_STR
- "Set route-map parameters\n"
- "Time to wait before route-map updates are processed\n"
- "0 means route-map changes are run immediately instead of delaying\n")
-{
- nb_cli_enqueue_change(vty, "/frr-zebra:zebra/route-map-delay",
- NB_OP_MODIFY, delay_str);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG (no_zebra_route_map_timer,
- no_zebra_route_map_timer_cmd,
- "no zebra route-map delay-timer [(0-600)]",
- NO_STR
- ZEBRA_STR
- "Set route-map parameters\n"
- "Reset delay-timer to default value, 30 secs\n"
- "0 means route-map changes are run immediately instead of delaying\n")
-{
- nb_cli_enqueue_change(vty, "/frr-zebra:zebra/route-map-delay",
- NB_OP_DESTROY, NULL);
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void zebra_route_map_delay_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- uint32_t delay = yang_dnode_get_uint32(dnode, NULL);
-
- vty_out(vty, "zebra route-map delay-timer %u\n", delay);
-}
-
-DEFPY_YANG (ip_protocol,
- ip_protocol_cmd,
- "ip protocol " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
- " $proto route-map ROUTE-MAP$rmap",
- IP_STR
- "Filter routing info exchanged between zebra and protocol\n"
- FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
- "Specify route-map\n"
- "Route map name\n")
-{
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(
- vty,
- "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
- VRF_DEFAULT_NAME,
- yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST),
- proto);
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
- yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST), proto);
-}
-
-DEFPY_YANG (no_ip_protocol,
- no_ip_protocol_cmd,
- "no ip protocol " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
- " $proto [route-map ROUTE-MAP$rmap]",
- NO_STR
- IP_STR
- "Stop filtering routing info between zebra and protocol\n"
- FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
- "Specify route-map\n"
- "Route map name\n")
-{
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(
- vty,
- "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
- VRF_DEFAULT_NAME,
- yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST),
- proto);
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
- yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST), proto);
-}
-
-DEFPY_YANG (show_ip_protocol,
+DEFPY (show_ip_protocol,
show_ip_protocol_cmd,
"show ip protocol [vrf <NAME$vrf_name|all$vrf_all>]",
SHOW_STR
@@ -737,61 +400,7 @@ DEFPY_YANG (show_ip_protocol,
return ret;
}
-DEFPY_YANG (ipv6_protocol,
- ipv6_protocol_cmd,
- "ipv6 protocol " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
- " $proto route-map ROUTE-MAP$rmap",
- IP6_STR
- "Filter IPv6 routing info exchanged between zebra and protocol\n"
- FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
- "Specify route-map\n"
- "Route map name\n")
-{
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(
- vty,
- "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
- VRF_DEFAULT_NAME,
- yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST),
- proto);
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
- yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST), proto);
-}
-
-DEFPY_YANG (no_ipv6_protocol,
- no_ipv6_protocol_cmd,
- "no ipv6 protocol " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
- " $proto [route-map ROUTE-MAP$rmap]",
- NO_STR
- IP6_STR
- "Stop filtering IPv6 routing info between zebra and protocol\n"
- FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
- "Specify route-map\n"
- "Route map name\n")
-{
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(
- vty,
- "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
- VRF_DEFAULT_NAME,
- yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST),
- proto);
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/filter-protocol[afi-safi='%s'][protocol='%s']",
- yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST), proto);
-}
-
-DEFPY_YANG (show_ipv6_protocol,
+DEFPY (show_ipv6_protocol,
show_ipv6_protocol_cmd,
"show ipv6 protocol [vrf <NAME$vrf_name|all$vrf_all>]",
SHOW_STR
@@ -804,84 +413,7 @@ DEFPY_YANG (show_ipv6_protocol,
return ret;
}
-void lib_vrf_zebra_filter_protocol_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *afi_safi = yang_dnode_get_string(dnode, "afi-safi");
- const char *proto = yang_dnode_get_string(dnode, "protocol");
- const char *rmap = yang_dnode_get_string(dnode, "route-map");
- afi_t afi;
- safi_t safi;
-
- yang_afi_safi_identity2value(afi_safi, &afi, &safi);
-
- if (safi != SAFI_UNICAST)
- return;
-
- zebra_vrf_indent_cli_write(vty, dnode);
-
- if (afi == AFI_IP)
- vty_out(vty, "ip protocol %s route-map %s\n", proto, rmap);
- else
- vty_out(vty, "ipv6 protocol %s route-map %s\n", proto, rmap);
-}
-
-DEFPY_YANG (ip_protocol_nht_rmap,
- ip_protocol_nht_rmap_cmd,
- "ip nht " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
- " $proto route-map ROUTE-MAP$rmap",
- IP_STR
- "Filter Next Hop tracking route resolution\n"
- FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
- "Specify route map\n"
- "Route map name\n")
-{
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(
- vty,
- "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
- VRF_DEFAULT_NAME,
- yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST),
- proto);
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
- yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST), proto);
-}
-
-DEFPY_YANG (no_ip_protocol_nht_rmap,
- no_ip_protocol_nht_rmap_cmd,
- "no ip nht " FRR_IP_PROTOCOL_MAP_STR_ZEBRA
- " $proto [route-map ROUTE-MAP$rmap]",
- NO_STR
- IP_STR
- "Filter Next Hop tracking route resolution\n"
- FRR_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
- "Specify route map\n"
- "Route map name\n")
-{
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(
- vty,
- "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
- VRF_DEFAULT_NAME,
- yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST),
- proto);
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
- yang_afi_safi_value2identity(AFI_IP, SAFI_UNICAST), proto);
-}
-
-DEFPY_YANG (show_ip_protocol_nht,
+DEFPY (show_ip_protocol_nht,
show_ip_protocol_nht_cmd,
"show ip nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]",
SHOW_STR
@@ -900,61 +432,7 @@ DEFPY_YANG (show_ip_protocol_nht,
return ret;
}
-DEFPY_YANG (ipv6_protocol_nht_rmap,
- ipv6_protocol_nht_rmap_cmd,
- "ipv6 nht " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
- " $proto route-map ROUTE-MAP$rmap",
- IP6_STR
- "Filter Next Hop tracking route resolution\n"
- FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
- "Specify route map\n"
- "Route map name\n")
-{
- nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty, "./route-map", NB_OP_MODIFY, rmap);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(
- vty,
- "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
- VRF_DEFAULT_NAME,
- yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST),
- proto);
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
- yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST), proto);
-}
-
-DEFPY_YANG (no_ipv6_protocol_nht_rmap,
- no_ipv6_protocol_nht_rmap_cmd,
- "no ipv6 nht " FRR_IP6_PROTOCOL_MAP_STR_ZEBRA
- " $proto [route-map ROUTE-MAP$rmap]",
- NO_STR
- IP6_STR
- "Filter Next Hop tracking route resolution\n"
- FRR_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
- "Specify route map\n"
- "Route map name\n")
-{
- nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(
- vty,
- "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
- VRF_DEFAULT_NAME,
- yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST),
- proto);
-
- return nb_cli_apply_changes(
- vty,
- "./frr-zebra:zebra/filter-nht[afi-safi='%s'][protocol='%s']",
- yang_afi_safi_value2identity(AFI_IP6, SAFI_UNICAST), proto);
-}
-
-DEFPY_YANG (show_ipv6_protocol_nht,
+DEFPY (show_ipv6_protocol_nht,
show_ipv6_protocol_nht_cmd,
"show ipv6 nht route-map [vrf <NAME$vrf_name|all$vrf_all>] [json]",
SHOW_STR
@@ -973,29 +451,6 @@ DEFPY_YANG (show_ipv6_protocol_nht,
return ret;
}
-void lib_vrf_zebra_filter_nht_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *afi_safi = yang_dnode_get_string(dnode, "afi-safi");
- const char *proto = yang_dnode_get_string(dnode, "protocol");
- const char *rmap = yang_dnode_get_string(dnode, "route-map");
- afi_t afi;
- safi_t safi;
-
- yang_afi_safi_identity2value(afi_safi, &afi, &safi);
-
- if (safi != SAFI_UNICAST)
- return;
-
- zebra_vrf_indent_cli_write(vty, dnode);
-
- if (afi == AFI_IP)
- vty_out(vty, "ip nht %s route-map %s\n", proto, rmap);
- else
- vty_out(vty, "ipv6 nht %s route-map %s\n", proto, rmap);
-}
-
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
/* `match ip next-hop IP_ACCESS_LIST' */
@@ -1897,30 +1352,12 @@ void zebra_routemap_vrf_delete(struct zebra_vrf *zvrf)
void zebra_route_map_init(void)
{
- install_element(CONFIG_NODE, &ip_protocol_cmd);
- install_element(CONFIG_NODE, &no_ip_protocol_cmd);
- install_element(VRF_NODE, &ip_protocol_cmd);
- install_element(VRF_NODE, &no_ip_protocol_cmd);
install_element(VIEW_NODE, &show_ip_protocol_cmd);
- install_element(CONFIG_NODE, &ipv6_protocol_cmd);
- install_element(CONFIG_NODE, &no_ipv6_protocol_cmd);
- install_element(VRF_NODE, &ipv6_protocol_cmd);
- install_element(VRF_NODE, &no_ipv6_protocol_cmd);
install_element(VIEW_NODE, &show_ipv6_protocol_cmd);
- install_element(CONFIG_NODE, &ip_protocol_nht_rmap_cmd);
- install_element(CONFIG_NODE, &no_ip_protocol_nht_rmap_cmd);
- install_element(VRF_NODE, &ip_protocol_nht_rmap_cmd);
- install_element(VRF_NODE, &no_ip_protocol_nht_rmap_cmd);
install_element(VIEW_NODE, &show_ip_protocol_nht_cmd);
- install_element(CONFIG_NODE, &ipv6_protocol_nht_rmap_cmd);
- install_element(CONFIG_NODE, &no_ipv6_protocol_nht_rmap_cmd);
- install_element(VRF_NODE, &ipv6_protocol_nht_rmap_cmd);
- install_element(VRF_NODE, &no_ipv6_protocol_nht_rmap_cmd);
install_element(VIEW_NODE, &show_ipv6_protocol_nht_cmd);
- install_element(CONFIG_NODE, &zebra_route_map_timer_cmd);
- install_element(CONFIG_NODE, &no_zebra_route_map_timer_cmd);
- route_map_init();
+ route_map_init_new(true);
route_map_add_hook(zebra_route_map_add);
route_map_delete_hook(zebra_route_map_delete);
@@ -1974,19 +1411,4 @@ void zebra_route_map_init(void)
/* */
route_map_install_set(&route_set_src_cmd);
- /* */
- install_element(RMAP_NODE, &match_ip_nexthop_prefix_len_cmd);
- install_element(RMAP_NODE, &no_match_ip_nexthop_prefix_len_cmd);
- install_element(RMAP_NODE, &match_ip_address_prefix_len_cmd);
- install_element(RMAP_NODE, &match_ipv6_address_prefix_len_cmd);
- install_element(RMAP_NODE, &no_match_ipv6_address_prefix_len_cmd);
- install_element(RMAP_NODE, &no_match_ip_address_prefix_len_cmd);
- install_element(RMAP_NODE, &match_source_protocol_cmd);
- install_element(RMAP_NODE, &no_match_source_protocol_cmd);
- install_element(RMAP_NODE, &match_source_instance_cmd);
- install_element(RMAP_NODE, &no_match_source_instance_cmd);
-
- /* */
- install_element(RMAP_NODE, &set_src_cmd);
- install_element(RMAP_NODE, &no_set_src_cmd);
}
diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c
index e4bf6bad2c..e464e47b1f 100644
--- a/zebra/zebra_vrf.c
+++ b/zebra/zebra_vrf.c
@@ -17,7 +17,6 @@
#include "srcdest_table.h"
#include "vrf.h"
#include "vty.h"
-#include "northbound_cli.h"
#include "zebra/zebra_router.h"
#include "zebra/rtadv.h"
@@ -34,7 +33,6 @@
#include "zebra/zebra_routemap.h"
#include "zebra/zebra_vrf_clippy.c"
#include "zebra/table_manager.h"
-#include "zebra/zebra_nb.h"
static void zebra_vrf_table_create(struct zebra_vrf *zvrf, afi_t afi,
safi_t safi);
@@ -452,53 +450,6 @@ struct route_table *zebra_vrf_table(afi_t afi, safi_t safi, vrf_id_t vrf_id)
return zvrf->table[afi][safi];
}
-void zebra_vrf_indent_cli_write(struct vty *vty, const struct lyd_node *dnode)
-{
- const struct lyd_node *vrf = yang_dnode_get_parent(dnode, "vrf");
-
- if (vrf && strcmp(yang_dnode_get_string(vrf, "name"), VRF_DEFAULT_NAME))
- vty_out(vty, " ");
-}
-
-static int vrf_config_write_single(const struct lyd_node *dnode, void *arg)
-{
- nb_cli_show_dnode_cmds(arg, dnode, false);
-
- return YANG_ITER_CONTINUE;
-}
-
-static int vrf_config_write(struct vty *vty)
-{
- const struct lyd_node *dnode;
-
- yang_dnode_iterate(vrf_config_write_single, vty, running_config->dnode,
- "/frr-vrf:lib/vrf");
- dnode = yang_dnode_get(running_config->dnode, "/frr-zebra:zebra");
- if (dnode)
- nb_cli_show_dnode_cmds(vty, dnode, false);
-
- return 1;
-}
-
-DEFPY (vrf_netns,
- vrf_netns_cmd,
- "netns NAME$netns_name",
- "Attach VRF to a Namespace\n"
- "The file name in " NS_RUN_DIR ", or a full pathname\n")
-{
- return CMD_SUCCESS;
-}
-
-DEFUN (no_vrf_netns,
- no_vrf_netns_cmd,
- "no netns [NAME]",
- NO_STR
- "Detach VRF from a Namespace\n"
- "The file name in " NS_RUN_DIR ", or a full pathname\n")
-{
- return CMD_SUCCESS;
-}
-
/* if ns_id is different and not VRF_UNKNOWN,
* then update vrf identifier, and enable VRF
*/
@@ -597,12 +548,4 @@ void zebra_vrf_init(void)
zebra_vrf_delete);
hook_register(zserv_client_close, release_daemon_table_chunks);
-
- vrf_cmd_init(vrf_config_write);
-
- if (vrf_is_backend_netns() && ns_have_netns()) {
- /* Install NS commands. */
- install_element(VRF_NODE, &vrf_netns_cmd);
- install_element(VRF_NODE, &no_vrf_netns_cmd);
- }
}
diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h
index cf9cbbe7b4..5cbfab1ddc 100644
--- a/zebra/zebra_vrf.h
+++ b/zebra/zebra_vrf.h
@@ -260,9 +260,6 @@ extern void zebra_vrf_init(void);
extern void zebra_rtable_node_cleanup(struct route_table *table,
struct route_node *node);
-extern void zebra_vrf_indent_cli_write(struct vty *vty,
- const struct lyd_node *dnode);
-
#ifdef __cplusplus
}
#endif
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index 2dbf9f5cad..70b71fe707 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -1164,23 +1164,6 @@ DEFPY (show_ip_nht,
return CMD_SUCCESS;
}
-DEFUN (ip_nht_default_route,
- ip_nht_default_route_cmd,
- "ip nht resolve-via-default",
- IP_STR
- "Filter Next Hop tracking route resolution\n"
- "Resolve via default route\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/resolve-via-default",
- NB_OP_MODIFY, "true");
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
static void show_nexthop_group_out(struct vty *vty, struct nhg_hash_entry *nhe,
json_object *json_nhe_hdr)
{
@@ -1679,88 +1662,6 @@ DEFPY_HIDDEN(backup_nexthop_recursive_use_enable,
return CMD_SUCCESS;
}
-DEFUN (no_ip_nht_default_route,
- no_ip_nht_default_route_cmd,
- "no ip nht resolve-via-default",
- NO_STR
- IP_STR
- "Filter Next Hop tracking route resolution\n"
- "Resolve via default route\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/resolve-via-default",
- NB_OP_MODIFY, "false");
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_vrf_zebra_resolve_via_default_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- bool resolve_via_default = yang_dnode_get_bool(dnode, NULL);
-
- if (resolve_via_default != SAVE_ZEBRA_IP_NHT_RESOLVE_VIA_DEFAULT ||
- show_defaults) {
- zebra_vrf_indent_cli_write(vty, dnode);
-
- vty_out(vty, "%sip nht resolve-via-default\n",
- resolve_via_default ? "" : "no ");
- }
-}
-
-DEFUN (ipv6_nht_default_route,
- ipv6_nht_default_route_cmd,
- "ipv6 nht resolve-via-default",
- IP6_STR
- "Filter Next Hop tracking route resolution\n"
- "Resolve via default route\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-resolve-via-default",
- NB_OP_MODIFY, "true");
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFUN (no_ipv6_nht_default_route,
- no_ipv6_nht_default_route_cmd,
- "no ipv6 nht resolve-via-default",
- NO_STR
- IP6_STR
- "Filter Next Hop tracking route resolution\n"
- "Resolve via default route\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/ipv6-resolve-via-default",
- NB_OP_MODIFY, "false");
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_vrf_zebra_ipv6_resolve_via_default_cli_write(
- struct vty *vty, const struct lyd_node *dnode, bool show_defaults)
-{
- bool resolve_via_default = yang_dnode_get_bool(dnode, NULL);
-
- if (resolve_via_default != SAVE_ZEBRA_IP_NHT_RESOLVE_VIA_DEFAULT ||
- show_defaults) {
- zebra_vrf_indent_cli_write(vty, dnode);
-
- vty_out(vty, "%sipv6 nht resolve-via-default\n",
- resolve_via_default ? "" : "no ");
- }
-}
-
DEFPY_HIDDEN(rnh_hide_backups, rnh_hide_backups_cmd,
"[no] ip nht hide-backup-events",
NO_STR
@@ -2744,69 +2645,6 @@ DEFPY(evpn_mh_redirect_off, evpn_mh_redirect_off_cmd,
return zebra_evpn_mh_redirect_off(vty, redirect_off);
}
-DEFPY_YANG (vni_mapping,
- vni_mapping_cmd,
- "vni " CMD_VNI_RANGE "[prefix-routes-only$filter]",
- "VNI corresponding to tenant VRF\n"
- "VNI-ID\n"
- "prefix-routes-only\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", NB_OP_MODIFY,
- vni_str);
-
- if (filter)
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only",
- NB_OP_MODIFY, "true");
- else
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only",
- NB_OP_DESTROY, NULL);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-DEFPY_YANG (no_vni_mapping,
- no_vni_mapping_cmd,
- "no vni [" CMD_VNI_RANGE "[prefix-routes-only$filter]]",
- NO_STR
- "VNI corresponding to tenant VRF\n"
- "VNI-ID\n"
- "prefix-routes-only\n")
-{
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", NB_OP_DESTROY,
- NULL);
-
- if (filter)
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only",
- NB_OP_DESTROY, NULL);
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_vrf_zebra_l3vni_id_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- vni_t vni = yang_dnode_get_uint32(dnode, NULL);
- bool prefix_only = yang_dnode_get_bool(dnode, "../prefix-only");
-
- zebra_vrf_indent_cli_write(vty, dnode);
-
- vty_out(vty, "vni %u", vni);
-
- if (prefix_only)
- vty_out(vty, " prefix-routes-only");
-
- vty_out(vty, "\n");
-}
-
/* show vrf */
DEFPY (show_vrf_vni,
show_vrf_vni_cmd,
@@ -3911,8 +3749,6 @@ DEFPY (zebra_nexthop_group_keep,
static int config_write_protocol(struct vty *vty)
{
- zebra_ptm_write(vty);
-
if (zrouter.allow_delete)
vty_out(vty, "allow-external-route-update\n");
@@ -4440,47 +4276,6 @@ DEFPY (no_zebra_protodown_bit,
#endif /* HAVE_NETLINK */
-DEFPY_YANG (ip_table_range, ip_table_range_cmd,
- "[no] ip table range ![(1-4294967295)$start (1-4294967295)$end]",
- NO_STR IP_STR
- "table configuration\n"
- "Configure table range\n"
- "Start Routing Table\n"
- "End Routing Table\n")
-{
- if (!no) {
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/netns/table-range",
- NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/netns/table-range/start",
- NB_OP_MODIFY, start_str);
- nb_cli_enqueue_change(vty,
- "./frr-zebra:zebra/netns/table-range/end",
- NB_OP_MODIFY, end_str);
- } else {
- nb_cli_enqueue_change(vty, "./frr-zebra:zebra/netns/table-range",
- NB_OP_DESTROY, NULL);
- }
-
- if (vty->node == CONFIG_NODE)
- return nb_cli_apply_changes(vty, "/frr-vrf:lib/vrf[name='%s']",
- VRF_DEFAULT_NAME);
-
- return nb_cli_apply_changes(vty, NULL);
-}
-
-void lib_vrf_zebra_netns_table_range_cli_write(struct vty *vty,
- const struct lyd_node *dnode,
- bool show_defaults)
-{
- uint32_t start = yang_dnode_get_uint32(dnode, "start");
- uint32_t end = yang_dnode_get_uint32(dnode, "end");
-
- zebra_vrf_indent_cli_write(vty, dnode);
-
- vty_out(vty, "ip table range %u %u\n", start, end);
-}
-
#ifdef HAVE_SCRIPTING
DEFUN(zebra_on_rib_process_script, zebra_on_rib_process_script_cmd,
@@ -4592,14 +4387,6 @@ void zebra_vty_init(void)
install_element(VIEW_NODE, &show_ip_rpf_addr_cmd);
install_element(VIEW_NODE, &show_ipv6_rpf_addr_cmd);
- install_element(CONFIG_NODE, &ip_nht_default_route_cmd);
- install_element(CONFIG_NODE, &no_ip_nht_default_route_cmd);
- install_element(CONFIG_NODE, &ipv6_nht_default_route_cmd);
- install_element(CONFIG_NODE, &no_ipv6_nht_default_route_cmd);
- install_element(VRF_NODE, &ip_nht_default_route_cmd);
- install_element(VRF_NODE, &no_ip_nht_default_route_cmd);
- install_element(VRF_NODE, &ipv6_nht_default_route_cmd);
- install_element(VRF_NODE, &no_ipv6_nht_default_route_cmd);
install_element(CONFIG_NODE, &rnh_hide_backups_cmd);
install_element(VIEW_NODE, &show_frr_cmd);
@@ -4651,19 +4438,12 @@ void zebra_vty_init(void)
install_element(CONFIG_NODE, &evpn_mh_neigh_holdtime_cmd);
install_element(CONFIG_NODE, &evpn_mh_startup_delay_cmd);
install_element(CONFIG_NODE, &evpn_mh_redirect_off_cmd);
- install_element(CONFIG_NODE, &vni_mapping_cmd);
- install_element(CONFIG_NODE, &no_vni_mapping_cmd);
- install_element(VRF_NODE, &vni_mapping_cmd);
- install_element(VRF_NODE, &no_vni_mapping_cmd);
install_element(VIEW_NODE, &show_dataplane_cmd);
install_element(VIEW_NODE, &show_dataplane_providers_cmd);
install_element(CONFIG_NODE, &zebra_dplane_queue_limit_cmd);
install_element(CONFIG_NODE, &no_zebra_dplane_queue_limit_cmd);
- install_element(CONFIG_NODE, &ip_table_range_cmd);
- install_element(VRF_NODE, &ip_table_range_cmd);
-
#ifdef HAVE_NETLINK
install_element(CONFIG_NODE, &zebra_kernel_netlink_batch_tx_buf_cmd);
install_element(CONFIG_NODE, &no_zebra_kernel_netlink_batch_tx_buf_cmd);