]> git.puffer.fish Git - mirror/frr.git/commitdiff
ripngd: adapt to new YANG NB if_rmap conversion 13242/head
authorChristian Hopps <chopps@labn.net>
Mon, 10 Apr 2023 10:32:35 +0000 (06:32 -0400)
committerChristian Hopps <chopps@labn.net>
Tue, 11 Apr 2023 19:27:17 +0000 (15:27 -0400)
- uses YANG grouping and calls if_rmap library code to implement.

Signed-off-by: Christian Hopps <chopps@labn.net>
ripngd/ripng_nb.c
ripngd/ripng_nb.h
ripngd/ripng_nb_config.c
yang/frr-ripngd.yang

index 63144d866b26bb1eefcf78e5e7761662917860b4..2f412e5197e639161d50a7e1c4362b42b35435a1 100644 (file)
@@ -114,6 +114,27 @@ const struct frr_yang_module_info frr_ripngd_info = {
                                .modify = ripngd_instance_redistribute_metric_modify,
                        },
                },
+               {
+                       .xpath = "/frr-ripngd:ripngd/instance/if-route-maps/if-route-map",
+                       .cbs = {
+                               .create = ripngd_instance_if_route_maps_if_route_map_create,
+                               .destroy = ripngd_instance_if_route_maps_if_route_map_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-ripngd:ripngd/instance/if-route-maps/if-route-map/in-route-map",
+                       .cbs = {
+                               .modify = ripngd_instance_if_route_maps_if_route_map_in_route_map_modify,
+                               .destroy = ripngd_instance_if_route_maps_if_route_map_in_route_map_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-ripngd:ripngd/instance/if-route-maps/if-route-map/out-route-map",
+                       .cbs = {
+                               .modify = ripngd_instance_if_route_maps_if_route_map_out_route_map_modify,
+                               .destroy = ripngd_instance_if_route_maps_if_route_map_out_route_map_destroy,
+                       }
+               },
                {
                        .xpath = "/frr-ripngd:ripngd/instance/static-route",
                        .cbs = {
index 675cef7c92b2dcad6932949242c71d24c672fe4e..1c0e63c24197d66c96b83780fa459e6d1b91ec6c 100644 (file)
@@ -39,6 +39,18 @@ int ripngd_instance_redistribute_route_map_destroy(
 int ripngd_instance_redistribute_metric_modify(struct nb_cb_modify_args *args);
 int ripngd_instance_redistribute_metric_destroy(
        struct nb_cb_destroy_args *args);
+int ripngd_instance_if_route_maps_if_route_map_create(
+       struct nb_cb_create_args *args);
+int ripngd_instance_if_route_maps_if_route_map_destroy(
+       struct nb_cb_destroy_args *args);
+int ripngd_instance_if_route_maps_if_route_map_in_route_map_modify(
+       struct nb_cb_modify_args *args);
+int ripngd_instance_if_route_maps_if_route_map_in_route_map_destroy(
+       struct nb_cb_destroy_args *args);
+int ripngd_instance_if_route_maps_if_route_map_out_route_map_modify(
+       struct nb_cb_modify_args *args);
+int ripngd_instance_if_route_maps_if_route_map_out_route_map_destroy(
+       struct nb_cb_destroy_args *args);
 int ripngd_instance_static_route_create(struct nb_cb_create_args *args);
 int ripngd_instance_static_route_destroy(struct nb_cb_destroy_args *args);
 int ripngd_instance_aggregate_address_create(struct nb_cb_create_args *args);
index 006bf79ce8d56cb87d8e9a77e30f6f3a13b721a2..30f707e061e989266a36e0a2c030a5a8ef2e30ac 100644 (file)
@@ -3,6 +3,7 @@
  * Copyright (C) 1998 Kunihiro Ishiguro
  * Copyright (C) 2018 NetDEF, Inc.
  *                    Renato Westphal
+ * Copyright (C) 2023 LabN Consulting, L.L.C.
  */
 
 #include <zebra.h>
@@ -13,6 +14,7 @@
 #include "prefix.h"
 #include "table.h"
 #include "command.h"
+#include "if_rmap.h"
 #include "routemap.h"
 #include "agg_table.h"
 #include "northbound.h"
@@ -502,6 +504,93 @@ int ripngd_instance_redistribute_metric_destroy(struct nb_cb_destroy_args *args)
        return NB_OK;
 }
 
+/*
+ * XPath: /frr-ripngd:ripngd/instance/if-route-maps/if-route-map
+ */
+int ripngd_instance_if_route_maps_if_route_map_create(
+       struct nb_cb_create_args *args)
+{
+       /* if_rmap is created when first routemap is added */
+       return NB_OK;
+}
+
+int ripngd_instance_if_route_maps_if_route_map_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       struct ripng *ripng;
+
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       /*
+        * YANG will prune edit deletes up to the most general deleted node so
+        * we need to handle deleting any existing state underneath and not
+        * count on those more specific callbacks being called individually.
+        */
+
+       ripng = nb_running_get_entry(args->dnode, NULL, true);
+       if_rmap_yang_destroy_cb(ripng->if_rmap_ctx, args->dnode);
+
+       return NB_OK;
+}
+
+static void if_route_map_modify(const struct lyd_node *dnode,
+                               enum if_rmap_type type, bool delete)
+{
+       struct ripng *ripng = nb_running_get_entry(dnode, NULL, true);
+
+       if_rmap_yang_modify_cb(ripng->if_rmap_ctx, dnode, type, delete);
+}
+/*
+ * XPath: /frr-ripng:ripng/instance/if-route-maps/if-route-map/in-route-map
+ */
+int ripngd_instance_if_route_maps_if_route_map_in_route_map_modify(
+       struct nb_cb_modify_args *args)
+{
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       if_route_map_modify(args->dnode, IF_RMAP_IN, false);
+
+       return NB_OK;
+}
+
+int ripngd_instance_if_route_maps_if_route_map_in_route_map_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       if_route_map_modify(args->dnode, IF_RMAP_IN, true);
+
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-ripngd:ripngd/instance/if-route-maps/if-route-map/out-route-map
+ */
+int ripngd_instance_if_route_maps_if_route_map_out_route_map_modify(
+       struct nb_cb_modify_args *args)
+{
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       if_route_map_modify(args->dnode, IF_RMAP_OUT, false);
+
+       return NB_OK;
+}
+
+int ripngd_instance_if_route_maps_if_route_map_out_route_map_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       if_route_map_modify(args->dnode, IF_RMAP_OUT, true);
+
+       return NB_OK;
+}
+
 /*
  * XPath: /frr-ripngd:ripngd/instance/static-route
  */
index d7de4c398a3516a84239daa670f5cf8bb8186790..7b2b135fb5695c71f15202ac174dd7d185d86ec1 100644 (file)
@@ -10,6 +10,9 @@ module frr-ripngd {
   import ietf-yang-types {
     prefix yang;
   }
+  import frr-if-rmap {
+    prefix frr-if-rmap;
+  }
   import frr-interface {
     prefix frr-interface;
   }
@@ -196,6 +199,9 @@ module frr-ripngd {
              is 0.";
         }
       }
+
+      uses frr-if-rmap:if-route-maps-group;
+
       leaf-list static-route {
         type inet:ipv6-prefix;
         description