]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser: merge sack-perm/sack-permitted and maxseg/mss
authorFlorian Westphal <fw@strlen.de>
Sun, 1 Nov 2020 23:27:04 +0000 (00:27 +0100)
committerFlorian Westphal <fw@strlen.de>
Mon, 9 Nov 2020 11:14:52 +0000 (12:14 +0100)
One was added by the tcp option parsing ocde, the other by synproxy.

So we have:
synproxy ... sack-perm
synproxy ... mss

and

tcp option maxseg
tcp option sack-permitted

This kills the extra tokens on the scanner/parser side,
so sack-perm and sack-permitted can both be used.

Likewise, 'synproxy maxseg' and 'tcp option mss size 42' will work too.
On the output side, the shorter form is now preferred, i.e. sack-perm
and mss.

Signed-off-by: Florian Westphal <fw@strlen.de>
doc/payload-expression.txt
src/parser_bison.y
src/scanner.l
src/tcpopt.c
tests/py/any/tcpopt.t
tests/py/any/tcpopt.t.json
tests/py/any/tcpopt.t.payload

index 93d4d22f59f52f2b8059db2f6a7e7f63c599320a..9df20a18ae8ac113de1a45c0daf8c208147f3bed 100644 (file)
@@ -525,13 +525,13 @@ nftables currently supports matching (finding) a given ipv6 extension header, TC
 *dst* {*nexthdr* | *hdrlength*}
 *mh* {*nexthdr* | *hdrlength* | *checksum* | *type*}
 *srh* {*flags* | *tag* | *sid* | *seg-left*}
-*tcp option* {*eol* | *noop* | *maxseg* | *window* | *sack-permitted* | *sack* | *sack0* | *sack1* | *sack2* | *sack3* | *timestamp*} 'tcp_option_field'
+*tcp option* {*eol* | *noop* | *maxseg* | *window* | *sack-perm* | *sack* | *sack0* | *sack1* | *sack2* | *sack3* | *timestamp*} 'tcp_option_field'
 *ip option* { lsrr | ra | rr | ssrr } 'ip_option_field'
 
 The following syntaxes are valid only in a relational expression with boolean type on right-hand side for checking header existence only:
 [verse]
 *exthdr* {*hbh* | *frag* | *rt* | *dst* | *mh*}
-*tcp option* {*eol* | *noop* | *maxseg* | *window* | *sack-permitted* | *sack* | *sack0* | *sack1* | *sack2* | *sack3* | *timestamp*}
+*tcp option* {*eol* | *noop* | *maxseg* | *window* | *sack-perm* | *sack* | *sack0* | *sack1* | *sack2* | *sack3* | *timestamp*}
 *ip option* { lsrr | ra | rr | ssrr }
 
 .IPv6 extension headers
@@ -568,7 +568,7 @@ kind, length, size
 |window|
 TCP Window Scaling |
 kind, length, count
-|sack-permitted|
+|sack-perm |
 TCP SACK permitted |
 kind, length
 |sack|
@@ -611,7 +611,7 @@ type, length, ptr, addr
 
 .finding TCP options
 --------------------
-filter input tcp option sack-permitted kind 1 counter
+filter input tcp option sack-perm kind 1 counter
 --------------------
 
 .matching IPv6 exthdr
index 9bf4f71f1f66531220ba078a1f8fe93d94a7dee7..8d6e28c9d491d6a7b6768e6535198a8343c8d94d 100644 (file)
@@ -233,7 +233,6 @@ int nft_lex(void *, void *, void *);
 %token SYNPROXY                        "synproxy"
 %token MSS                     "mss"
 %token WSCALE                  "wscale"
-%token SACKPERM                        "sack-perm"
 
 %token TYPEOF                  "typeof"
 
@@ -400,14 +399,13 @@ int nft_lex(void *, void *, void *);
 %token OPTION                  "option"
 %token ECHO                    "echo"
 %token EOL                     "eol"
-%token MAXSEG                  "maxseg"
 %token NOOP                    "noop"
 %token SACK                    "sack"
 %token SACK0                   "sack0"
 %token SACK1                   "sack1"
 %token SACK2                   "sack2"
 %token SACK3                   "sack3"
-%token SACK_PERMITTED          "sack-permitted"
+%token SACK_PERM               "sack-permitted"
 %token TIMESTAMP               "timestamp"
 %token KIND                    "kind"
 %token COUNT                   "count"
@@ -3279,7 +3277,7 @@ synproxy_arg              :       MSS     NUM
                        {
                                $<stmt>0->synproxy.flags |= NF_SYNPROXY_OPT_TIMESTAMP;
                        }
-                       |       SACKPERM
+                       |       SACK_PERM
                        {
                                $<stmt>0->synproxy.flags |= NF_SYNPROXY_OPT_SACK_PERM;
                        }
@@ -3334,7 +3332,7 @@ synproxy_ts               :       /* empty */     { $$ = 0; }
                        ;
 
 synproxy_sack          :       /* empty */     { $$ = 0; }
-                       |       SACKPERM
+                       |       SACK_PERM
                        {
                                $$ = NF_SYNPROXY_OPT_SACK_PERM;
                        }
@@ -5216,9 +5214,9 @@ tcp_hdr_field             :       SPORT           { $$ = TCPHDR_SPORT; }
 
 tcp_hdr_option_type    :       EOL             { $$ = TCPOPTHDR_EOL; }
                        |       NOOP            { $$ = TCPOPTHDR_NOOP; }
-                       |       MAXSEG          { $$ = TCPOPTHDR_MAXSEG; }
+                       |       MSS             { $$ = TCPOPTHDR_MAXSEG; }
                        |       WINDOW          { $$ = TCPOPTHDR_WINDOW; }
-                       |       SACK_PERMITTED  { $$ = TCPOPTHDR_SACK_PERMITTED; }
+                       |       SACK_PERM       { $$ = TCPOPTHDR_SACK_PERMITTED; }
                        |       SACK            { $$ = TCPOPTHDR_SACK0; }
                        |       SACK0           { $$ = TCPOPTHDR_SACK0; }
                        |       SACK1           { $$ = TCPOPTHDR_SACK1; }
index 7afd9bfb88932ef081c65fcd0b3894c1f1d1d9ed..516c648f1c1f80e4d34490a0129db014a1e54a56 100644 (file)
@@ -421,14 +421,16 @@ addrstring        ({macaddr}|{ip4addr}|{ip6addr})
 
 "echo"                 { return ECHO; }
 "eol"                  { return EOL; }
-"maxseg"               { return MAXSEG; }
+"maxseg"               { return MSS; }
+"mss"                  { return MSS; }
 "noop"                 { return NOOP; }
 "sack"                 { return SACK; }
 "sack0"                        { return SACK0; }
 "sack1"                        { return SACK1; }
 "sack2"                        { return SACK2; }
 "sack3"                        { return SACK3; }
-"sack-permitted"       { return SACK_PERMITTED; }
+"sack-permitted"       { return SACK_PERM; }
+"sack-perm"            { return SACK_PERM; }
 "timestamp"            { return TIMESTAMP; }
 "time"                 { return TIME; }
 
@@ -565,9 +567,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 "osf"                  { return OSF; }
 
 "synproxy"             { return SYNPROXY; }
-"mss"                  { return MSS; }
 "wscale"               { return WSCALE; }
-"sack-perm"            { return SACKPERM; }
 
 "notrack"              { return NOTRACK; }
 
index ec305d9466d5540f73043ec2b88321f661e87807..6dbaa9e6dd17ea620ed3957320761ff5d4a14747 100644 (file)
@@ -55,7 +55,7 @@ static const struct exthdr_desc tcpopt_window = {
 };
 
 static const struct exthdr_desc tcpopt_sack_permitted = {
-       .name           = "sack-permitted",
+       .name           = "sack-perm",
        .type           = TCPOPT_SACK_PERMITTED,
        .templates      = {
                [TCPOPTHDR_FIELD_KIND]          = PHT("kind",   0, 8),
index 08b1dcb3c4899edbbd9da816684e639ec6205064..5f21d4989fea580e3a3f686b7a85abd3aee407b1 100644 (file)
@@ -12,8 +12,8 @@ tcp option maxseg size 1;ok
 tcp option window kind 1;ok
 tcp option window length 1;ok
 tcp option window count 1;ok
-tcp option sack-permitted kind 1;ok
-tcp option sack-permitted length 1;ok
+tcp option sack-perm kind 1;ok
+tcp option sack-perm length 1;ok
 tcp option sack kind 1;ok
 tcp option sack length 1;ok
 tcp option sack left 1;ok
index 48eb339cee355729eaa55cd9e8b62e57d92ce6d8..2c6236a1a15210d1b01c4c75fdae3b0e1c49e6ec 100644 (file)
     }
 ]
 
-# tcp option sack-permitted kind 1
+# tcp option sack-perm kind 1
 [
     {
         "match": {
             "left": {
                 "tcp option": {
                     "field": "kind",
-                    "name": "sack-permitted"
+                    "name": "sack-perm"
                 }
             },
             "op": "==",
     }
 ]
 
-# tcp option sack-permitted length 1
+# tcp option sack-perm length 1
 [
     {
         "match": {
             "left": {
                 "tcp option": {
                     "field": "length",
-                    "name": "sack-permitted"
+                    "name": "sack-perm"
                 }
             },
             "op": "==",
index 63751cf26e751214af0b133fcf88981be7d2388b..f63076ae497ec064951997b7df2aacc4906b32f9 100644 (file)
@@ -166,42 +166,42 @@ inet
   [ exthdr load tcpopt 1b @ 3 + 2 => reg 1 ]
   [ cmp eq reg 1 0x00000001 ]
 
-# tcp option sack-permitted kind 1
+# tcp option sack-perm kind 1
 ip 
   [ meta load l4proto => reg 1 ]
   [ cmp eq reg 1 0x00000006 ]
   [ exthdr load tcpopt 1b @ 4 + 0 => reg 1 ]
   [ cmp eq reg 1 0x00000001 ]
 
-# tcp option sack-permitted kind 1
+# tcp option sack-perm kind 1
 ip6 
   [ meta load l4proto => reg 1 ]
   [ cmp eq reg 1 0x00000006 ]
   [ exthdr load tcpopt 1b @ 4 + 0 => reg 1 ]
   [ cmp eq reg 1 0x00000001 ]
 
-# tcp option sack-permitted kind 1
+# tcp option sack-perm kind 1
 inet 
   [ meta load l4proto => reg 1 ]
   [ cmp eq reg 1 0x00000006 ]
   [ exthdr load tcpopt 1b @ 4 + 0 => reg 1 ]
   [ cmp eq reg 1 0x00000001 ]
 
-# tcp option sack-permitted length 1
+# tcp option sack-perm length 1
 ip 
   [ meta load l4proto => reg 1 ]
   [ cmp eq reg 1 0x00000006 ]
   [ exthdr load tcpopt 1b @ 4 + 1 => reg 1 ]
   [ cmp eq reg 1 0x00000001 ]
 
-# tcp option sack-permitted length 1
+# tcp option sack-perm length 1
 ip6 
   [ meta load l4proto => reg 1 ]
   [ cmp eq reg 1 0x00000006 ]
   [ exthdr load tcpopt 1b @ 4 + 1 => reg 1 ]
   [ cmp eq reg 1 0x00000001 ]
 
-# tcp option sack-permitted length 1
+# tcp option sack-perm length 1
 inet 
   [ meta load l4proto => reg 1 ]
   [ cmp eq reg 1 0x00000006 ]