diff options
author | Florian Westphal <fw@strlen.de> | 2020-11-02 15:22:40 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2020-11-09 12:19:31 +0100 |
commit | 2e1f821d713aa44717b38901ee80cac8e2aa0335 (patch) | |
tree | 4f9fbf0959b49a58ec5499005f68d3a74e15ddff /src/ipopt.c | |
parent | 8f591eba561aceeef605283c693b659a708d1cd3 (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.c | 2 |
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; } |