]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
libxtables: XTTYPE_UINT64RC support
authorJan Engelhardt <jengelh@medozas.de>
Sun, 6 Mar 2011 16:13:54 +0000 (17:13 +0100)
committerJan Engelhardt <jengelh@medozas.de>
Wed, 13 Apr 2011 16:09:26 +0000 (18:09 +0200)
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
include/xtables.h.in
xtoptions.c

index 8f65b0532436ab687dca597f61d481e34a9e482d..325c04c4b6a8fcd54230414283aa7dc6220edb38 100644 (file)
@@ -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;
                };
index babc82764c096bc3cf6e8c424fea36d28ae53ef6..a74938fa06e92fb3bf2985c7d42bebca83313f91 100644 (file)
@@ -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,
 };