summaryrefslogtreecommitdiffstats
path: root/src/ipopt.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2020-11-02 15:22:40 +0100
committerFlorian Westphal <fw@strlen.de>2020-11-09 12:19:31 +0100
commit2e1f821d713aa44717b38901ee80cac8e2aa0335 (patch)
tree4f9fbf0959b49a58ec5499005f68d3a74e15ddff /src/ipopt.c
parent8f591eba561aceeef605283c693b659a708d1cd3 (diff)
tcpopt: split tcpopt_hdr_fields into per-option enum
Currently we're limited to ten template fields in exthdr_desc struct. Using a single enum for all tpc option fields thus won't work indefinitely (TCPOPTHDR_FIELD_TSECR is 9) when new option templates get added. Fortunately we can just use one enum per tcp option to avoid this. As a side effect this also allows to simplify the sack offset calculations. Rather than computing that on-the-fly, just add extra fields to the SACK template. expr->exthdr.offset now holds the 'raw' value, filled in from the option template. This would ease implementation of 'raw option matching' using offset and length to load from the option. Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src/ipopt.c')
-rw-r--r--src/ipopt.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/ipopt.c b/src/ipopt.c
index b3d0279d..7ecb8b9c 100644
--- a/src/ipopt.c
+++ b/src/ipopt.c
@@ -102,7 +102,7 @@ struct expr *ipopt_expr_alloc(const struct location *loc, uint8_t type,
expr->exthdr.desc = desc;
expr->exthdr.tmpl = tmpl;
expr->exthdr.op = NFT_EXTHDR_OP_IPV4;
- expr->exthdr.offset = calc_offset(desc, tmpl, ptr);
+ expr->exthdr.offset = tmpl->offset + calc_offset(desc, tmpl, ptr);
return expr;
}