From: Igor Ryzhov Date: Tue, 23 Jan 2024 15:19:41 +0000 (+0200) Subject: zebra: convert interface ipv6 nd ra-retrans-interval command to NB X-Git-Tag: base_10.0~66^2~29 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=224429da6f8e90e9999b9a7fabebabca72a63015;p=mirror%2Ffrr.git zebra: convert interface ipv6 nd ra-retrans-interval command to NB Signed-off-by: Igor Ryzhov --- diff --git a/yang/frr-zebra.yang b/yang/frr-zebra.yang index 1a00b84ed3..16daee3d34 100644 --- a/yang/frr-zebra.yang +++ b/yang/frr-zebra.yang @@ -2367,6 +2367,18 @@ module frr-zebra { "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - AdvReachableTime"; } + leaf retrans-timer { + type uint32; + units "milliseconds"; + default "0"; + description + "The value to be placed in the Retrans Timer field in + the Router Advertisement messages sent by the router. + A value of zero means unspecified (by this router)."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) + - AdvRetransTimer"; + } leaf default-lifetime { type uint16 { range "0..9000"; diff --git a/zebra/rtadv.c b/zebra/rtadv.c index 6bc1d5aded..6f14052962 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -1618,49 +1618,24 @@ DEFPY (no_ipv6_nd_ra_hop_limit, return CMD_SUCCESS; } -DEFPY (ipv6_nd_ra_retrans_interval, +DEFPY_YANG (ipv6_nd_ra_retrans_interval, ipv6_nd_ra_retrans_interval_cmd, - "ipv6 nd ra-retrans-interval (0-4294967295)$interval", - "Interface IPv6 config commands\n" - "Neighbor discovery\n" - "Advertisement Retransmit Interval\n" - "Advertisement Retransmit Interval in msec\n") -{ - VTY_DECLVAR_CONTEXT(interface, ifp); - struct zebra_if *zif = ifp->info; - - if (if_is_loopback(ifp)) { - vty_out(vty, - "Cannot configure IPv6 Router Advertisements on loopback interface\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - zif->rtadv.AdvRetransTimer = interval; - - return CMD_SUCCESS; -} - -DEFPY (no_ipv6_nd_ra_retrans_interval, - no_ipv6_nd_ra_retrans_interval_cmd, - "no ipv6 nd ra-retrans-interval [(0-4294967295)]", + "[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") { - VTY_DECLVAR_CONTEXT(interface, ifp); - struct zebra_if *zif = ifp->info; - - if (if_is_loopback(ifp)) { - vty_out(vty, - "Cannot remove IPv6 Router Advertisements on loopback interface\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - zif->rtadv.AdvRetransTimer = 0; - - return CMD_SUCCESS; + 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); } DEFPY_YANG (ipv6_nd_suppress_ra, @@ -2764,7 +2739,6 @@ void rtadv_cmd_init(void) install_element(INTERFACE_NODE, &ipv6_nd_ra_fast_retrans_cmd); install_element(INTERFACE_NODE, &no_ipv6_nd_ra_fast_retrans_cmd); install_element(INTERFACE_NODE, &ipv6_nd_ra_retrans_interval_cmd); - install_element(INTERFACE_NODE, &no_ipv6_nd_ra_retrans_interval_cmd); install_element(INTERFACE_NODE, &ipv6_nd_ra_hop_limit_cmd); install_element(INTERFACE_NODE, &no_ipv6_nd_ra_hop_limit_cmd); install_element(INTERFACE_NODE, &ipv6_nd_suppress_ra_cmd); diff --git a/zebra/zebra_nb.c b/zebra/zebra_nb.c index 380f239b36..c3640b8ee2 100644 --- a/zebra/zebra_nb.c +++ b/zebra/zebra_nb.c @@ -582,6 +582,12 @@ const struct frr_yang_module_info frr_zebra_info = { .modify = lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify, } }, + { + .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/retrans-timer", + .cbs = { + .modify = lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify, + } + }, { .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-lifetime", .cbs = { diff --git a/zebra/zebra_nb.h b/zebra/zebra_nb.h index f1efa99f73..fc75740540 100644 --- a/zebra/zebra_nb.h +++ b/zebra/zebra_nb.h @@ -193,6 +193,8 @@ int lib_interface_zebra_ipv6_router_advertisements_link_mtu_modify( struct nb_cb_modify_args *args); int lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify( struct nb_cb_modify_args *args); +int lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify( + struct nb_cb_modify_args *args); int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_modify( struct nb_cb_modify_args *args); int lib_interface_zebra_ipv6_router_advertisements_default_lifetime_destroy( diff --git a/zebra/zebra_nb_config.c b/zebra/zebra_nb_config.c index 91ed6f5e1e..3c33314788 100644 --- a/zebra/zebra_nb_config.c +++ b/zebra/zebra_nb_config.c @@ -2596,6 +2596,28 @@ int lib_interface_zebra_ipv6_router_advertisements_reachable_time_modify( return NB_OK; } +/* + * XPath: /frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/retrans-timer + */ +int lib_interface_zebra_ipv6_router_advertisements_retrans_timer_modify( + struct nb_cb_modify_args *args) +{ + struct interface *ifp; + struct zebra_if *zif; + uint32_t timer; + + if (args->event != NB_EV_APPLY) + return NB_OK; + + ifp = nb_running_get_entry(args->dnode, NULL, true); + zif = ifp->info; + timer = yang_dnode_get_uint32(args->dnode, NULL); + + zif->rtadv.AdvRetransTimer = timer; + + return NB_OK; +} + /* * XPath: /frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-lifetime */