]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
tunnel: add missing tunnel object list support
authorFernando Fernandez Mancera <fmancera@suse.de>
Wed, 12 Nov 2025 18:42:04 +0000 (19:42 +0100)
committerFlorian Westphal <fw@strlen.de>
Sat, 15 Nov 2025 11:53:42 +0000 (12:53 +0100)
Tunnel object listing support was missing. Now it is possible to list
tunnels. Example:

sudo nft list tunnel netdev x y
table netdev x {
tunnel y {
id 10
ip saddr 192.168.2.10
ip daddr 192.168.2.11
sport 10
dport 20
ttl 10
erspan {
version 1
index 2
}
}
}

Fixes: a937a5dc02db ("src: add tunnel statement and expression support")
Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
Signed-off-by: Florian Westphal <fw@strlen.de>
src/cache.c
src/evaluate.c
src/parser_bison.y
src/scanner.l

index 09aa20bf891ff2191b7cf0492b2ed4e89600cb80..bb005c10f9990065baf045e78625d12a5ac02f31 100644 (file)
@@ -296,6 +296,10 @@ static unsigned int evaluate_cache_list(struct nft_ctx *nft, struct cmd *cmd,
        case CMD_OBJ_SYNPROXYS:
                obj_filter_setup(cmd, &flags, filter, NFT_OBJECT_SYNPROXY);
                break;
+       case CMD_OBJ_TUNNEL:
+       case CMD_OBJ_TUNNELS:
+               obj_filter_setup(cmd, &flags, filter, NFT_OBJECT_TUNNEL);
+               break;
        case CMD_OBJ_RULESET:
        default:
                flags |= NFT_CACHE_FULL;
index 5a5e6cb5b288561468bd58a6aa80a3dba2cbb841..4be5299274d26a6c33c36bc29ee2fbd7816f0bdb 100644 (file)
@@ -6279,6 +6279,8 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd)
                return cmd_evaluate_list_obj(ctx, cmd, NFT_OBJECT_CT_EXPECT);
        case CMD_OBJ_SYNPROXY:
                return cmd_evaluate_list_obj(ctx, cmd, NFT_OBJECT_SYNPROXY);
+       case CMD_OBJ_TUNNEL:
+               return cmd_evaluate_list_obj(ctx, cmd, NFT_OBJECT_TUNNEL);
        case CMD_OBJ_COUNTERS:
        case CMD_OBJ_QUOTAS:
        case CMD_OBJ_CT_HELPERS:
@@ -6289,6 +6291,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd)
        case CMD_OBJ_SYNPROXYS:
        case CMD_OBJ_CT_TIMEOUTS:
        case CMD_OBJ_CT_EXPECTATIONS:
+       case CMD_OBJ_TUNNELS:
                if (cmd->handle.table.name == NULL)
                        return 0;
                if (!table_cache_find(&ctx->nft->cache.table_cache,
index 52730f71b8805f423193658820a973a3cc1c5d46..3ceef79469d7d825ef8fc162c45ac52f24358771 100644 (file)
@@ -1737,6 +1737,14 @@ list_cmd         :       TABLE           table_spec
                        {
                                $$ = cmd_alloc(CMD_LIST, CMD_OBJ_HOOKS, &$2, &@$, NULL);
                        }
+                       |       TUNNELS list_cmd_spec_any
+                       {
+                               $$ = cmd_alloc(CMD_LIST, CMD_OBJ_TUNNELS, &$2, &@$, NULL);
+                       }
+                       |       TUNNEL  obj_spec        close_scope_tunnel
+                       {
+                               $$ = cmd_alloc(CMD_LIST, CMD_OBJ_TUNNEL, &$2, &@$, NULL);
+                       }
                        ;
 
 basehook_device_name   :       DEVICE STRING
index 8085c93b903284029c9d6929453be0f022470a75..df8e536be22765a91c6b28791ab98e744ad0f9b0 100644 (file)
@@ -404,7 +404,6 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
        "maps"                  { return MAPS; }
        "secmarks"              { return SECMARKS; }
        "synproxys"             { return SYNPROXYS; }
-       "tunnel"                { return TUNNEL; }
        "tunnels"               { return TUNNELS; }
        "hooks"                 { return HOOKS; }
 }