]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: use cache infrastructure for rule objects
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 6 Jul 2015 00:02:00 +0000 (02:02 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 17 Aug 2015 23:36:12 +0000 (01:36 +0200)
Populate the cache iff the user requests a ruleset listing.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/rule.c

index a3d9d2cb2e312dbf32dee92c427167035c965eb9..7cf21e898e1849170a0f8e7a2a7945c64b3ae5a3 100644 (file)
@@ -70,6 +70,8 @@ static int cache_init_tables(struct netlink_ctx *ctx, struct handle *h)
 static int cache_init_objects(struct netlink_ctx *ctx, enum cmd_ops cmd)
 {
        struct table *table;
+       struct chain *chain;
+       struct rule *rule, *nrule;
        int ret;
 
        list_for_each_entry(table, &table_list, list) {
@@ -91,6 +93,16 @@ static int cache_init_objects(struct netlink_ctx *ctx, enum cmd_ops cmd)
                 */
                if (cmd != CMD_LIST)
                        continue;
+
+               ret = netlink_list_table(ctx, &table->handle,
+                                        &internal_location);
+               list_for_each_entry_safe(rule, nrule, &ctx->list, list) {
+                       chain = chain_lookup(table, &rule->handle);
+                       list_move_tail(&rule->list, &chain->rules);
+               }
+
+               if (ret < 0)
+                       return -1;
        }
        return 0;
 }
@@ -963,18 +975,8 @@ static int do_command_export(struct netlink_ctx *ctx, struct cmd *cmd)
 static int do_list_table(struct netlink_ctx *ctx, struct cmd *cmd,
                         struct table *table)
 {
-       struct rule *rule, *nrule;
-       struct chain *chain;
-
        if (do_list_sets(ctx, &cmd->location, table) < 0)
                return -1;
-       if (netlink_list_table(ctx, &cmd->handle, &cmd->location) < 0)
-               return -1;
-
-       list_for_each_entry_safe(rule, nrule, &ctx->list, list) {
-               chain = chain_lookup(table, &rule->handle);
-               list_move_tail(&rule->list, &chain->rules);
-       }
        table_print(table);
        return 0;
 }