@@ -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);
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> --- include/rule.h | 2 +- src/json.c | 2 +- src/rule.c | 37 ++++++++++++++++++++++++------------- 3 files changed, 26 insertions(+), 15 deletions(-)