summaryrefslogtreecommitdiff
path: root/lib/vrf.c
diff options
context:
space:
mode:
authorChristian Hopps <chopps@labn.net>2023-10-20 04:53:05 -0400
committerChristian Hopps <chopps@labn.net>2023-12-28 17:53:40 +0000
commitd266b1cc9c454579a175dd3efac238e40e64cd4a (patch)
tree187ec26d0d28f4ffa818d136b69217a7aacd734d /lib/vrf.c
parentef91d34f01bcabb23a631523e31fceb973b711a3 (diff)
zebra: support yielding between oper state routes query
Signed-off-by: Christian Hopps <chopps@labn.net>
Diffstat (limited to 'lib/vrf.c')
-rw-r--r--lib/vrf.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/vrf.c b/lib/vrf.c
index 808edd4ae4..5537f71254 100644
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -987,6 +987,19 @@ static const void *lib_vrf_lookup_entry(struct nb_cb_lookup_entry_args *args)
return vrf;
}
+static const void *lib_vrf_lookup_next(struct nb_cb_lookup_entry_args *args)
+{
+ const char *vrfname = args->keys->key[0];
+ struct vrf vrfkey, *vrf;
+
+ strlcpy(vrfkey.name, vrfname, sizeof(vrfkey.name));
+ vrf = RB_FIND(vrf_name_head, &vrfs_by_name, &vrfkey);
+ if (!strcmp(vrf->name, vrfname))
+ vrf = RB_NEXT(vrf_name_head, vrf);
+
+ return vrf;
+}
+
/*
* XPath: /frr-vrf:lib/vrf/id
*/
@@ -1024,6 +1037,7 @@ const struct frr_yang_module_info frr_vrf_info = {
.get_next = lib_vrf_get_next,
.get_keys = lib_vrf_get_keys,
.lookup_entry = lib_vrf_lookup_entry,
+ .lookup_next = lib_vrf_lookup_next,
},
.priority = NB_DFLT_PRIORITY - 2,
},