diff options
author | Álvaro Neira Ayuso <alvaroneay@gmail.com> | 2013-07-15 21:30:52 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-07-16 00:09:37 +0200 |
commit | 78d773b519a4c3f41b3c515505bb8c3bad686fe1 (patch) | |
tree | b3176615438f0de91f92574b59beef9320bfa563 /src/set.c | |
parent | e6007410f013a0e01da93131703c4eb1e5182c6f (diff) |
set: json: fix incomplete output
In (bf39c53 set: add json output), the json support for sets was
incomplete:
* version, family, key_type, key_len, data_type, data_len were not included.
* Now I use nft_data_reg_snprintf for printing the key and data
Signed-off-by: Alvaro Neira Ayuso <alvaroneay@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/set.c')
-rw-r--r-- | src/set.c | 23 |
1 files changed, 17 insertions, 6 deletions
@@ -317,16 +317,27 @@ int nft_set_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_set *s) EXPORT_SYMBOL(nft_set_nlmsg_parse); static int nft_set_snprintf_json(char *buf, size_t size, struct nft_set *s, - uint32_t type, uint32_t flags) + uint32_t type, uint32_t flags) { - int ret; - int len = size, offset = 0; + int len = size, offset = 0, ret; struct nft_set_elem *elem; - ret = snprintf(buf, size, "{ \"set\" : { \"name\" : \"%s\", \"table\" : \"%s\", \"flags\" : %u", - s->name, s->table, s->set_flags); + ret = snprintf(buf, size, "{ \"set\": { \"name\": \"%s\"," + "\"table\": \"%s\",\"version\": %d," + "\"flags\": %u,\"family\": \"%s\"," + "\"key_type\": %u,\"key_len\": %u", + s->name, s->table, NFT_SET_JSON_VERSION, s->set_flags, + nft_family2str(s->family), s->key_type, s->key_len); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + if(s->flags & (1 << NFT_SET_ATTR_DATA_TYPE) && + s->flags & (1 << NFT_SET_ATTR_DATA_LEN)){ + ret = snprintf(buf+offset, size, + ",\"data_type\": %u,\"data_len\": %u", + s->data_type, s->data_len); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + /* Empty set? Skip printinf of elements */ if (list_empty(&s->element_list)){ ret = snprintf(buf+offset, size, "}}"); @@ -334,7 +345,7 @@ static int nft_set_snprintf_json(char *buf, size_t size, struct nft_set *s, return offset; } - ret = snprintf(buf+offset, size, ", \"set_elem\" : ["); + ret = snprintf(buf+offset, size, ",\"set_elem\": ["); SNPRINTF_BUFFER_SIZE(ret, size, len, offset); list_for_each_entry(elem, &s->element_list, head) { |