This series adds 'tcp option mptcp subtype' matching to nft. Because the subtype is only 4 bits in size the exthdr delinearization needs a fixup to remove the binop added by the evaluation step. One remaining usablility problem is the lack of mnemonics for the subtype, i.e. something like: static const struct symbol_table mptcp_subtype_tbl = { .base = BASE_DECIMAL, .symbols = { SYMBOL("mp-capable", 0), SYMBOL("mp-join", 1), SYMBOL("dss", 2), SYMBOL("add-addr", 3), SYMBOL("remove-addr", 4), SYMBOL("mp-prio", 5), SYMBOL("mp-fail", 6), SYMBOL("mp-fastclose", 7), SYMBOL("mp-tcprst", 8), SYMBOL_LIST_END }, ... but this would need addition of yet another data type. Use of implicit/context-dependent symbol table would be preferrable, I will look into this next. Florian Westphal (8): tcpopt: remove KIND keyword scanner: add tcp flex scope parser: split tcp option rules tcpopt: add md5sig, fastopen and mptcp options tests: py: add test cases for md5sig, fastopen and mptcp mnemonics mptcp: add subtype matching exthdr: fix tcpopt_find_template to use length after mask adjustment tests: py: add tcp subtype match test cases doc/payload-expression.txt | 29 ++++--- include/parser.h | 1 + include/tcpopt.h | 13 ++- src/exthdr.c | 46 +++++----- src/parser_bison.y | 108 +++++++++++++++++------ src/scanner.l | 22 +++-- src/tcpopt.c | 38 +++++++- tests/py/any/tcpopt.t | 21 +++-- tests/py/any/tcpopt.t.json | 159 +++++++++++++++++++++++++--------- tests/py/any/tcpopt.t.payload | 64 ++++++++++---- 10 files changed, 360 insertions(+), 141 deletions(-) -- 2.32.0