diff options
author | Kurosawa Takahiro <takahiro.kurosawa@gmail.com> | 2021-04-13 08:50:00 +0000 |
---|---|---|
committer | Kristof Provost <kp@FreeBSD.org> | 2021-05-11 15:04:45 +0000 |
commit | e49799dcf14e7026f377d26a70fe0a3a3d15390a (patch) | |
tree | 8b0788dd824a3407cb6df0697a014445517f052d /lib/libpfctl | |
parent | 0d0eb707b43e2b222434a98265db1fe7c3e3f3a8 (diff) | |
download | src-e49799dcf14e7026f377d26a70fe0a3a3d15390a.tar.gz src-e49799dcf14e7026f377d26a70fe0a3a3d15390a.zip |
Diffstat (limited to 'lib/libpfctl')
-rw-r--r-- | lib/libpfctl/libpfctl.c | 24 | ||||
-rw-r--r-- | lib/libpfctl/libpfctl.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c index 6b191514320e..c2147e1b04c1 100644 --- a/lib/libpfctl/libpfctl.c +++ b/lib/libpfctl/libpfctl.c @@ -202,6 +202,18 @@ pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr) } static void +pfctl_nv_add_mape(nvlist_t *nvparent, const char *name, + const struct pf_mape_portset *mape) +{ + nvlist_t *nvl = nvlist_create(0); + + nvlist_add_number(nvl, "offset", mape->offset); + nvlist_add_number(nvl, "psidlen", mape->psidlen); + nvlist_add_number(nvl, "psid", mape->psid); + nvlist_add_nvlist(nvparent, name, nvl); +} + +static void pfctl_nv_add_pool(nvlist_t *nvparent, const char *name, const struct pfctl_pool *pool) { @@ -216,11 +228,20 @@ pfctl_nv_add_pool(nvlist_t *nvparent, const char *name, ports[1] = pool->proxy_port[1]; nvlist_add_number_array(nvl, "proxy_port", ports, 2); nvlist_add_number(nvl, "opts", pool->opts); + pfctl_nv_add_mape(nvl, "mape", &pool->mape); nvlist_add_nvlist(nvparent, name, nvl); } static void +pf_nvmape_to_mape(const nvlist_t *nvl, struct pf_mape_portset *mape) +{ + mape->offset = nvlist_get_number(nvl, "offset"); + mape->psidlen = nvlist_get_number(nvl, "psidlen"); + mape->psid = nvlist_get_number(nvl, "psid"); +} + +static void pf_nvpool_to_pool(const nvlist_t *nvl, struct pfctl_pool *pool) { size_t len; @@ -235,6 +256,9 @@ pf_nvpool_to_pool(const nvlist_t *nvl, struct pfctl_pool *pool) pool->tblidx = nvlist_get_number(nvl, "tblidx"); pf_nvuint_16_array(nvl, "proxy_port", 2, pool->proxy_port, NULL); pool->opts = nvlist_get_number(nvl, "opts"); + + if (nvlist_exists_nvlist(nvl, "mape")) + pf_nvmape_to_mape(nvlist_get_nvlist(nvl, "mape"), &pool->mape); } static void diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h index 921b072a7753..0f4f5c908738 100644 --- a/lib/libpfctl/libpfctl.h +++ b/lib/libpfctl/libpfctl.h @@ -43,6 +43,7 @@ struct pfctl_pool { struct pf_pooladdr *cur; struct pf_poolhashkey key; struct pf_addr counter; + struct pf_mape_portset mape; int tblidx; u_int16_t proxy_port[2]; u_int8_t opts; |