]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
proto: update IPv6 flowlabel offset and length according to RFC2460
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 7 Dec 2015 13:12:20 +0000 (14:12 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 11 May 2016 21:01:31 +0000 (23:01 +0200)
This is a 20 bit field according to Section 3. IPv6 Header Format.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
doc/nft.xml
src/proto.c
tests/py/ip6/ip6.t.payload.inet
tests/py/ip6/ip6.t.payload.ip6

index e4d227c119c399ff0a123a2d055c667075e811b7..19b56075e673a577e4399ae519bf19b2e8bb4616 100644 (file)
@@ -1479,7 +1479,7 @@ filter output oif eth0
                                                        <row>
                                                                <entry>flowlabel</entry>
                                                                <entry>Flow label</entry>
-                                                               <entry></entry>
+                                                               <entry>integer (20 bit)</entry>
                                                        </row>
                                                        <row>
                                                                <entry>length</entry>
index cecde0f4e6f23a37d7cb0eb4c7ae23bcd0676aaf..9e972a3673c2d4c3669929c9bbd2df39a682d0db 100644 (file)
@@ -643,7 +643,7 @@ const struct proto_desc proto_ip6 = {
        .templates      = {
                [IP6HDR_VERSION]        = HDR_BITFIELD("version", &integer_type, 0, 4),
                [IP6HDR_PRIORITY]       = HDR_BITFIELD("priority", &integer_type, 4, 4),
-               [IP6HDR_FLOWLABEL]      = IP6HDR_FIELD("flowlabel",     flow_lbl),
+               [IP6HDR_FLOWLABEL]      = HDR_BITFIELD("flowlabel", &integer_type, 12, 20),
                [IP6HDR_LENGTH]         = IP6HDR_FIELD("length",        payload_len),
                [IP6HDR_NEXTHDR]        = INET_PROTOCOL("nexthdr", struct ipv6hdr, nexthdr),
                [IP6HDR_HOPLIMIT]       = IP6HDR_FIELD("hoplimit",      hop_limit),
index 4d2ea3525446e32b936f6d9c4daed07414d3e383..3d0ae39638ece687f11ed6983399d81bd17b951f 100644 (file)
@@ -3,6 +3,7 @@ inet test-inet input
   [ meta load nfproto => reg 1 ]
   [ cmp eq reg 1 0x0000000a ]
   [ payload load 3b @ network header + 1 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x00ffff0f ) ^ 0x00000000 ]
   [ cmp eq reg 1 0x00160000 ]
 
 # ip6 flowlabel != 233
@@ -10,6 +11,7 @@ inet test-inet input
   [ meta load nfproto => reg 1 ]
   [ cmp eq reg 1 0x0000000a ]
   [ payload load 3b @ network header + 1 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x00ffff0f ) ^ 0x00000000 ]
   [ cmp neq reg 1 0x00e90000 ]
 
 # ip6 flowlabel { 33, 55, 67, 88}
@@ -20,6 +22,7 @@ inet test-inet input
   [ meta load nfproto => reg 1 ]
   [ cmp eq reg 1 0x0000000a ]
   [ payload load 3b @ network header + 1 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x00ffff0f ) ^ 0x00000000 ]
   [ lookup reg 1 set set%d ]
 
 # ip6 flowlabel { 33-55}
@@ -30,6 +33,7 @@ inet test-inet input
   [ meta load nfproto => reg 1 ]
   [ cmp eq reg 1 0x0000000a ]
   [ payload load 3b @ network header + 1 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x00ffff0f ) ^ 0x00000000 ]
   [ lookup reg 1 set set%d ]
 
 # ip6 length 22
index db59bfbe1543ec95d427ec2fe5ec8476ee653303..55286ee8aa0824f7a117fea5a4dfc6207d7cd7e2 100644 (file)
@@ -1,11 +1,13 @@
 # ip6 flowlabel 22
 ip6 test-ip6 input
   [ payload load 3b @ network header + 1 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x00ffff0f ) ^ 0x00000000 ]
   [ cmp eq reg 1 0x00160000 ]
 
 # ip6 flowlabel != 233
 ip6 test-ip6 input
   [ payload load 3b @ network header + 1 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x00ffff0f ) ^ 0x00000000 ]
   [ cmp neq reg 1 0x00e90000 ]
 
 # ip6 flowlabel { 33, 55, 67, 88}
@@ -14,6 +16,7 @@ set%d test-ip6 0
        element 00210000  : 0 [end]     element 00370000  : 0 [end]     element 00430000  : 0 [end]     element 00580000  : 0 [end]
 ip6 test-ip6 input
   [ payload load 3b @ network header + 1 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x00ffff0f ) ^ 0x00000000 ]
   [ lookup reg 1 set set%d ]
 
 # ip6 flowlabel { 33-55}
@@ -22,6 +25,7 @@ set%d test-ip6 0
        element 00000000  : 1 [end]     element 00210000  : 0 [end]     element 00380000  : 1 [end]
 ip6 test-ip6 input
   [ payload load 3b @ network header + 1 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x00ffff0f ) ^ 0x00000000 ]
   [ lookup reg 1 set set%d ]
 
 # ip6 length 22