diff options
author | Christian Hopps <chopps@labn.net> | 2023-04-09 11:06:11 +0200 |
---|---|---|
committer | Christian Hopps <chopps@labn.net> | 2023-04-11 21:27:17 +0200 |
commit | 14ef7be7caf1e3c6183e48b059f521cf65ff81ef (patch) | |
tree | 75790260c5e8eb366d49dfc40a52f86ed74f6566 /ripd | |
parent | lib: convert if_rmap to YANG northbound (diff) | |
download | frr-14ef7be7caf1e3c6183e48b059f521cf65ff81ef.tar.xz frr-14ef7be7caf1e3c6183e48b059f521cf65ff81ef.zip |
ripd: adapt to new YANG NB if_rmap conversion
- uses YANG grouping and calls if_rmap library code to implement.
Signed-off-by: Christian Hopps <chopps@labn.net>
Diffstat (limited to 'ripd')
-rw-r--r-- | ripd/rip_nb.c | 21 | ||||
-rw-r--r-- | ripd/rip_nb.h | 12 | ||||
-rw-r--r-- | ripd/rip_nb_config.c | 90 |
3 files changed, 123 insertions, 0 deletions
diff --git a/ripd/rip_nb.c b/ripd/rip_nb.c index c332b2a5b..1a7b34add 100644 --- a/ripd/rip_nb.c +++ b/ripd/rip_nb.c @@ -166,6 +166,27 @@ const struct frr_yang_module_info frr_ripd_info = { }, }, { + .xpath = "/frr-ripd:ripd/instance/if-route-maps/if-route-map", + .cbs = { + .create = ripd_instance_if_route_maps_if_route_map_create, + .destroy = ripd_instance_if_route_maps_if_route_map_destroy, + } + }, + { + .xpath = "/frr-ripd:ripd/instance/if-route-maps/if-route-map/in-route-map", + .cbs = { + .modify = ripd_instance_if_route_maps_if_route_map_in_route_map_modify, + .destroy = ripd_instance_if_route_maps_if_route_map_in_route_map_destroy, + } + }, + { + .xpath = "/frr-ripd:ripd/instance/if-route-maps/if-route-map/out-route-map", + .cbs = { + .modify = ripd_instance_if_route_maps_if_route_map_out_route_map_modify, + .destroy = ripd_instance_if_route_maps_if_route_map_out_route_map_destroy, + } + }, + { .xpath = "/frr-ripd:ripd/instance/static-route", .cbs = { .cli_show = cli_show_rip_route, diff --git a/ripd/rip_nb.h b/ripd/rip_nb.h index a30e579e1..ebc60fefb 100644 --- a/ripd/rip_nb.h +++ b/ripd/rip_nb.h @@ -52,6 +52,18 @@ int ripd_instance_redistribute_route_map_destroy( struct nb_cb_destroy_args *args); int ripd_instance_redistribute_metric_modify(struct nb_cb_modify_args *args); int ripd_instance_redistribute_metric_destroy(struct nb_cb_destroy_args *args); +int ripd_instance_if_route_maps_if_route_map_create( + struct nb_cb_create_args *args); +int ripd_instance_if_route_maps_if_route_map_destroy( + struct nb_cb_destroy_args *args); +int ripd_instance_if_route_maps_if_route_map_in_route_map_modify( + struct nb_cb_modify_args *args); +int ripd_instance_if_route_maps_if_route_map_in_route_map_destroy( + struct nb_cb_destroy_args *args); +int ripd_instance_if_route_maps_if_route_map_out_route_map_modify( + struct nb_cb_modify_args *args); +int ripd_instance_if_route_maps_if_route_map_out_route_map_destroy( + struct nb_cb_destroy_args *args); int ripd_instance_static_route_create(struct nb_cb_create_args *args); int ripd_instance_static_route_destroy(struct nb_cb_destroy_args *args); int ripd_instance_timers_flush_interval_modify(struct nb_cb_modify_args *args); diff --git a/ripd/rip_nb_config.c b/ripd/rip_nb_config.c index 2277ddc20..343bb9bb5 100644 --- a/ripd/rip_nb_config.c +++ b/ripd/rip_nb_config.c @@ -3,6 +3,7 @@ * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro <kunihiro@zebra.org> * 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 "northbound.h" #include "libfrr.h" @@ -681,6 +683,94 @@ int ripd_instance_redistribute_metric_destroy(struct nb_cb_destroy_args *args) } /* + * XPath: /frr-ripd:ripd/instance/if-route-maps/if-route-map + */ +int ripd_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 ripd_instance_if_route_maps_if_route_map_destroy( + struct nb_cb_destroy_args *args) +{ + struct rip *rip; + + 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. + */ + + rip = nb_running_get_entry(args->dnode, NULL, true); + if_rmap_yang_destroy_cb(rip->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 rip *rip = nb_running_get_entry(dnode, NULL, true); + + if_rmap_yang_modify_cb(rip->if_rmap_ctx, dnode, type, delete); +} + +/* + * XPath: /frr-ripd:ripd/instance/if-route-maps/if-route-map/in-route-map + */ +int ripd_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 ripd_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-ripd:ripd/instance/if-route-maps/if-route-map/out-route-map + */ +int ripd_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 ripd_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-ripd:ripd/instance/static-route */ int ripd_instance_static_route_create(struct nb_cb_create_args *args) |