From 4722cfeed34c2333989aa88d9e0b5e4ed89f3280 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Mon, 22 Feb 2021 15:44:35 +0100 Subject: 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 --- include/rule.h | 2 +- src/json.c | 2 +- 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 diff --git a/src/json.c b/src/json.c index 0ccbbe8a..defbc8fb 100644 --- a/src/json.c +++ b/src/json.c @@ -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; diff --git a/src/rule.c b/src/rule.c index e4bb6bae..d22ab500 100644 --- a/src/rule.c +++ b/src/rule.c @@ -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); -- cgit v1.2.3