This commit is contained in:
Donald Sharp 2025-04-29 16:22:43 +00:00 committed by GitHub
commit d3a1108902
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 63 additions and 105 deletions

View file

@ -48,13 +48,13 @@ def test_zebra_operationalr(tgen):
r1 = tgen.gears["r1"]
output = json.loads(r1.vtysh_cmd("show mgmt get-data /frr-zebra:zebra"))
output = json.loads(r1.vtysh_cmd("show mgmt get-data /frr-zebra:zebra/state"))
logger.info("Output")
logger.info(output)
logger.info("Ensuring that the max-multipath value is returned")
assert "max-multipath" in output["frr-zebra:zebra"].keys()
assert "max-multipath" in output["frr-zebra:zebra"]["state"].keys()
logger.info("Checking IP forwarding states")
state = output["frr-zebra:zebra"]["state"]

View file

@ -3080,17 +3080,6 @@ module frr-zebra {
container zebra {
description
"Data model for the Zebra daemon.";
leaf max-multipath {
type uint16 {
range "1..65535";
}
config false;
description
"The maximum number of nexthops for a route. At this point it
is unlikely that a multipath number will ever get larger then
1024 but to allow for future expansions, the yang returns a
16 bit number";
}
leaf ip-forwarding {
type boolean;
description
@ -3193,6 +3182,16 @@ module frr-zebra {
config false;
description
"Operational data.";
leaf max-multipath {
type uint16 {
range "1..65535";
}
description
"The maximum number of nexthops for a route. At this point it
is unlikely that a multipath number will ever get larger then
1024 but to allow for future expansions, the yang returns a
16 bit number";
}
leaf ip-forwarding {
type boolean;
description

View file

@ -26,7 +26,7 @@ const struct frr_yang_module_info frr_zebra_info = {
.features = features,
.nodes = {
{
.xpath = "/frr-zebra:zebra/max-multipath",
.xpath = "/frr-zebra:zebra/state/max-multipath",
.cbs = {
.get_elem = zebra_max_multipath_get_elem,
}

View file

@ -30,19 +30,28 @@
#include "zebra/zebra_routemap.h"
#include "zebra/zebra_rnh.h"
#include "zebra/table_manager.h"
#include "zebra/ipforward.h"
/*
* XPath: /frr-zebra:zebra/ip-forwarding
*/
int zebra_ip_forwarding_modify(struct nb_cb_modify_args *args)
{
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
case NB_EV_APPLY:
/* TODO: implement me. */
break;
bool forwarding;
int ret;
if (args->event != NB_EV_APPLY)
return NB_OK;
forwarding = yang_dnode_get_bool(args->dnode, NULL);
ret = ipforward();
if (ret == 0) {
if (forwarding)
ipforward_on();
} else {
if (!forwarding)
ipforward_off();
}
return NB_OK;
@ -67,13 +76,21 @@ int zebra_ip_forwarding_destroy(struct nb_cb_destroy_args *args)
*/
int zebra_ipv6_forwarding_modify(struct nb_cb_modify_args *args)
{
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
case NB_EV_APPLY:
/* TODO: implement me. */
break;
bool forwarding;
int ret;
if (args->event != NB_EV_APPLY)
return NB_OK;
forwarding = yang_dnode_get_bool(args->dnode, NULL);
ret = ipforward_ipv6();
if (ret == 0) {
if (forwarding)
ipforward_ipv6_on();
} else {
if (!forwarding)
ipforward_ipv6_off();
}
return NB_OK;

View file

@ -1165,7 +1165,7 @@ lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_weight_get_elem(
/*
* XPath:
* /frr-zebra:zebra/max-multipath
* /frr-zebra:zebra/state/max-multipath
*/
struct yang_data *zebra_max_multipath_get_elem(struct nb_cb_get_elem_args *args)
{

View file

@ -3833,45 +3833,17 @@ DEFUN (show_zebra,
return CMD_SUCCESS;
}
DEFUN (ip_forwarding,
ip_forwarding_cmd,
"ip forwarding",
IP_STR
"Turn on IP forwarding\n")
DEFPY_YANG (ip_forwarding,
ip_forwarding_cmd,
"[no] ip forwarding",
NO_STR
IP_STR
"Turn on IP forwarding\n")
{
int ret;
nb_cli_enqueue_change(vty, "/frr-zebra:zebra/ip-forwarding", NB_OP_MODIFY,
no ? "false" : "true");
ret = ipforward();
if (ret == 0)
ret = ipforward_on();
if (ret == 0) {
vty_out(vty, "Can't turn on IP forwarding\n");
return CMD_WARNING_CONFIG_FAILED;
}
return CMD_SUCCESS;
}
DEFUN (no_ip_forwarding,
no_ip_forwarding_cmd,
"no ip forwarding",
NO_STR
IP_STR
"Turn off IP forwarding\n")
{
int ret;
ret = ipforward();
if (ret != 0)
ret = ipforward_off();
if (ret != 0) {
vty_out(vty, "Can't turn off IP forwarding\n");
return CMD_WARNING_CONFIG_FAILED;
}
return CMD_SUCCESS;
return nb_cli_apply_changes(vty, NULL);
}
/* Only display ip forwarding is enabled or not. */
@ -3922,45 +3894,17 @@ DEFUN (show_ipv6_forwarding,
return CMD_SUCCESS;
}
DEFUN (ipv6_forwarding,
ipv6_forwarding_cmd,
"ipv6 forwarding",
IPV6_STR
"Turn on IPv6 forwarding\n")
DEFPY_YANG (ipv6_forwarding,
ipv6_forwarding_cmd,
"[no] ipv6 forwarding",
NO_STR
IPV6_STR
"Turn on IPv6 forwarding\n")
{
int ret;
nb_cli_enqueue_change(vty, "/frr-zebra:zebra/ipv6-forwarding", NB_OP_MODIFY,
no ? "false" : "true");
ret = ipforward_ipv6();
if (ret == 0)
ret = ipforward_ipv6_on();
if (ret == 0) {
vty_out(vty, "Can't turn on IPv6 forwarding\n");
return CMD_WARNING_CONFIG_FAILED;
}
return CMD_SUCCESS;
}
DEFUN (no_ipv6_forwarding,
no_ipv6_forwarding_cmd,
"no ipv6 forwarding",
NO_STR
IPV6_STR
"Turn off IPv6 forwarding\n")
{
int ret;
ret = ipforward_ipv6();
if (ret != 0)
ret = ipforward_ipv6_off();
if (ret != 0) {
vty_out(vty, "Can't turn off IPv6 forwarding\n");
return CMD_WARNING_CONFIG_FAILED;
}
return CMD_SUCCESS;
return nb_cli_apply_changes(vty, NULL);
}
/* Display dataplane info */
@ -4253,12 +4197,10 @@ void zebra_vty_init(void)
install_element(VIEW_NODE, &show_ip_forwarding_cmd);
install_element(CONFIG_NODE, &ip_forwarding_cmd);
install_element(CONFIG_NODE, &no_ip_forwarding_cmd);
install_element(ENABLE_NODE, &show_zebra_cmd);
install_element(VIEW_NODE, &show_ipv6_forwarding_cmd);
install_element(CONFIG_NODE, &ipv6_forwarding_cmd);
install_element(CONFIG_NODE, &no_ipv6_forwarding_cmd);
/* Route-map */
zebra_route_map_init();