From: Anders K. Pedersen <akp@xxxxxxxxxxxx> Replace tests/files/expr-rt with Python based tests, and replace ether type with meta nfproto, which generates a bit fewer instructions. Signed-off-by: Anders K. Pedersen <akp@xxxxxxxxxxxx> --- doc/nft.xml | 6 +++--- src/evaluate.c | 4 ++-- tests/files/expr-rt | 21 --------------------- tests/py/any/rt.t | 7 +++++++ tests/py/any/rt.t.payload | 5 +++++ tests/py/inet/rt.t | 8 ++++++++ tests/py/inet/rt.t.payload | 14 ++++++++++++++ tests/py/ip/rt.t | 6 ++++++ tests/py/ip/rt.t.payload | 5 +++++ tests/py/ip6/rt0.t | 6 ++++++ tests/py/ip6/rt0.t.payload | 5 +++++ 11 files changed, 61 insertions(+), 26 deletions(-) diff --git a/doc/nft.xml b/doc/nft.xml index 1ff70b0..cc1e4a4 100644 --- a/doc/nft.xml +++ b/doc/nft.xml @@ -1315,7 +1315,7 @@ filter prerouting meta mark set 0xdead fib daddr . mark type vmap { backhole : d <para> <table frame="all"> <title>Routing expression types</title> - <tgroup cols='4' align='left' colsep='1' rowsep='1'> + <tgroup cols='3' align='left' colsep='1' rowsep='1'> <colspec colname='c1'/> <colspec colname='c2'/> <colspec colname='c3'/> @@ -1375,8 +1375,8 @@ filter output rt classid 10 # IP family dependent rt expressions ip filter output rt nexthop 192.168.0.1 ip6 filter output rt nexthop fd00::1 -inet filter ether type ip output rt nexthop 192.168.0.1 -inet filter ether type ip6 output rt nexthop fd00::1 +inet filter meta nfproto ipv4 output rt nexthop 192.168.0.1 +inet filter meta nfproto ipv6 output rt nexthop fd00::1 </programlisting> </example> </para> diff --git a/src/evaluate.c b/src/evaluate.c index a2e5dbb..79add5e 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -639,8 +639,8 @@ static int expr_evaluate_rt(struct eval_ctx *ctx, struct expr **expr) err: return expr_error(ctx->msgs, rt, - "ether type ip or ip6 must be specified before " - "routing expression"); + "meta nfproto ipv4 or ipv6 must be specified " + "before routing expression"); } /* diff --git a/tests/files/expr-rt b/tests/files/expr-rt deleted file mode 100644 index 4c15409..0000000 --- a/tests/files/expr-rt +++ /dev/null @@ -1,21 +0,0 @@ -#! nft -f - -add table ip filter -add chain ip filter output { type filter hook output priority 0 ; } - -add table ip6 filter -add chain ip6 filter output { type filter hook output priority 0 ; } - -add table inet filter -add chain inet filter output { type filter hook output priority 0 ; } - -# rt: classid (see /etc/iproute2/rt_realms) -add rule ip filter output rt classid cosmos counter -add rule ip6 filter output rt classid cosmos counter -add rule inet filter output rt classid cosmos counter - -# rt: nexthop -add rule ip filter output rt nexthop 192.168.0.1 counter -add rule ip6 filter output rt nexthop fd00::1 counter -add rule inet filter output ether type ip rt nexthop 192.168.0.1 counter -add rule inet filter output ether type ip6 rt nexthop fd00::1 counter diff --git a/tests/py/any/rt.t b/tests/py/any/rt.t new file mode 100644 index 0000000..4f65eaa --- /dev/null +++ b/tests/py/any/rt.t @@ -0,0 +1,7 @@ +:output;type filter hook input priority 0 + +*ip;test-ip4;output +*ip6;test-ip6;output +*inet;test-inet;output + +rt classid "cosmos";ok diff --git a/tests/py/any/rt.t.payload b/tests/py/any/rt.t.payload new file mode 100644 index 0000000..0e354fa --- /dev/null +++ b/tests/py/any/rt.t.payload @@ -0,0 +1,5 @@ +# rt classid "cosmos" +ip test-ip4 input + [ rt load classid => reg 1 ] + [ cmp eq reg 1 0x00000000 ] + diff --git a/tests/py/inet/rt.t b/tests/py/inet/rt.t new file mode 100644 index 0000000..f2dcbdc --- /dev/null +++ b/tests/py/inet/rt.t @@ -0,0 +1,8 @@ +:output;type filter hook input priority 0 + +*inet;test-inet;output + +rt nexthop 192.168.0.1;fail +rt nexthop fd00::1;fail +meta nfproto ipv4 rt nexthop 192.168.0.1;ok +meta nfproto ipv6 rt nexthop fd00::1;ok diff --git a/tests/py/inet/rt.t.payload b/tests/py/inet/rt.t.payload new file mode 100644 index 0000000..d94973e --- /dev/null +++ b/tests/py/inet/rt.t.payload @@ -0,0 +1,14 @@ +# meta nfproto ipv4 rt nexthop 192.168.0.1 +inet test-inet output + [ meta load nfproto => reg 1 ] + [ cmp eq reg 1 0x00000002 ] + [ rt load nexthop4 => reg 1 ] + [ cmp eq reg 1 0x0100a8c0 ] + +# meta nfproto ipv6 rt nexthop fd00::1 +inet test-inet output + [ meta load nfproto => reg 1 ] + [ cmp eq reg 1 0x0000000a ] + [ rt load nexthop6 => reg 1 ] + [ cmp eq reg 1 0x000000fd 0x00000000 0x00000000 0x01000000 ] + diff --git a/tests/py/ip/rt.t b/tests/py/ip/rt.t new file mode 100644 index 0000000..99750c5 --- /dev/null +++ b/tests/py/ip/rt.t @@ -0,0 +1,6 @@ +:output;type filter hook input priority 0 + +*ip;test-ip4;output + +rt nexthop 192.168.0.1;ok +rt nexthop fd00::1;fail diff --git a/tests/py/ip/rt.t.payload b/tests/py/ip/rt.t.payload new file mode 100644 index 0000000..93eef4a --- /dev/null +++ b/tests/py/ip/rt.t.payload @@ -0,0 +1,5 @@ +# rt nexthop 192.168.0.1 +ip test-ip4 output + [ rt load nexthop4 => reg 1 ] + [ cmp eq reg 1 0x0100a8c0 ] + diff --git a/tests/py/ip6/rt0.t b/tests/py/ip6/rt0.t new file mode 100644 index 0000000..92614de --- /dev/null +++ b/tests/py/ip6/rt0.t @@ -0,0 +1,6 @@ +:output;type filter hook input priority 0 + +*ip6;test-ip6;output + +rt nexthop 192.168.0.1;fail +rt nexthop fd00::1;ok diff --git a/tests/py/ip6/rt0.t.payload b/tests/py/ip6/rt0.t.payload new file mode 100644 index 0000000..464b7f2 --- /dev/null +++ b/tests/py/ip6/rt0.t.payload @@ -0,0 +1,5 @@ +# rt nexthop fd00::1 +ip6 test-ip6 output + [ rt load nexthop6 => reg 1 ] + [ cmp eq reg 1 0x000000fd 0x00000000 0x00000000 0x01000000 ] + ��.n��������+%������w��{.n����z�����n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�