From 26e06d838d6471f5233c1da3fee012bf113564a5 Mon Sep 17 00:00:00 2001 From: Arturo Borrero Gonzalez Date: Fri, 8 Feb 2013 17:51:56 +0100 Subject: src: add XML output support Signed-off-by: Arturo Borrero Gonzalez Signed-off-by: Pablo Neira Ayuso --- src/expr/target.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'src/expr/target.c') diff --git a/src/expr/target.c b/src/expr/target.c index 1ee7379..86c9bc8 100644 --- a/src/expr/target.c +++ b/src/expr/target.c @@ -23,6 +23,7 @@ #include #include +#include #include "expr_ops.h" @@ -183,14 +184,46 @@ static int nft_rule_expr_target_parse(struct nft_rule_expr *e, struct nlattr *at return 0; } +static +int nft_rule_exp_target_snprintf_xml(char *buf, size_t len, + struct nft_expr_target *tg) +{ + int ret, size=len; + int i; + int offset = 0; + uint8_t *data = (uint8_t *)tg->data; + + ret = snprintf(buf, len, "\t\t%s %u 0x", + tg->name, tg->rev); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + + for (i=0; i < tg->data_len; i++) { + ret = snprintf(buf+offset, len, "%x", data[i] & 0xff); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + + ret = snprintf(buf+offset, len, "" ); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + + return offset; +} + static int nft_rule_expr_target_snprintf(char *buf, size_t len, uint32_t type, uint32_t flags, struct nft_rule_expr *e) { struct nft_expr_target *target = (struct nft_expr_target *)e->data; - return snprintf(buf, len, "name=%s rev=%u ", - target->name, target->rev); + switch(type) { + case NFT_RULE_O_XML: + return nft_rule_exp_target_snprintf_xml(buf, len, target); + case NFT_RULE_O_DEFAULT: + return snprintf(buf, len, "name=%s rev=%u ", + target->name, target->rev); + default: + break; + } + return -1; } struct expr_ops expr_ops_target = { -- cgit v1.2.3