From 1ff8a24869413fd3ab6c09327c6ade0201a4de2b Mon Sep 17 00:00:00 2001 From: Mark Stapp Date: Thu, 10 Jan 2019 13:50:33 -0500 Subject: [PATCH] zebra: return dataplane provider plugin handle When a dataplane provider/plugin registers, return the new handle/object - that's needed to use some provider apis later on. Signed-off-by: Mark Stapp --- zebra/zebra_dplane.c | 10 +++++++--- zebra/zebra_dplane.h | 6 ++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index 79e9e7edad..c7713c85f9 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -991,7 +991,8 @@ int dplane_provider_register(const char *name, int (*fp)(struct zebra_dplane_provider *), int (*fini_fp)(struct zebra_dplane_provider *, bool early), - void *data) + void *data, + struct zebra_dplane_provider **prov_p) { int ret = 0; struct zebra_dplane_provider *p, *last; @@ -1055,6 +1056,9 @@ int dplane_provider_register(const char *name, p->dp_name, p->dp_id, p->dp_priority); done: + if (prov_p) + *prov_p = p; + return ret; } @@ -1349,7 +1353,7 @@ static void dplane_provider_init(void) DPLANE_PROV_FLAGS_DEFAULT, kernel_dplane_process_func, NULL, - NULL); + NULL, NULL); if (ret != AOK) zlog_err("Unable to register kernel dplane provider: %d", @@ -1362,7 +1366,7 @@ static void dplane_provider_init(void) DPLANE_PROV_FLAGS_DEFAULT, test_dplane_process_func, test_dplane_shutdown_func, - NULL /* data */); + NULL /* data */, NULL); if (ret != AOK) zlog_err("Unable to register test dplane provider: %d", diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h index 1d23ef0f82..1c053b85bf 100644 --- a/zebra/zebra_dplane.h +++ b/zebra/zebra_dplane.h @@ -258,7 +258,8 @@ enum dplane_provider_prio { /* Provider registration: ordering or priority value, callbacks, and optional - * opaque data value. + * opaque data value. If 'prov_p', return the newly-allocated provider object + * on success. */ /* Providers offer an entry-point for incoming work, called in the context of @@ -279,7 +280,8 @@ int dplane_provider_register(const char *name, int (*fp)(struct zebra_dplane_provider *), int (*fini_fp)(struct zebra_dplane_provider *, bool early), - void *data); + void *data, + struct zebra_dplane_provider **prov_p); /* Accessors for provider attributes */ const char *dplane_provider_get_name(const struct zebra_dplane_provider *prov); -- 2.39.5