]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
datatype: time_type should send milliseconds to userspace
authorPablo Neira Ayuso <pablo@netfilter.org>
Fri, 8 Jul 2016 13:12:31 +0000 (15:12 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sat, 9 Jul 2016 11:46:20 +0000 (13:46 +0200)
Kernel expects milliseconds, so fix this datatype to use
milliseconds instead of seconds.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/utils.h
src/datatype.c
tests/py/any/ct.t.payload

index 8a1dc5ef1527e4454766b420800b98df7216fdae..d88676476efb49a3856f81c680ab39098f431ab6 100644 (file)
@@ -83,6 +83,7 @@
        (void) (&_max1 == &_max2);              \
        _max1 > _max2 ? _max1 : _max2; })
 
+#define MSEC_PER_SEC   1000L
 
 /**
  * fls - find last (most-significant) bit set
index 40e14c934da3030fc460d665e193585544f2b9b7..002c4c6625bae80ee409dc30212829d41c9ca240 100644 (file)
@@ -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");
 
index 7ed333850eb8433e196b0c62006546684716d026..e64ce2ff8429d3ffeccc703be4700cf3ea69be9f 100644 (file)
@@ -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) ]