]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: json: add support for element deletion
authorFlorian Westphal <fw@strlen.de>
Thu, 29 Aug 2019 09:36:20 +0000 (11:36 +0200)
committerFlorian Westphal <fw@strlen.de>
Thu, 29 Aug 2019 13:41:18 +0000 (15:41 +0200)
also add a test case.

Fixes: a87f2a2227be2 ("netfilter: support for element deletion")
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Phil Sutter <phil@nwl.cc>
src/parser_json.c
tests/py/ip6/sets.t
tests/py/ip6/sets.t.json
tests/py/ip6/sets.t.payload.inet
tests/py/ip6/sets.t.payload.ip6
tests/py/ip6/sets.t.payload.netdev

index a969bd4c3676b393508d0f103426c37d1dd7a6a7..8ca07d717b13273c6887a5c81c455728e34393c4 100644 (file)
@@ -2055,6 +2055,8 @@ static struct stmt *json_parse_set_stmt(struct json_ctx *ctx,
                op = NFT_DYNSET_OP_ADD;
        } else if (!strcmp(opstr, "update")) {
                op = NFT_DYNSET_OP_UPDATE;
+       } else if (!strcmp(opstr, "delete")) {
+               op = NFT_DYNSET_OP_DELETE;
        } else {
                json_error(ctx, "Unknown set statement op '%s'.", opstr);
                return NULL;
index 5adec53f56ceda045d223d9e905007c48ad87ec9..add82eb8feb8ae94afee3dcb1d3a3ecd3e687d99 100644 (file)
@@ -40,3 +40,4 @@ ip6 saddr != @set33 drop;fail
 !set5 type ipv6_addr . ipv6_addr;ok
 ip6 saddr . ip6 daddr @set5 drop;ok
 add @set5 { ip6 saddr . ip6 daddr };ok
+delete @set5 { ip6 saddr . ip6 daddr };ok
index 9a75dd6fa210465ad3a558a90b952db1a174778c..948c1f168d0fd8d0a6b21db818adffda3dbd830b 100644 (file)
     }
 ]
 
+# delete @set5 { ip6 saddr . ip6 daddr }
+[
+    {
+        "set": {
+            "elem": {
+                "concat": [
+                    {
+                        "payload": {
+                            "field": "saddr",
+                            "protocol": "ip6"
+                        }
+                    },
+                    {
+                        "payload": {
+                            "field": "daddr",
+                            "protocol": "ip6"
+                        }
+                    }
+                ]
+            },
+            "op": "delete",
+            "set": "@set5"
+        }
+    }
+]
index 3886db67526c754f238531704863b3ec4a731fce..47ad86a20864f360b668716a145296e542834b59 100644 (file)
@@ -31,3 +31,10 @@ inet test-inet input
   [ payload load 16b @ network header + 24 => reg 2 ]
   [ dynset add reg_key 1 set set5 ]
 
+# delete @set5 { ip6 saddr . ip6 daddr }
+inet test-inet input
+  [ meta load nfproto => reg 1 ]
+  [ cmp eq reg 1 0x0000000a ]
+  [ payload load 16b @ network header + 8 => reg 1 ]
+  [ payload load 16b @ network header + 24 => reg 2 ]
+  [ dynset delete reg_key 1 set set5 ]
index 0b318f8de97f9cb686158b84594108af97caaf1e..a5febb9fe591be97d30a244e0a05cbd4b019b7e1 100644 (file)
@@ -23,3 +23,9 @@ ip6 test-ip6 input
   [ payload load 16b @ network header + 24 => reg 2 ]
   [ dynset add reg_key 1 set set5 ]
 
+# delete @set5 { ip6 saddr . ip6 daddr }
+ip6 test-ip6 input
+  [ payload load 16b @ network header + 8 => reg 1 ]
+  [ payload load 16b @ network header + 24 => reg 2 ]
+  [ dynset delete reg_key 1 set set5 ]
+
index 0dfabb778a0c922953392d0a3d1749fff5e4886d..dab74159a0980f1a86c6bf423117fd59eb048489 100644 (file)
@@ -31,3 +31,11 @@ netdev test-netdev ingress
   [ payload load 16b @ network header + 24 => reg 2 ]
   [ dynset add reg_key 1 set set5 ]
 
+# delete @set5 { ip6 saddr . ip6 daddr }
+netdev test-netdev ingress
+  [ meta load protocol => reg 1 ]
+  [ cmp eq reg 1 0x0000dd86 ]
+  [ payload load 16b @ network header + 8 => reg 1 ]
+  [ payload load 16b @ network header + 24 => reg 2 ]
+  [ dynset delete reg_key 1 set set5 ]
+