diff options
-rw-r--r-- | include/expression.h | 1 | ||||
-rw-r--r-- | src/ct.c | 13 |
2 files changed, 14 insertions, 0 deletions
diff --git a/include/expression.h b/include/expression.h index d0afaa65..215cbc98 100644 --- a/include/expression.h +++ b/include/expression.h @@ -300,6 +300,7 @@ struct expr { struct { /* EXPR_CT */ enum nft_ct_keys key; + enum proto_bases base; int8_t direction; uint8_t nfproto; } ct; @@ -347,8 +347,21 @@ struct expr *ct_expr_alloc(const struct location *loc, enum nft_ct_keys key, expr->ct.nfproto = nfproto; switch (key) { + case NFT_CT_SRC: + case NFT_CT_DST: + expr->ct.base = PROTO_BASE_NETWORK_HDR; + break; + case NFT_CT_PROTO_SRC: + case NFT_CT_PROTO_DST: + expr->ct.base = PROTO_BASE_TRANSPORT_HDR; + break; case NFT_CT_PROTOCOL: expr->flags = EXPR_F_PROTOCOL; + expr->ct.base = PROTO_BASE_NETWORK_HDR; + break; + case NFT_CT_L3PROTOCOL: + expr->flags = EXPR_F_PROTOCOL; + expr->ct.base = PROTO_BASE_LL_HDR; break; default: break; |