Store location object in handle to improve error reporting. Signed-off-by: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> --- include/rule.h | 7 ++++++- src/evaluate.c | 42 +++++++++++++++++++++--------------------- src/monitor.c | 4 ++-- src/netlink.c | 40 ++++++++++++++++++++-------------------- src/netlink_delinearize.c | 2 +- src/parser_bison.y | 3 ++- src/rule.c | 42 +++++++++++++++++++++--------------------- 7 files changed, 73 insertions(+), 67 deletions(-) diff --git a/include/rule.h b/include/rule.h index ee22cf217ac6..88750f0a4b54 100644 --- a/include/rule.h +++ b/include/rule.h @@ -27,6 +27,11 @@ struct position_spec { uint64_t id; }; +struct table_spec { + struct location location; + const char *name; +}; + /** * struct handle - handle for tables, chains, rules and sets * @@ -42,7 +47,7 @@ struct position_spec { */ struct handle { uint32_t family; - const char *table; + struct table_spec table; const char *chain; const char *set; const char *obj; diff --git a/src/evaluate.c b/src/evaluate.c index 4384e2710176..76125fcd884d 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -191,7 +191,7 @@ static int expr_evaluate_symbol(struct eval_ctx *ctx, struct expr **expr) table = table_lookup_global(ctx); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - ctx->cmd->handle.table); + ctx->cmd->handle.table.name); set = set_lookup(table, (*expr)->identifier); if (set == NULL) @@ -2747,7 +2747,7 @@ static int setelem_evaluate(struct eval_ctx *ctx, struct expr **expr) table = table_lookup_global(ctx); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - ctx->cmd->handle.table); + ctx->cmd->handle.table.name); set = set_lookup(table, ctx->cmd->handle.set); if (set == NULL) @@ -2770,7 +2770,7 @@ static int set_evaluate(struct eval_ctx *ctx, struct set *set) table = table_lookup_global(ctx); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - ctx->cmd->handle.table); + ctx->cmd->handle.table.name); if (!(set->flags & NFT_SET_INTERVAL) && set->automerge) return set_error(ctx, set, "auto-merge only works with interval sets"); @@ -2832,7 +2832,7 @@ static int flowtable_evaluate(struct eval_ctx *ctx, struct flowtable *ft) table = table_lookup_global(ctx); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - ctx->cmd->handle.table); + ctx->cmd->handle.table.name); ft->hooknum = str2hooknum(NFPROTO_NETDEV, ft->hookstr); if (ft->hooknum == NF_INET_NUMHOOKS) @@ -2924,7 +2924,7 @@ static int chain_evaluate(struct eval_ctx *ctx, struct chain *chain) table = table_lookup_global(ctx); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - ctx->cmd->handle.table); + ctx->cmd->handle.table.name); if (chain == NULL) { if (chain_lookup(table, &ctx->cmd->handle) == NULL) { @@ -3088,7 +3088,7 @@ static int cmd_evaluate_get(struct eval_ctx *ctx, struct cmd *cmd) table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); set = set_lookup(table, cmd->handle.set); if (set == NULL || set->flags & (NFT_SET_MAP | NFT_SET_EVAL)) return cmd_error(ctx, "Could not process rule: Set '%s' does not exist", @@ -3111,7 +3111,7 @@ static int cmd_evaluate_list_obj(struct eval_ctx *ctx, const struct cmd *cmd, table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); if (obj_lookup(table, cmd->handle.obj, obj_type) == NULL) return cmd_error(ctx, "Could not process rule: Object '%s' does not exist", cmd->handle.obj); @@ -3131,19 +3131,19 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) switch (cmd->obj) { case CMD_OBJ_TABLE: - if (cmd->handle.table == NULL) + if (cmd->handle.table.name == NULL) return 0; table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); return 0; case CMD_OBJ_SET: table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); set = set_lookup(table, cmd->handle.set); if (set == NULL || set->flags & (NFT_SET_MAP | NFT_SET_EVAL)) return cmd_error(ctx, "Could not process rule: Set '%s' does not exist", @@ -3153,7 +3153,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); set = set_lookup(table, cmd->handle.set); if (set == NULL || !(set->flags & NFT_SET_EVAL)) return cmd_error(ctx, "Could not process rule: Meter '%s' does not exist", @@ -3163,7 +3163,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); set = set_lookup(table, cmd->handle.set); if (set == NULL || !(set->flags & NFT_SET_MAP)) return cmd_error(ctx, "Could not process rule: Map '%s' does not exist", @@ -3173,7 +3173,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); if (chain_lookup(table, &cmd->handle) == NULL) return cmd_error(ctx, "Could not process rule: Chain '%s' does not exist", cmd->handle.chain); @@ -3192,11 +3192,11 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) case CMD_OBJ_LIMITS: case CMD_OBJ_SETS: case CMD_OBJ_FLOWTABLES: - if (cmd->handle.table == NULL) + if (cmd->handle.table.name == NULL) return 0; if (table_lookup(&cmd->handle, ctx->cache) == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); return 0; case CMD_OBJ_CHAINS: case CMD_OBJ_RULESET: @@ -3222,11 +3222,11 @@ static int cmd_evaluate_reset(struct eval_ctx *ctx, struct cmd *cmd) case CMD_OBJ_QUOTA: case CMD_OBJ_COUNTERS: case CMD_OBJ_QUOTAS: - if (cmd->handle.table == NULL) + if (cmd->handle.table.name == NULL) return 0; if (table_lookup(&cmd->handle, ctx->cache) == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); return 0; default: BUG("invalid command object type %u\n", cmd->obj); @@ -3259,7 +3259,7 @@ static int cmd_evaluate_flush(struct eval_ctx *ctx, struct cmd *cmd) table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); set = set_lookup(table, cmd->handle.set); if (set == NULL || set->flags & (NFT_SET_MAP | NFT_SET_EVAL)) return cmd_error(ctx, "Could not process rule: Set '%s' does not exist", @@ -3274,7 +3274,7 @@ static int cmd_evaluate_flush(struct eval_ctx *ctx, struct cmd *cmd) table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); set = set_lookup(table, cmd->handle.set); if (set == NULL || !(set->flags & NFT_SET_MAP)) return cmd_error(ctx, "Could not process rule: Map '%s' does not exist", @@ -3289,7 +3289,7 @@ static int cmd_evaluate_flush(struct eval_ctx *ctx, struct cmd *cmd) table = table_lookup(&cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - cmd->handle.table); + cmd->handle.table.name); set = set_lookup(table, cmd->handle.set); if (set == NULL || !(set->flags & NFT_SET_EVAL)) return cmd_error(ctx, "Could not process rule: Meter '%s' does not exist", @@ -3316,7 +3316,7 @@ static int cmd_evaluate_rename(struct eval_ctx *ctx, struct cmd *cmd) table = table_lookup(&ctx->cmd->handle, ctx->cache); if (table == NULL) return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", - ctx->cmd->handle.table); + ctx->cmd->handle.table.name); if (chain_lookup(table, &ctx->cmd->handle) == NULL) return cmd_error(ctx, "Could not process rule: Chain '%s' does not exist", ctx->cmd->handle.chain); diff --git a/src/monitor.c b/src/monitor.c index 9249a21cfc0b..4310c3b8dc43 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -576,7 +576,7 @@ static void netlink_events_cache_deltable(struct netlink_mon_handler *monh, nlt = netlink_table_alloc(nlh); h.family = nftnl_table_get_u32(nlt, NFTNL_TABLE_FAMILY); - h.table = nftnl_table_get_str(nlt, NFTNL_TABLE_NAME); + h.table.name = nftnl_table_get_str(nlt, NFTNL_TABLE_NAME); t = table_lookup(&h, monh->cache); if (t == NULL) @@ -722,7 +722,7 @@ static void netlink_events_cache_delobj(struct netlink_mon_handler *monh, nlo = netlink_obj_alloc(nlh); h.family = nftnl_obj_get_u32(nlo, NFTNL_OBJ_FAMILY); - h.table = nftnl_obj_get_str(nlo, NFTNL_OBJ_TABLE); + h.table.name = nftnl_obj_get_str(nlo, NFTNL_OBJ_TABLE); name = nftnl_obj_get_str(nlo, NFTNL_OBJ_NAME); type = nftnl_obj_get_u32(nlo, NFTNL_OBJ_TYPE); diff --git a/src/netlink.c b/src/netlink.c index 5fb42074d900..0c078d643344 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -125,8 +125,8 @@ struct nftnl_table *alloc_nftnl_table(const struct handle *h) memory_allocation_error(); nftnl_table_set_u32(nlt, NFTNL_TABLE_FAMILY, h->family); - if (h->table != NULL) - nftnl_table_set(nlt, NFTNL_TABLE_NAME, h->table); + if (h->table.name != NULL) + nftnl_table_set(nlt, NFTNL_TABLE_NAME, h->table.name); if (h->handle.id) nftnl_table_set_u64(nlt, NFTNL_TABLE_HANDLE, h->handle.id); @@ -142,7 +142,7 @@ struct nftnl_chain *alloc_nftnl_chain(const struct handle *h) memory_allocation_error(); nftnl_chain_set_u32(nlc, NFTNL_CHAIN_FAMILY, h->family); - nftnl_chain_set_str(nlc, NFTNL_CHAIN_TABLE, h->table); + nftnl_chain_set_str(nlc, NFTNL_CHAIN_TABLE, h->table.name); if (h->handle.id) nftnl_chain_set_u64(nlc, NFTNL_CHAIN_HANDLE, h->handle.id); if (h->chain != NULL) @@ -160,7 +160,7 @@ struct nftnl_rule *alloc_nftnl_rule(const struct handle *h) memory_allocation_error(); nftnl_rule_set_u32(nlr, NFTNL_RULE_FAMILY, h->family); - nftnl_rule_set_str(nlr, NFTNL_RULE_TABLE, h->table); + nftnl_rule_set_str(nlr, NFTNL_RULE_TABLE, h->table.name); if (h->chain != NULL) nftnl_rule_set_str(nlr, NFTNL_RULE_CHAIN, h->chain); if (h->handle.id) @@ -191,7 +191,7 @@ struct nftnl_set *alloc_nftnl_set(const struct handle *h) memory_allocation_error(); nftnl_set_set_u32(nls, NFTNL_SET_FAMILY, h->family); - nftnl_set_set_str(nls, NFTNL_SET_TABLE, h->table); + nftnl_set_set_str(nls, NFTNL_SET_TABLE, h->table.name); if (h->set != NULL) nftnl_set_set_str(nls, NFTNL_SET_NAME, h->set); if (h->set_id) @@ -292,7 +292,7 @@ __alloc_nftnl_obj(const struct handle *h, uint32_t type) memory_allocation_error(); nftnl_obj_set_u32(nlo, NFTNL_OBJ_FAMILY, h->family); - nftnl_obj_set_str(nlo, NFTNL_OBJ_TABLE, h->table); + nftnl_obj_set_str(nlo, NFTNL_OBJ_TABLE, h->table.name); if (h->obj != NULL) nftnl_obj_set_str(nlo, NFTNL_OBJ_NAME, h->obj); @@ -539,7 +539,7 @@ static int list_rule_cb(struct nftnl_rule *nlr, void *arg) chain = nftnl_rule_get_str(nlr, NFTNL_RULE_CHAIN); if (h->family != family || - strcmp(table, h->table) != 0 || + strcmp(table, h->table.name) != 0 || (h->chain && strcmp(chain, h->chain) != 0)) return 0; @@ -653,7 +653,7 @@ struct chain *netlink_delinearize_chain(struct netlink_ctx *ctx, chain = chain_alloc(nftnl_chain_get_str(nlc, NFTNL_CHAIN_NAME)); chain->handle.family = nftnl_chain_get_u32(nlc, NFTNL_CHAIN_FAMILY); - chain->handle.table = + chain->handle.table.name = xstrdup(nftnl_chain_get_str(nlc, NFTNL_CHAIN_TABLE)); chain->handle.handle.id = nftnl_chain_get_u64(nlc, NFTNL_CHAIN_HANDLE); @@ -695,7 +695,7 @@ static int list_chain_cb(struct nftnl_chain *nlc, void *arg) name = nftnl_chain_get_str(nlc, NFTNL_CHAIN_NAME); family = nftnl_chain_get_u32(nlc, NFTNL_CHAIN_FAMILY); - if (h->family != family || strcmp(table, h->table) != 0) + if (h->family != family || strcmp(table, h->table.name) != 0) return 0; if (h->chain && strcmp(name, h->chain) != 0) return 0; @@ -767,7 +767,7 @@ struct table *netlink_delinearize_table(struct netlink_ctx *ctx, table = table_alloc(); table->handle.family = nftnl_table_get_u32(nlt, NFTNL_TABLE_FAMILY); - table->handle.table = xstrdup(nftnl_table_get_str(nlt, NFTNL_TABLE_NAME)); + table->handle.table.name = xstrdup(nftnl_table_get_str(nlt, NFTNL_TABLE_NAME)); table->flags = nftnl_table_get_u32(nlt, NFTNL_TABLE_FLAGS); table->handle.handle.id = nftnl_table_get_u64(nlt, NFTNL_TABLE_HANDLE); @@ -925,7 +925,7 @@ struct set *netlink_delinearize_set(struct netlink_ctx *ctx, set = set_alloc(&netlink_location); set->handle.family = nftnl_set_get_u32(nls, NFTNL_SET_FAMILY); - set->handle.table = xstrdup(nftnl_set_get_str(nls, NFTNL_SET_TABLE)); + set->handle.table.name = xstrdup(nftnl_set_get_str(nls, NFTNL_SET_TABLE)); set->handle.set = xstrdup(nftnl_set_get_str(nls, NFTNL_SET_NAME)); set->automerge = automerge; @@ -1062,7 +1062,7 @@ int netlink_list_sets(struct netlink_ctx *ctx, const struct handle *h) struct nftnl_set_list *set_cache; int err; - set_cache = mnl_nft_set_dump(ctx, h->family, h->table); + set_cache = mnl_nft_set_dump(ctx, h->family, h->table.name); if (set_cache == NULL) { if (errno == EINTR) return -1; @@ -1408,7 +1408,7 @@ struct obj *netlink_delinearize_obj(struct netlink_ctx *ctx, obj = obj_alloc(&netlink_location); obj->handle.family = nftnl_obj_get_u32(nlo, NFTNL_OBJ_FAMILY); - obj->handle.table = + obj->handle.table.name = xstrdup(nftnl_obj_get_str(nlo, NFTNL_OBJ_TABLE)); obj->handle.obj = xstrdup(nftnl_obj_get_str(nlo, NFTNL_OBJ_NAME)); @@ -1465,7 +1465,7 @@ static struct nftnl_flowtable *alloc_nftnl_flowtable(const struct handle *h, memory_allocation_error(); nftnl_flowtable_set_u32(flo, NFTNL_FLOWTABLE_FAMILY, h->family); - nftnl_flowtable_set_str(flo, NFTNL_FLOWTABLE_TABLE, h->table); + nftnl_flowtable_set_str(flo, NFTNL_FLOWTABLE_TABLE, h->table.name); if (h->flowtable != NULL) nftnl_flowtable_set_str(flo, NFTNL_FLOWTABLE_NAME, h->flowtable); @@ -1543,7 +1543,7 @@ int netlink_list_objs(struct netlink_ctx *ctx, const struct handle *h) int err; obj_cache = mnl_nft_obj_dump(ctx, h->family, - h->table, NULL, 0, true, false); + h->table.name, NULL, 0, true, false); if (obj_cache == NULL) { if (errno == EINTR) return -1; @@ -1564,7 +1564,7 @@ int netlink_reset_objs(struct netlink_ctx *ctx, const struct cmd *cmd, int err; obj_cache = mnl_nft_obj_dump(ctx, h->family, - h->table, h->obj, type, dump, true); + h->table.name, h->obj, type, dump, true); if (obj_cache == NULL) return -1; @@ -1584,7 +1584,7 @@ netlink_delinearize_flowtable(struct netlink_ctx *ctx, flowtable = flowtable_alloc(&netlink_location); flowtable->handle.family = nftnl_flowtable_get_u32(nlo, NFTNL_FLOWTABLE_FAMILY); - flowtable->handle.table = + flowtable->handle.table.name = xstrdup(nftnl_flowtable_get_str(nlo, NFTNL_FLOWTABLE_TABLE)); flowtable->handle.flowtable = xstrdup(nftnl_flowtable_get_str(nlo, NFTNL_FLOWTABLE_NAME)); @@ -1623,7 +1623,7 @@ int netlink_list_flowtables(struct netlink_ctx *ctx, const struct handle *h) struct nftnl_flowtable_list *flowtable_cache; int err; - flowtable_cache = mnl_nft_flowtable_dump(ctx, h->family, h->table); + flowtable_cache = mnl_nft_flowtable_dump(ctx, h->family, h->table.name); if (flowtable_cache == NULL) { if (errno == EINTR) return -1; @@ -1719,10 +1719,10 @@ static void trace_print_rule(const struct nftnl_trace *nlt, struct handle h; h.family = nftnl_trace_get_u32(nlt, NFTNL_TRACE_FAMILY); - h.table = nftnl_trace_get_str(nlt, NFTNL_TRACE_TABLE); + h.table.name = nftnl_trace_get_str(nlt, NFTNL_TRACE_TABLE); h.chain = nftnl_trace_get_str(nlt, NFTNL_TRACE_CHAIN); - if (!h.table) + if (!h.table.name) return; table = table_lookup(&h, cache); diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index 2126cf20c995..8b42850ecd43 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -2444,7 +2444,7 @@ struct rule *netlink_delinearize_rule(struct netlink_ctx *ctx, memset(&h, 0, sizeof(h)); h.family = nftnl_rule_get_u32(nlr, NFTNL_RULE_FAMILY); - h.table = xstrdup(nftnl_rule_get_str(nlr, NFTNL_RULE_TABLE)); + h.table.name = xstrdup(nftnl_rule_get_str(nlr, NFTNL_RULE_TABLE)); h.chain = xstrdup(nftnl_rule_get_str(nlr, NFTNL_RULE_CHAIN)); h.handle.id = nftnl_rule_get_u64(nlr, NFTNL_RULE_HANDLE); diff --git a/src/parser_bison.y b/src/parser_bison.y index f546b9edd42e..c104bc86fadb 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -1845,7 +1845,8 @@ table_spec : family_spec identifier { memset(&$$, 0, sizeof($$)); $$.family = $1; - $$.table = $2; + $$.table.location = @2; + $$.table.name = $2; } ; diff --git a/src/rule.c b/src/rule.c index 5693888c31db..6c2b4eea7c24 100644 --- a/src/rule.c +++ b/src/rule.c @@ -30,7 +30,7 @@ void handle_free(struct handle *h) { - xfree(h->table); + xfree(h->table.name); xfree(h->chain); xfree(h->set); xfree(h->flowtable); @@ -40,8 +40,8 @@ void handle_merge(struct handle *dst, const struct handle *src) { if (dst->family == 0) dst->family = src->family; - if (dst->table == NULL && src->table != NULL) - dst->table = xstrdup(src->table); + if (dst->table.name == NULL && src->table.name != NULL) + dst->table.name = xstrdup(src->table.name); if (dst->chain == NULL && src->chain != NULL) dst->chain = xstrdup(src->chain); if (dst->set == NULL && src->set != NULL) @@ -270,7 +270,7 @@ struct set *set_lookup_global(uint32_t family, const char *table, struct table *t; h.family = family; - h.table = table; + h.table.name = table; t = table_lookup(&h, cache); if (t == NULL) @@ -418,7 +418,7 @@ void set_print_plain(const struct set *s, struct output_ctx *octx) struct print_fmt_options opts = { .tab = "", .nl = " ", - .table = s->handle.table, + .table = s->handle.table.name, .family = family2str(s->handle.family), .stmt_separator = "; ", }; @@ -777,7 +777,7 @@ static void chain_print(const struct chain *chain, struct output_ctx *octx) void chain_print_plain(const struct chain *chain, struct output_ctx *octx) { nft_print(octx, "chain %s %s %s", family2str(chain->handle.family), - chain->handle.table, chain->handle.chain); + chain->handle.table.name, chain->handle.chain); if (chain->flags & CHAIN_F_BASECHAIN) { nft_print(octx, " { type %s hook %s priority %d; policy %s; }", @@ -842,7 +842,7 @@ struct table *table_lookup(const struct handle *h, list_for_each_entry(table, &cache->list, list) { if (table->handle.family == h->family && - !strcmp(table->handle.table, h->table)) + !strcmp(table->handle.table.name, h->table.name)) return table; } return NULL; @@ -884,7 +884,7 @@ static void table_print(const struct table *table, struct output_ctx *octx) const char *delim = ""; const char *family = family2str(table->handle.family); - nft_print(octx, "table %s %s {", family, table->handle.table); + nft_print(octx, "table %s %s {", family, table->handle.table.name); if (octx->handle > 0) nft_print(octx, " # handle %" PRIu64, table->handle.handle.id); nft_print(octx, "\n"); @@ -1318,7 +1318,7 @@ static int do_list_sets(struct netlink_ctx *ctx, struct cmd *cmd) nft_print(ctx->octx, "table %s %s {\n", family2str(table->handle.family), - table->handle.table); + table->handle.table.name); list_for_each_entry(set, &table->sets, list) { if (cmd->obj == CMD_OBJ_SETS && @@ -1543,7 +1543,7 @@ void obj_print_plain(const struct obj *obj, struct output_ctx *octx) struct print_fmt_options opts = { .tab = "", .nl = " ", - .table = obj->handle.table, + .table = obj->handle.table.name, .family = family2str(obj->handle.family), }; @@ -1567,10 +1567,10 @@ static int do_list_obj(struct netlink_ctx *ctx, struct cmd *cmd, uint32_t type) nft_print(ctx->octx, "table %s %s {\n", family2str(table->handle.family), - table->handle.table); + table->handle.table.name); - if (cmd->handle.table != NULL && - strcmp(cmd->handle.table, table->handle.table)) { + if (cmd->handle.table.name != NULL && + strcmp(cmd->handle.table.name, table->handle.table.name)) { nft_print(ctx->octx, "}\n"); continue; } @@ -1686,7 +1686,7 @@ static int do_list_flowtables(struct netlink_ctx *ctx, struct cmd *cmd) nft_print(ctx->octx, "table %s %s {\n", family2str(table->handle.family), - table->handle.table); + table->handle.table.name); list_for_each_entry(flowtable, &table->flowtables, list) { flowtable_print_declaration(flowtable, &opts, ctx->octx); @@ -1709,13 +1709,13 @@ static int do_list_ruleset(struct netlink_ctx *ctx, struct cmd *cmd) continue; cmd->handle.family = table->handle.family; - cmd->handle.table = table->handle.table; + cmd->handle.table.name = table->handle.table.name; if (do_list_table(ctx, cmd, table) < 0) return -1; } - cmd->handle.table = NULL; + cmd->handle.table.name = NULL; return 0; } @@ -1731,7 +1731,7 @@ static int do_list_tables(struct netlink_ctx *ctx, struct cmd *cmd) nft_print(ctx->octx, "table %s %s\n", family2str(table->handle.family), - table->handle.table); + table->handle.table.name); } return 0; @@ -1742,7 +1742,7 @@ static void table_print_declaration(struct table *table, { nft_print(octx, "table %s %s {\n", family2str(table->handle.family), - table->handle.table); + table->handle.table.name); } static int do_list_chain(struct netlink_ctx *ctx, struct cmd *cmd, @@ -1813,12 +1813,12 @@ static int do_command_list(struct netlink_ctx *ctx, struct cmd *cmd) { struct table *table = NULL; - if (cmd->handle.table != NULL) + if (cmd->handle.table.name != NULL) table = table_lookup(&cmd->handle, ctx->cache); switch (cmd->obj) { case CMD_OBJ_TABLE: - if (!cmd->handle.table) + if (!cmd->handle.table.name) return do_list_tables(ctx, cmd); return do_list_table(ctx, cmd, table); case CMD_OBJ_CHAIN: @@ -1897,7 +1897,7 @@ static int do_command_get(struct netlink_ctx *ctx, struct cmd *cmd) { struct table *table = NULL; - if (cmd->handle.table != NULL) + if (cmd->handle.table.name != NULL) table = table_lookup(&cmd->handle, ctx->cache); switch (cmd->obj) { -- 2.11.0 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html