From bc438c4cbdab09fafbbceecddd54e44e4234a4a1 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Sun, 6 Mar 2011 17:13:54 +0100 Subject: libxtables: XTTYPE_UINT64RC support Signed-off-by: Jan Engelhardt --- include/xtables.h.in | 3 ++- xtoptions.c | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/xtables.h.in b/include/xtables.h.in index 8f65b053..325c04c4 100644 --- a/include/xtables.h.in +++ b/include/xtables.h.in @@ -60,6 +60,7 @@ enum xt_option_type { XTTYPE_UINT8RC, XTTYPE_UINT16RC, XTTYPE_UINT32RC, + XTTYPE_UINT64RC, XTTYPE_STRING, XTTYPE_MARKMASK32, }; @@ -119,7 +120,7 @@ struct xt_option_call { uint8_t u8, u8_range[2]; uint16_t u16_range[2]; uint32_t u32, u32_range[2]; - uint64_t u64; + uint64_t u64, u64_range[2]; struct { uint32_t mark, mask; }; diff --git a/xtoptions.c b/xtoptions.c index babc8276..a74938fa 100644 --- a/xtoptions.c +++ b/xtoptions.c @@ -143,6 +143,8 @@ static void xtopt_parse_mint(struct xt_option_call *cb) esize = sizeof(uint8_t); else if (entry->type == XTTYPE_UINT16RC) esize = sizeof(uint16_t); + else if (entry->type == XTTYPE_UINT64RC) + esize = sizeof(uint64_t); maxiter = entry->size / esize; if (maxiter == 0) maxiter = 2; /* ARRAY_SIZE(cb->val.uXX_range) */ @@ -173,6 +175,8 @@ static void xtopt_parse_mint(struct xt_option_call *cb) cb->val.u16_range[cb->nvals] = value; else if (entry->type == XTTYPE_UINT32RC) cb->val.u32_range[cb->nvals] = value; + else if (entry->type == XTTYPE_UINT64RC) + cb->val.u64_range[cb->nvals] = value; } if (entry->flags & XTOPT_PUT) { if (entry->type == XTTYPE_UINT8RC) @@ -181,6 +185,8 @@ static void xtopt_parse_mint(struct xt_option_call *cb) *(uint16_t *)put = value; else if (entry->type == XTTYPE_UINT32RC) *(uint32_t *)put = value; + else if (entry->type == XTTYPE_UINT64RC) + *(uint64_t *)put = value; put += esize; } if (*end == '\0') @@ -246,6 +252,7 @@ static void (*const xtopt_subparse[])(struct xt_option_call *) = { [XTTYPE_UINT8RC] = xtopt_parse_mint, [XTTYPE_UINT16RC] = xtopt_parse_mint, [XTTYPE_UINT32RC] = xtopt_parse_mint, + [XTTYPE_UINT64RC] = xtopt_parse_mint, [XTTYPE_STRING] = xtopt_parse_string, [XTTYPE_MARKMASK32] = xtopt_parse_markmask, }; @@ -257,6 +264,7 @@ static const size_t xtopt_psize[] = { [XTTYPE_UINT8RC] = sizeof(uint8_t[2]), [XTTYPE_UINT16RC] = sizeof(uint16_t[2]), [XTTYPE_UINT32RC] = sizeof(uint32_t[2]), + [XTTYPE_UINT64RC] = sizeof(uint64_t[2]), [XTTYPE_STRING] = -1, }; -- cgit v1.2.3