From ed624b3ec2902c906357b362e4e83a556699db19 Mon Sep 17 00:00:00 2001 From: Mindaugas Rasiukevicius Date: Sun, 25 Jul 2021 19:48:13 +0100 Subject: [PATCH] Simplify the npfext library API. (#122) --- src/lib/ext_log/npfext_log.c | 20 ++--------------- src/lib/ext_normalize/npfext_normalize.c | 20 ++--------------- src/lib/ext_ratelimit/npfext_ratelimit.c | 20 ++--------------- src/lib/ext_rndblock/npfext_rndblock.c | 20 ++--------------- src/npfctl/npf_extmod.c | 28 ++++++++++++------------ 5 files changed, 22 insertions(+), 86 deletions(-) diff --git a/src/lib/ext_log/npfext_log.c b/src/lib/ext_log/npfext_log.c index d47e6cd4..ba540147 100644 --- a/src/lib/ext_log/npfext_log.c +++ b/src/lib/ext_log/npfext_log.c @@ -45,25 +45,9 @@ __RCSID("$NetBSD$"); #include -int npfext_log_init(void); -nl_ext_t * npfext_log_construct(const char *); -int npfext_log_param(nl_ext_t *, const char *, const char *); +int npfext_log_param(nl_ext_t *, const char *, const char *); -int -npfext_log_init(void) -{ - /* Nothing to initialise. */ - return 0; -} - -nl_ext_t * -npfext_log_construct(const char *name) -{ - assert(strcmp(name, "log") == 0); - return npf_ext_construct(name); -} - -int +__dso_public int npfext_log_param(nl_ext_t *ext, const char *param, const char *val __unused) { unsigned int if_idx; diff --git a/src/lib/ext_normalize/npfext_normalize.c b/src/lib/ext_normalize/npfext_normalize.c index d16bca3a..d93d2dae 100644 --- a/src/lib/ext_normalize/npfext_normalize.c +++ b/src/lib/ext_normalize/npfext_normalize.c @@ -35,25 +35,9 @@ __RCSID("$NetBSD$"); #include -int npfext_normalize_init(void); -nl_ext_t * npfext_normalize_construct(const char *); -int npfext_normalize_param(nl_ext_t *, const char *, const char *); +int npfext_normalize_param(nl_ext_t *, const char *, const char *); -int -npfext_normalize_init(void) -{ - /* Nothing to initialize. */ - return 0; -} - -nl_ext_t * -npfext_normalize_construct(const char *name) -{ - assert(strcmp(name, "normalize") == 0); - return npf_ext_construct(name); -} - -int +__dso_public int npfext_normalize_param(nl_ext_t *ext, const char *param, const char *val) { enum ptype { diff --git a/src/lib/ext_ratelimit/npfext_ratelimit.c b/src/lib/ext_ratelimit/npfext_ratelimit.c index 3da2c477..4f02a7ff 100644 --- a/src/lib/ext_ratelimit/npfext_ratelimit.c +++ b/src/lib/ext_ratelimit/npfext_ratelimit.c @@ -36,25 +36,9 @@ __RCSID("$NetBSD$"); #include -int npfext_ratelimit_init(void); -nl_ext_t * npfext_ratelimit_construct(const char *); -int npfext_ratelimit_param(nl_ext_t *, const char *, const char *); +int npfext_ratelimit_param(nl_ext_t *, const char *, const char *); -int -npfext_ratelimit_init(void) -{ - /* Nothing to initialisz. */ - return 0; -} - -nl_ext_t * -npfext_ratelimit_construct(const char *name) -{ - assert(strcmp(name, "ratelimit") == 0); - return npf_ext_construct(name); -} - -int +__dso_public int npfext_ratelimit_param(nl_ext_t *ext, const char *param, const char *val) { static const char *params[] = { diff --git a/src/lib/ext_rndblock/npfext_rndblock.c b/src/lib/ext_rndblock/npfext_rndblock.c index ea48cbfa..bba902bd 100644 --- a/src/lib/ext_rndblock/npfext_rndblock.c +++ b/src/lib/ext_rndblock/npfext_rndblock.c @@ -35,25 +35,9 @@ __RCSID("$NetBSD$"); #include -int npfext_rndblock_init(void); -nl_ext_t * npfext_rndblock_construct(const char *); -int npfext_rndblock_param(nl_ext_t *, const char *, const char *); +int npfext_rndblock_param(nl_ext_t *, const char *, const char *); -int -npfext_rndblock_init(void) -{ - /* Nothing to initialise. */ - return 0; -} - -nl_ext_t * -npfext_rndblock_construct(const char *name) -{ - assert(strcmp(name, "rndblock") == 0); - return npf_ext_construct(name); -} - -int +__dso_public int npfext_rndblock_param(nl_ext_t *ext, const char *param, const char *val) { enum ptype { PARAM_U32 }; diff --git a/src/npfctl/npf_extmod.c b/src/npfctl/npf_extmod.c index f469ad26..8d574c59 100644 --- a/src/npfctl/npf_extmod.c +++ b/src/npfctl/npf_extmod.c @@ -53,14 +53,14 @@ struct npf_extmod { static npf_extmod_t * npf_extmod_list; static void * -npf_extmod_sym(void *handle, const char *name, const char *func) +npf_extmod_sym(void *handle, const char *name, const char *func, bool required) { char buf[64]; void *sym; snprintf(buf, sizeof(buf), "npfext_%s_%s", name, func); sym = dlsym(handle, buf); - if (sym == NULL) { + if (required && sym == NULL) { errx(EXIT_FAILURE, "dlsym: %s", dlerror()); } return sym; @@ -81,12 +81,12 @@ npf_extmod_load(const char *name) ext = ecalloc(1, sizeof(npf_extmod_t)); ext->name = estrdup(name); - ext->init = npf_extmod_sym(handle, name, "init"); - ext->cons = npf_extmod_sym(handle, name, "construct"); - ext->param = npf_extmod_sym(handle, name, "param"); + ext->init = npf_extmod_sym(handle, name, "init", false); + ext->cons = npf_extmod_sym(handle, name, "construct", false); + ext->param = npf_extmod_sym(handle, name, "param", true); - /* Initialise the module. */ - if (ext->init() != 0) { + /* Run the initialization hook for the module, if needed. */ + if (ext->init && ext->init() != 0) { free(ext); return NULL; } @@ -102,19 +102,19 @@ npf_extmod_get(const char *name, nl_ext_t **extcall) npf_extmod_t *extmod = npf_extmod_list; while (extmod) { - if ((strcmp(extmod->name, name) == 0) && - (*extcall = extmod->cons(name)) != NULL) { - return extmod; + if (strcmp(extmod->name, name) == 0) { + goto found; } extmod = extmod->next; } extmod = npf_extmod_load(name); - if (extmod && (*extcall = extmod->cons(name)) != NULL) { - return extmod; +found: + if (!extmod) { + return NULL; } - - return NULL; + *extcall = extmod->cons ? extmod->cons(name) : npf_ext_construct(name); + return *extcall ? extmod : NULL; } int