diff options
-rw-r--r-- | src/netlink_delinearize.c | 1 | ||||
-rw-r--r-- | tests/py/ip/tcp.t | 6 | ||||
-rw-r--r-- | tests/py/ip/tcp.t.payload | 18 |
3 files changed, 25 insertions, 0 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index 76d598ca..2732c965 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -1042,6 +1042,7 @@ static void payload_match_expand(struct rule_pp_ctx *ctx, * payload expression. */ if (ctx->pbase == PROTO_BASE_INVALID && + expr->op == OP_EQ && left->flags & EXPR_F_PROTOCOL) { unsigned int proto = mpz_get_be16(tmp->value); const struct proto_desc *desc, *next; diff --git a/tests/py/ip/tcp.t b/tests/py/ip/tcp.t new file mode 100644 index 00000000..4dcfcb6b --- /dev/null +++ b/tests/py/ip/tcp.t @@ -0,0 +1,6 @@ +:input;type filter hook input priority 0 + +*ip;test-ip;input + +ip protocol tcp tcp dport ssh accept;ok;tcp dport 22 accept +ip protocol ne tcp udp dport ssh accept;ok;ip protocol != 6 udp dport 22 accept diff --git a/tests/py/ip/tcp.t.payload b/tests/py/ip/tcp.t.payload new file mode 100644 index 00000000..ed0dcc84 --- /dev/null +++ b/tests/py/ip/tcp.t.payload @@ -0,0 +1,18 @@ +# ip protocol tcp tcp dport ssh accept +ip test-ip input + [ payload load 1b @ network header + 9 => reg 1 ] + [ cmp eq reg 1 0x00000006 ] + [ payload load 2b @ transport header + 2 => reg 1 ] + [ cmp eq reg 1 0x00001600 ] + [ immediate reg 0 accept ] + +# ip protocol ne tcp udp dport ssh accept +ip test-ip input + [ payload load 1b @ network header + 9 => reg 1 ] + [ cmp neq reg 1 0x00000006 ] + [ payload load 1b @ network header + 9 => reg 1 ] + [ cmp eq reg 1 0x00000011 ] + [ payload load 2b @ transport header + 2 => reg 1 ] + [ cmp eq reg 1 0x00001600 ] + [ immediate reg 0 accept ] + |