summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2016-07-08 15:12:31 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2016-07-09 13:46:20 +0200
commit82dfc87c85f00acfa0d46369ae3f66c26a93f502 (patch)
tree566d6dfde5c352b6b366f97afde757f624f2b2f5
parent90c899d46a8f67540fad4ad156f4254fafb4a08d (diff)
datatype: time_type should send milliseconds to userspace
Kernel expects milliseconds, so fix this datatype to use milliseconds instead of seconds. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--include/utils.h1
-rw-r--r--src/datatype.c3
-rw-r--r--tests/py/any/ct.t.payload18
3 files changed, 12 insertions, 10 deletions
diff --git a/include/utils.h b/include/utils.h
index 8a1dc5ef..d8867647 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -83,6 +83,7 @@
(void) (&_max1 == &_max2); \
_max1 > _max2 ? _max1 : _max2; })
+#define MSEC_PER_SEC 1000L
/**
* fls - find last (most-significant) bit set
diff --git a/src/datatype.c b/src/datatype.c
index 40e14c93..002c4c66 100644
--- a/src/datatype.c
+++ b/src/datatype.c
@@ -883,7 +883,7 @@ struct error_record *time_parse(const struct location *loc, const char *str,
static void time_type_print(const struct expr *expr)
{
- time_print(mpz_get_uint64(expr->value));
+ time_print(mpz_get_uint64(expr->value) / MSEC_PER_SEC);
}
static struct error_record *time_type_parse(const struct expr *sym,
@@ -896,6 +896,7 @@ static struct error_record *time_type_parse(const struct expr *sym,
if (erec != NULL)
return erec;
+ s *= MSEC_PER_SEC;
if (s > UINT32_MAX)
return error(&sym->location, "value too large");
diff --git a/tests/py/any/ct.t.payload b/tests/py/any/ct.t.payload
index 7ed33385..e64ce2ff 100644
--- a/tests/py/any/ct.t.payload
+++ b/tests/py/any/ct.t.payload
@@ -198,36 +198,36 @@ ip test-ip4 output
# ct expiration 30
ip test-ip4 output
[ ct load expiration => reg 1 ]
- [ cmp eq reg 1 0x0000001e ]
+ [ cmp eq reg 1 0x00007530 ]
# ct expiration 22
ip test-ip4 output
[ ct load expiration => reg 1 ]
- [ cmp eq reg 1 0x00000016 ]
+ [ cmp eq reg 1 0x000055f0 ]
# ct expiration != 233
ip test-ip4 output
[ ct load expiration => reg 1 ]
- [ cmp neq reg 1 0x000000e9 ]
+ [ cmp neq reg 1 0x00038e28 ]
# ct expiration 33-45
ip test-ip4 output
[ ct load expiration => reg 1 ]
[ byteorder reg 1 = hton(reg 1, 4, 4) ]
- [ cmp gte reg 1 0x21000000 ]
- [ cmp lte reg 1 0x2d000000 ]
+ [ cmp gte reg 1 0xe8800000 ]
+ [ cmp lte reg 1 0xc8af0000 ]
# ct expiration != 33-45
ip test-ip4 output
[ ct load expiration => reg 1 ]
[ byteorder reg 1 = hton(reg 1, 4, 4) ]
- [ cmp lt reg 1 0x21000000 ]
- [ cmp gt reg 1 0x2d000000 ]
+ [ cmp lt reg 1 0xe8800000 ]
+ [ cmp gt reg 1 0xc8af0000 ]
# ct expiration {33, 55, 67, 88}
__set%d test-ip4 3
__set%d test-ip4 0
- element 00000021 : 0 [end] element 00000037 : 0 [end] element 00000043 : 0 [end] element 00000058 : 0 [end]
+ element 000080e8 : 0 [end] element 0000d6d8 : 0 [end] element 000105b8 : 0 [end] element 000157c0 : 0 [end]
ip test-ip4 output
[ ct load expiration => reg 1 ]
[ lookup reg 1 set __set%d ]
@@ -235,7 +235,7 @@ ip test-ip4 output
# ct expiration {33-55}
__set%d test-ip4 7
__set%d test-ip4 0
- element 00000000 : 1 [end] element 21000000 : 0 [end] element 38000000 : 1 [end]
+ element 00000000 : 1 [end] element e8800000 : 0 [end] element d9d60000 : 1 [end]
ip test-ip4 output
[ ct load expiration => reg 1 ]
[ byteorder reg 1 = hton(reg 1, 4, 4) ]