path: root/tests/py/inet/snat.t
diff options
authorFlorian Westphal <>2019-02-02 00:36:51 +0100
committerFlorian Westphal <>2019-04-09 10:36:16 +0200
commitfbe27464dee4588d90649274925145421c84b449 (patch)
tree15433842e30b980c784b867cae558b46e109c6aa /tests/py/inet/snat.t
parent16ee51d84e0879b2bdc1135b75455f0cde3ed226 (diff)
src: add nat support for the inet family
consider a simple ip6 nat table: table ip6 nat { chain output { type nat hook output priority 0; policy accept; dnat to dead:2::99 } Now consider same ruleset, but using 'table inet nat': nft now lacks context to determine address family to parse 'to $address'. This adds code to make the following work: table inet nat { [ .. ] # detect af from network protocol context: ip6 daddr dead::2::1 dnat to dead:2::99 # use new dnat ip6 keyword: dnat ip6 to dead:2::99 } On list side, the keyword is only shown in the inet family, else the short version (dnat to ...) is used as the family is redundant when the table already mandates the ip protocol version supported. Address mismatches such as table ip6 { .. dnat ip to are detected/handled during the evaluation phase. Signed-off-by: Florian Westphal <> Acked-by: Pablo Neira Ayuso <>
Diffstat (limited to 'tests/py/inet/snat.t')
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/py/inet/snat.t b/tests/py/inet/snat.t
new file mode 100644
index 00000000..cf23b5cf
--- /dev/null
+++ b/tests/py/inet/snat.t
@@ -0,0 +1,21 @@
+:postrouting;type nat hook postrouting priority 0
+# explicit family: 'snat to ip':
+iifname "eth0" tcp dport 81 snat ip to;ok
+# infer snat target family from network header base:
+iifname "eth0" tcp dport 81 ip saddr snat to;ok;iifname "eth0" tcp dport 81 ip saddr snat ip to
+iifname "eth0" tcp dport 81 snat ip6 to dead::beef;ok
+iifname "foo" masquerade random;ok
+snat to;fail
+snat ip6 to;fail
+snat to dead::beef;fail
+snat ip to dead::beef;fail
+snat ip daddr to dead::beef;fail
+snat ip daddr ip6 to dead::beef;fail
+snat ip6 saddr dead::beef to;fail