diff options
author | Alvaro Neira Ayuso <alvaroneay@gmail.com> | 2013-06-06 23:14:16 +0000 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-06-07 13:54:17 +0200 |
commit | 2f1e7122841d00b3c0134ab9ee19e6ce02a9bd5c (patch) | |
tree | 4a863ad59e6d7065c6a8601108153715a0287d79 | |
parent | cf4f500f828ccc8720a19c211bc9ffc478c1463a (diff) |
table: add function to export tables in JSON format
Signed-off-by: Alvaro Neira <alvaroneay@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | include/libnftables/table.h | 1 | ||||
-rw-r--r-- | src/internal.h | 1 | ||||
-rw-r--r-- | src/table.c | 18 |
3 files changed, 20 insertions, 0 deletions
diff --git a/include/libnftables/table.h b/include/libnftables/table.h index 658230c..19f322c 100644 --- a/include/libnftables/table.h +++ b/include/libnftables/table.h @@ -31,6 +31,7 @@ void nft_table_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nft_table enum { NFT_TABLE_O_DEFAULT = 0, NFT_TABLE_O_XML, + NFT_TABLE_O_JSON, }; enum nft_table_parse_type { diff --git a/src/internal.h b/src/internal.h index 3ad5e89..0c5de21 100644 --- a/src/internal.h +++ b/src/internal.h @@ -20,6 +20,7 @@ #define NFT_TABLE_XML_VERSION 0 #define NFT_CHAIN_XML_VERSION 0 #define NFT_RULE_XML_VERSION 0 +#define NFT_TABLE_JSON_VERSION 0 struct expr_ops; diff --git a/src/table.c b/src/table.c index a868da4..de106bb 100644 --- a/src/table.c +++ b/src/table.c @@ -300,6 +300,22 @@ int nft_table_parse(struct nft_table *t, enum nft_table_parse_type type, } EXPORT_SYMBOL(nft_table_parse); +static int nft_table_snprintf_json(char *buf, size_t size, struct nft_table *t) +{ + return snprintf(buf, size, + "{\"table\" : {" + "\"name\" : \"%s\"," + "\"version\" : %d," + "\"properties\" : {" + "\"family\" : %u," + "\"table_flags\" : %d" + "}" + "}" + "}" , + t->name, NFT_TABLE_JSON_VERSION, + t->family, t->table_flags); +} + static int nft_table_snprintf_xml(char *buf, size_t size, struct nft_table *t) { return snprintf(buf, size, @@ -325,6 +341,8 @@ int nft_table_snprintf(char *buf, size_t size, struct nft_table *t, switch(type) { case NFT_TABLE_O_XML: return nft_table_snprintf_xml(buf, size, t); + case NFT_TABLE_O_JSON: + return nft_table_snprintf_json(buf, size, t); case NFT_TABLE_O_DEFAULT: return nft_table_snprintf_default(buf, size, t); default: |