]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: convert interface ipv6 nd router-preference command to NB
authorIgor Ryzhov <iryzhov@nfware.com>
Tue, 23 Jan 2024 16:57:29 +0000 (18:57 +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 384585332f3a2934a4a9f21436176bb33e32e4f8..1433cb23c58b4c5711abd93dcec6ffa63efd48b1 100644 (file)
@@ -2467,6 +2467,33 @@ module frr-zebra {
           reference
             "RFC 6275: Mobility Support in IPv6";
         }
+        leaf default-router-preference {
+          type enumeration {
+            enum high {
+              value 1; /* 01 */
+              description
+                "High preference.";
+            }
+            enum medium {
+              value 0; /* 00 */
+              description
+                "Medium preference.";
+            }
+            enum low {
+              value 3; /* 11 */
+              description
+                "Low preference.";
+            }
+          }
+          default "medium";
+          description
+            "The value to be placed in the Default Router
+            Preference field in the Router Advertisement messages
+            sent by the router.";
+          reference
+            "RFC 4191: Default Router Preferences and More-Specific
+                       Routes";
+        }
       }
       container state {
         config false;
index e44cf547da01166c489f52103a351c5566d9950d..fb037a00f250f27dab6ec3a3aad5343accd1739c 100644 (file)
@@ -1919,37 +1919,9 @@ DEFUN (no_ipv6_nd_prefix,
        return CMD_SUCCESS;
 }
 
-DEFUN (ipv6_nd_router_preference,
+DEFPY_YANG (ipv6_nd_router_preference,
        ipv6_nd_router_preference_cmd,
-       "ipv6 nd router-preference <high|medium|low>",
-       "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")
-{
-       int idx_high_medium_low = 3;
-       VTY_DECLVAR_CONTEXT(interface, ifp);
-       struct zebra_if *zif = ifp->info;
-       int i = 0;
-
-       while (0 != rtadv_pref_strs[i]) {
-               if (strncmp(argv[idx_high_medium_low]->arg, rtadv_pref_strs[i],
-                           1)
-                   == 0) {
-                       zif->rtadv.DefaultPreference = i;
-                       return CMD_SUCCESS;
-               }
-               i++;
-       }
-
-       return CMD_ERR_NO_MATCH;
-}
-
-DEFUN (no_ipv6_nd_router_preference,
-       no_ipv6_nd_router_preference_cmd,
-       "no ipv6 nd router-preference [<high|medium|low>]",
+       "[no] ipv6 nd router-preference ![<high|medium|low>$pref]",
        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
@@ -1958,13 +1930,15 @@ DEFUN (no_ipv6_nd_router_preference,
        "Medium default router preference (default)\n"
        "Low default router preference\n")
 {
-       VTY_DECLVAR_CONTEXT(interface, ifp);
-       struct zebra_if *zif = ifp->info;
-
-       zif->rtadv.DefaultPreference =
-               RTADV_PREF_MEDIUM; /* Default per RFC4191. */
-
-       return CMD_SUCCESS;
+       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);
 }
 
 DEFPY_YANG (ipv6_nd_mtu,
@@ -2654,7 +2628,6 @@ void rtadv_cmd_init(void)
        install_element(INTERFACE_NODE, &ipv6_nd_prefix_cmd);
        install_element(INTERFACE_NODE, &no_ipv6_nd_prefix_cmd);
        install_element(INTERFACE_NODE, &ipv6_nd_router_preference_cmd);
-       install_element(INTERFACE_NODE, &no_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, &no_ipv6_nd_rdnss_cmd);
index f4368ec2a800a7e5102912552bb2b065482e945e..794ccfadcb4b08b45a34cd3ad5579e0c8ceb2adc 100644 (file)
@@ -634,6 +634,12 @@ const struct frr_yang_module_info frr_zebra_info = {
                                .destroy = lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_destroy,
                        }
                },
+               {
+                       .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,
+                       }
+               },
                {
                        .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/up-count",
                        .cbs = {
index bf4c37f10de32f4738245c1ede3a1343803876dc..ebe86769dcca1b71183e7a6744b4ff69e50faaca 100644 (file)
@@ -217,6 +217,8 @@ int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_modify(
        struct nb_cb_modify_args *args);
 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);
 struct yang_data *
 lib_interface_zebra_state_up_count_get_elem(struct nb_cb_get_elem_args *args);
 struct yang_data *
index 870cb97df3df792e95a2945aaeab44b6c714e4ba..83f691ffe42387dcf817b33be837d7039058da18 100644 (file)
@@ -2846,6 +2846,29 @@ int lib_interface_zebra_ipv6_router_advertisements_home_agent_lifetime_destroy(
        return NB_OK;
 }
 
+/*
+ * XPath: /frr-interface:lib/interface/frr-zebra:zebra/ipv6-router-advertisements/default-router-preference
+ */
+int lib_interface_zebra_ipv6_router_advertisements_default_router_preference_modify(
+       struct nb_cb_modify_args *args)
+{
+       struct interface *ifp;
+       struct zebra_if *zif;
+       int 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_enum(args->dnode, NULL);
+
+       zif->rtadv.DefaultPreference = preference;
+
+       return NB_OK;
+}
+
 /*
  * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/l3vni-id
  */