aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/netpfil/pf/pf_nv.c15
-rw-r--r--sys/netpfil/pf/pf_nv.h35
2 files changed, 29 insertions, 21 deletions
diff --git a/sys/netpfil/pf/pf_nv.c b/sys/netpfil/pf/pf_nv.c
index 863259dbf9aa..ae9f7d99b26a 100644
--- a/sys/netpfil/pf/pf_nv.c
+++ b/sys/netpfil/pf/pf_nv.c
@@ -41,6 +41,21 @@ __FBSDID("$FreeBSD$");
#define PF_NV_IMPL_UINT(fnname, type, max) \
int \
+ pf_nv ## fnname ## _opt(const nvlist_t *nvl, const char *name, \
+ type *val, type dflt) \
+ { \
+ uint64_t raw; \
+ if (! nvlist_exists_number(nvl, name)) { \
+ *val = dflt; \
+ return (0); \
+ } \
+ raw = nvlist_get_number(nvl, name); \
+ if (raw > max) \
+ return (ERANGE); \
+ *val = (type)raw; \
+ return (0); \
+ } \
+ int \
pf_nv ## fnname(const nvlist_t *nvl, const char *name, type *val) \
{ \
uint64_t raw; \
diff --git a/sys/netpfil/pf/pf_nv.h b/sys/netpfil/pf/pf_nv.h
index 321c0425fe7f..e53d19018ffe 100644
--- a/sys/netpfil/pf/pf_nv.h
+++ b/sys/netpfil/pf/pf_nv.h
@@ -56,29 +56,22 @@ SDT_PROBE_DECLARE(pf, ioctl, nvchk, error);
goto errout; \
} while (0)
+#define PF_NV_DEF_UINT(fnname, type, max) \
+ int pf_nv ## fnname ## _opt(const nvlist_t *, const char *, \
+ type *, type); \
+ int pf_nv ## fnname(const nvlist_t *, const char *, type *); \
+ int pf_nv ## fnname ## _array(const nvlist_t *, const char *, \
+ type *,size_t, size_t *); \
+ void pf_ ## fnname ## _array_nv(nvlist_t *, const char *, \
+ const type *, size_t);
+
+PF_NV_DEF_UINT(uint8, uint8_t, UINT8_MAX);
+PF_NV_DEF_UINT(uint16, uint16_t, UINT16_MAX);
+PF_NV_DEF_UINT(uint32, uint32_t, UINT32_MAX);
+PF_NV_DEF_UINT(uint64, uint64_t, UINT64_MAX);
+
int pf_nvbinary(const nvlist_t *, const char *, void *, size_t);
int pf_nvint(const nvlist_t *, const char *, int *);
-int pf_nvuint8(const nvlist_t *, const char *, uint8_t *);
-int pf_nvuint8_array(const nvlist_t *, const char *, uint8_t *,
- size_t, size_t *);
-void pf_uint8_array_nv(nvlist_t *, const char *, const uint8_t *,
- size_t);
-int pf_nvuint16(const nvlist_t *, const char *, uint16_t *);
-int pf_nvuint16_array(const nvlist_t *, const char *, uint16_t *,
- size_t, size_t *);
-void pf_uint16_array_nv(nvlist_t *, const char *, const uint16_t *,
- size_t);
-int pf_nvuint32(const nvlist_t *, const char *, uint32_t *);
-int pf_nvuint32_array(const nvlist_t *, const char *, uint32_t *,
- size_t, size_t *);
-void pf_uint32_array_nv(nvlist_t *, const char *, const uint32_t *,
- size_t);
-int pf_nvuint64(const nvlist_t *, const char *, uint64_t *);
-int pf_nvuint64_array(const nvlist_t *, const char *, uint64_t *,
- size_t, size_t *);
-void pf_uint64_array_nv(nvlist_t *, const char *, const uint64_t *,
- size_t);
-
int pf_nvstring(const nvlist_t *, const char *, char *, size_t);
/* Translation functions */