]> git.ipfire.org Git - thirdparty/nftables.git/commit
src: add dscp support
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 10 May 2016 22:21:24 +0000 (00:21 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 11 May 2016 21:01:31 +0000 (23:01 +0200)
commit16fcc85c283537ea00357e2ca4bbb561c03bc65b
tree8ab5e756ee08dca26a10c3977679e5423e786d56
parent7fbbeb1f0db7718fbfedea4e50f69a54d1bfda70
src: add dscp support

This supports both IPv4:

 # nft --debug=netlink add rule filter forward ip dscp cs1 counter
 ip filter forward
  [ payload load 1b @ network header + 1 => reg 1 ]
  [ bitwise reg 1 = (reg=1 & 0x000000fc ) ^ 0x00000000 ]
  [ cmp neq reg 1 0x00000080 ]
  [ counter pkts 0 bytes 0 ]

And also IPv6, note that in this case we take two bytes from the payload:

 # nft --debug=netlink add rule ip6 filter input ip6 dscp cs4 counter
 ip6 filter input
  [ payload load 2b @ network header + 0 => reg 1 ]
  [ bitwise reg 1 = (reg=1 & 0x0000c00f ) ^ 0x00000000 ]
  [ cmp eq reg 1 0x00000008 ]
  [ counter pkts 0 bytes 0 ]

Given the DSCP is split in two bytes, the less significant nibble
of the first byte and the two most significant 2 bits of the second
byte.

The 8 bit traffic class in RFC2460 after the version field are used for
DSCP (6 bit) and ECN (2 bit). Support for ECN comes in a follow up
patch.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
12 files changed:
doc/nft.xml
include/datatype.h
include/proto.h
src/parser_bison.y
src/proto.c
src/scanner.l
tests/py/ip/ip.t
tests/py/ip/ip.t.payload
tests/py/ip/ip.t.payload.inet
tests/py/ip6/ip6.t
tests/py/ip6/ip6.t.payload.inet
tests/py/ip6/ip6.t.payload.ip6