diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-02-22 15:44:35 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-03-02 11:08:49 +0100 |
commit | 4722cfeed34c2333989aa88d9e0b5e4ed89f3280 (patch) | |
tree | 53951c0c9c533eeddef7453bd2ee11c142eea7c9 | |
parent | 4507148af780195dc93f6110b893181fd51d8b5e (diff) |
table: rework flags printing
Simplify routine to print the table flags. Add table_flag_name() and use
it from json too.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | include/rule.h | 2 | ||||
-rw-r--r-- | src/json.c | 2 | ||||
-rw-r--r-- | src/rule.c | 37 |
3 files changed, 26 insertions, 15 deletions
diff --git a/include/rule.h b/include/rule.h index 330a09aa..87b6828e 100644 --- a/include/rule.h +++ b/include/rule.h @@ -134,7 +134,7 @@ enum table_flags { }; #define TABLE_FLAGS_MAX 1 -extern const char *table_flags_name[TABLE_FLAGS_MAX]; +const char *table_flag_name(uint32_t flag); /** * struct table - nftables table @@ -444,7 +444,7 @@ static json_t *table_flags_json(const struct table *table) while (flags) { if (flags & 0x1) { - tmp = json_string(table_flags_name[i]); + tmp = json_string(table_flag_name(i)); json_array_append_new(root, tmp); } flags >>= 1; @@ -1405,29 +1405,40 @@ struct table *table_lookup_fuzzy(const struct handle *h, return st.obj; } -const char *table_flags_name[TABLE_FLAGS_MAX] = { +static const char *table_flags_name[TABLE_FLAGS_MAX] = { "dormant", }; -static void table_print_options(const struct table *table, const char **delim, - struct output_ctx *octx) +const char *table_flag_name(uint32_t flag) +{ + if (flag >= TABLE_FLAGS_MAX) + return "unknown"; + + return table_flags_name[flag]; +} + +static void table_print_flags(const struct table *table, const char **delim, + struct output_ctx *octx) { uint32_t flags = table->flags; + bool comma = false; int i; - if (flags) { - nft_print(octx, "\tflags "); + if (!table->flags) + return; - for (i = 0; i < TABLE_FLAGS_MAX; i++) { - if (flags & 0x1) - nft_print(octx, "%s", table_flags_name[i]); - flags >>= 1; - if (flags) + nft_print(octx, "\tflags "); + for (i = 0; i < TABLE_FLAGS_MAX; i++) { + if (flags & (1 << i)) { + if (comma) nft_print(octx, ","); + + nft_print(octx, "%s", table_flag_name(i)); + comma = true; } - nft_print(octx, "\n"); - *delim = "\n"; } + nft_print(octx, "\n"); + *delim = "\n"; } static void table_print(const struct table *table, struct output_ctx *octx) @@ -1443,7 +1454,7 @@ static void table_print(const struct table *table, struct output_ctx *octx) if (nft_output_handle(octx)) nft_print(octx, " # handle %" PRIu64, table->handle.handle.id); nft_print(octx, "\n"); - table_print_options(table, &delim, octx); + table_print_flags(table, &delim, octx); if (table->comment) nft_print(octx, "\tcomment \"%s\"\n", table->comment); |