diff options
author | Jan Engelhardt <jengelh@medozas.de> | 2011-02-27 19:03:28 +0100 |
---|---|---|
committer | Jan Engelhardt <jengelh@medozas.de> | 2011-04-06 13:12:55 +0200 |
commit | dfe99f1bf291b4b954d3608dbe95a43e16a8bb49 (patch) | |
tree | 9110ff4ec68214bcda0ae4bf4da5c8c5ad7b2f72 | |
parent | b18ffe3636b07cd817628de81643136e4755a944 (diff) |
libxtables: XTTYPE_UINT8 support
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
-rw-r--r-- | include/xtables.h.in | 2 | ||||
-rw-r--r-- | xtoptions.c | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/include/xtables.h.in b/include/xtables.h.in index 14d7b043..dc074bc0 100644 --- a/include/xtables.h.in +++ b/include/xtables.h.in @@ -51,6 +51,7 @@ struct in_addr; */ enum xt_option_type { XTTYPE_NONE, + XTTYPE_UINT8, XTTYPE_UINT32, }; @@ -104,6 +105,7 @@ struct xt_option_call { unsigned int xflags; bool invert; union { + uint8_t u8; uint32_t u32; } val; }; diff --git a/xtoptions.c b/xtoptions.c index 6a119ec7..693c06d6 100644 --- a/xtoptions.c +++ b/xtoptions.c @@ -89,6 +89,8 @@ static void xtopt_parse_int(struct xt_option_call *cb) unsigned int lmin = 0, lmax = UINT32_MAX; unsigned int value; + if (entry->type == XTTYPE_UINT8) + lmax = UINT8_MAX; if (cb->entry->min != 0) lmin = cb->entry->min; if (cb->entry->max != 0) @@ -100,7 +102,11 @@ static void xtopt_parse_int(struct xt_option_call *cb) "or out of range (%u-%u).\n", cb->ext_name, entry->name, lmin, lmax); - if (entry->type == XTTYPE_UINT32) { + if (entry->type == XTTYPE_UINT8) { + cb->val.u8 = value; + if (entry->flags & XTOPT_PUT) + *(uint8_t *)XTOPT_MKPTR(cb) = cb->val.u8; + } else if (entry->type == XTTYPE_UINT32) { cb->val.u32 = value; if (entry->flags & XTOPT_PUT) *(uint32_t *)XTOPT_MKPTR(cb) = cb->val.u32; @@ -108,10 +114,12 @@ static void xtopt_parse_int(struct xt_option_call *cb) } static void (*const xtopt_subparse[])(struct xt_option_call *) = { + [XTTYPE_UINT8] = xtopt_parse_int, [XTTYPE_UINT32] = xtopt_parse_int, }; static const size_t xtopt_psize[] = { + [XTTYPE_UINT8] = sizeof(uint8_t), [XTTYPE_UINT32] = sizeof(uint32_t), }; |