]> git.ipfire.org Git - thirdparty/nftables.git/commit
src: add fib expression
authorFlorian Westphal <fw@strlen.de>
Thu, 15 Sep 2016 15:28:00 +0000 (17:28 +0200)
committerFlorian Westphal <fw@strlen.de>
Fri, 28 Oct 2016 11:17:44 +0000 (13:17 +0200)
commit4a75ed32132d8e2292dd276f3ea7f4edec4f3d06
tree1c095dc262a953ebb816d1770ccbdef1724e3e00
parentdfd92948a0a88a9f245e71c1cfb63ae670e6e7c1
src: add fib expression

This adds the 'fib' expression which can be used to
obtain the output interface from the route table based on either
source or destination address of a packet.

This can be used to e.g. add reverse path filtering:

 # drop if not coming from the same interface packet
 # arrived on
 # nft add rule x prerouting fib saddr . iif oif eq 0 drop

 # accept only if from eth0
 # nft add rule x prerouting fib saddr . iif oif eq "eth0" accept

 # accept if from any valid interface
 # nft add rule x prerouting fib saddr oif accept

Querying of address type is also supported.  This can be used
to e.g. only accept packets to addresses configured in the same
interface:
 # fib daddr . iif type local

Its also possible to use mark and verdict map, e.g.:
 # nft add rule x prerouting meta mark set 0xdead fib daddr . mark type vmap {
   blackhole : drop,
   prohibit : drop,
   unicast : accept
 }

Signed-off-by: Florian Westphal <fw@strlen.de>
14 files changed:
doc/nft.xml
include/datatype.h
include/expression.h
include/fib.h [new file with mode: 0644]
include/linux/netfilter/nf_tables.h
src/Makefile.am
src/evaluate.c
src/fib.c [new file with mode: 0644]
src/netlink_delinearize.c
src/netlink_linearize.c
src/parser_bison.y
src/scanner.l
tests/py/inet/fib.t [new file with mode: 0644]
tests/py/inet/fib.t.payload [new file with mode: 0644]