]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: convert interface ipv6 nd home-agent-preference command to NB
authorIgor Ryzhov <iryzhov@nfware.com>
Tue, 23 Jan 2024 16:30:29 +0000 (18:30 +0200)
committerIgor Ryzhov <iryzhov@nfware.com>
Sun, 28 Jan 2024 21:28:40 +0000 (23:28 +0200)
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
yang/frr-zebra.yang
zebra/rtadv.c
zebra/zebra_nb.c
zebra/zebra_nb.h
zebra/zebra_nb_config.c

index f60b325d1ea560308e430b438f7c24d48603301d..e425fc14432b4d5f12be71e3812d1736566ae72e 100644 (file)
@@ -2449,6 +2449,15 @@ module frr-zebra {
           reference
             "RFC 6275: Mobility Support in IPv6";
         }
+        leaf home-agent-preference {
+          type uint16;
+          description
+            "The value to be placed in the Home Agent Preference
+            field in the Router Advertisement messages sent by the
+            router.";
+          reference
+            "RFC 6275: Mobility Support in IPv6";
+        }
       }
       container state {
         config false;
index 96c7773b6aacb886f137f2c7e85ec308c184a1cd..dfab33d9f5ea4de4bafe14628da5e9e631be0add 100644 (file)
@@ -1678,37 +1678,24 @@ DEFPY_YANG (ipv6_nd_reachable_time,
        return nb_cli_apply_changes(vty, NULL);
 }
 
-DEFUN (ipv6_nd_homeagent_preference,
+DEFPY_YANG (ipv6_nd_homeagent_preference,
        ipv6_nd_homeagent_preference_cmd,
-       "ipv6 nd home-agent-preference (0-65535)",
-       "Interface IPv6 config commands\n"
-       "Neighbor discovery\n"
-       "Home Agent preference\n"
-       "preference value (default is 0, least preferred)\n")
-{
-       int idx_number = 3;
-       VTY_DECLVAR_CONTEXT(interface, ifp);
-       struct zebra_if *zif = ifp->info;
-       zif->rtadv.HomeAgentPreference =
-               strtoul(argv[idx_number]->arg, NULL, 10);
-       return CMD_SUCCESS;
-}
-
-DEFUN (no_ipv6_nd_homeagent_preference,
-       no_ipv6_nd_homeagent_preference_cmd,
-       "no ipv6 nd home-agent-preference [(0-65535)]",
+       "[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")
 {
-       VTY_DECLVAR_CONTEXT(interface, ifp);
-       struct zebra_if *zif = ifp->info;
-
-       zif->rtadv.HomeAgentPreference = 0;
-
-       return CMD_SUCCESS;
+       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);
 }
 
 DEFUN (ipv6_nd_homeagent_lifetime,
@@ -2674,7 +2661,6 @@ void rtadv_cmd_init(void)
        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, &no_ipv6_nd_homeagent_preference_cmd);
        install_element(INTERFACE_NODE, &ipv6_nd_homeagent_lifetime_cmd);
        install_element(INTERFACE_NODE, &no_ipv6_nd_homeagent_lifetime_cmd);
        install_element(INTERFACE_NODE, &ipv6_nd_adv_interval_config_option_cmd);
index 748c791f8ef1e84de2b2a0fc2bad56438a3bb81a..71f9ae8e7b6dfeb0abd8f348a64b9a5f5c09576a 100644 (file)
@@ -620,6 +620,13 @@ const struct frr_yang_module_info frr_zebra_info = {
                                .modify = lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_modify,
                        }
                },
+               {
+                       .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,
+                               .destroy = lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_destroy,
+                       }
+               },
                {
                        .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/up-count",
                        .cbs = {
index aaddfaac36cb2a1c4eb37a978e27171d58dce2fe..ef01f10f497b73c457be33bb8fca95bb7737253c 100644 (file)
@@ -209,6 +209,10 @@ int lib_interface_zebra_ipv6_router_advertisements_fast_retransmit_modify(
        struct nb_cb_modify_args *args);
 int lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option_modify(
        struct nb_cb_modify_args *args);
+int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_destroy(
+       struct nb_cb_destroy_args *args);
 struct yang_data *
 lib_interface_zebra_state_up_count_get_elem(struct nb_cb_get_elem_args *args);
 struct yang_data *
index 07cdf7f2392ccb10f7ca031c963ff1c209ded94d..433b9cda751b6bed2508b61607259978ca5a900b 100644 (file)
@@ -2766,6 +2766,46 @@ int lib_interface_zebra_ipv6_router_advertisements_advertisement_interval_option
        return NB_OK;
 }
 
+/*
+ * XPath: /frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/home-agent-preference
+ */
+int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_modify(
+       struct nb_cb_modify_args *args)
+{
+       struct interface *ifp;
+       struct zebra_if *zif;
+       uint16_t preference;
+
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       ifp = nb_running_get_entry(args->dnode, NULL, true);
+       zif = ifp->info;
+
+       preference = yang_dnode_get_uint16(args->dnode, NULL);
+
+       zif->rtadv.HomeAgentPreference = preference;
+
+       return NB_OK;
+}
+
+int lib_interface_zebra_ipv6_router_advertisements_home_agent_preference_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       struct interface *ifp;
+       struct zebra_if *zif;
+
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       ifp = nb_running_get_entry(args->dnode, NULL, true);
+       zif = ifp->info;
+
+       zif->rtadv.HomeAgentPreference = 0;
+
+       return NB_OK;
+}
+
 /*
  * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/l3vni-id
  */