====== nftables ======
===== Traffic Shaping with nftables and tc =====
Using shell commands:
nft add table ip filter
nft add map filter deucalion { type ipv4_addr : classid\; }
Using nftables file:
table ip filter {
map deucalion {
type ipv4_addr : classid;
elements = { 1.1.1.2 : 2:2222, 1.1.1.3 : 3:3333 }
}
chain input {
type filter hook input priority 0; policy accept;
meta priority set ip daddr map @deucalion;
}
}
==== Patch ====
This patch is already merged upstream (as of 2018 Archlinux and Ubuntu have it, Debian not yet!):
* https://www.spinics.net/lists/netfilter/msg57694.html
* https://www.spinics.net/lists/netfilter/threads.html#57694
You need it if nft shows this error:
:1:45-51: Error: syntax error, unexpected classid, expecting string or dscp or ecn or mark
add map filter deucalion { type ipv4_addr : classid; }
^^^^^^^
:1:26-52: Error: map definition does not specify key data type
add map filter deucalion { type ipv4_addr : classid; }
^^^^^^^^^^^^^^^^^^^^^^^^^^^
parser: allow classid as set key
From: Arturo Borrero Gonzalez
Allow TC classid as set key.
Signed-off-by: Arturo Borrero Gonzalez
---
src/parser_bison.y | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/parser_bison.y b/src/parser_bison.y
index 7016f5b..2918875 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -1545,6 +1545,7 @@ type_identifier : STRING { $$ = $1; }
| MARK { $$ = xstrdup("mark"); }
| DSCP { $$ = xstrdup("dscp"); }
| ECN { $$ = xstrdup("ecn"); }
+ | CLASSID { $$ = xstrdup("classid"); }
;
hook_spec : TYPE STRING HOOK STRING dev_spec PRIORITY prio_spec