From b74233b7e753a0be4846d923029d8ff15d3890a4 Mon Sep 17 00:00:00 2001 From: Ana Rey Date: Tue, 24 Jun 2014 14:33:44 +0200 Subject: expr: exthdr: Add nft_rule_expr_exthdr_snprinf_* functions Code refactoring in nft_rule_expr_exthdr functions. This patch adds three new functions: * nft_rule_expr_exthdr_snprinf_default * nft_rule_expr_exthdr_snprinf_xml * nft_rule_expr_exthdr_snprinf_json Signed-off-by: Ana Rey Signed-off-by: Pablo Neira Ayuso --- src/expr/exthdr.c | 56 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/expr/exthdr.c b/src/expr/exthdr.c index 66a6cf5..ad80826 100644 --- a/src/expr/exthdr.c +++ b/src/expr/exthdr.c @@ -285,32 +285,52 @@ nft_rule_expr_exthdr_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree, #endif } +static int nft_rule_expr_exthdr_snprintf_json(char *buf, size_t len, + struct nft_rule_expr *e) +{ + struct nft_expr_exthdr *exthdr = nft_expr_data(e); + + return snprintf(buf, len, "\"dreg\":%u," + "\"exthdr_type\":\"%s\",\"offset\":%u," + "\"len\":%u", + exthdr->dreg, exthdr_type2str(exthdr->type), + exthdr->offset, exthdr->len); +} + +static int nft_rule_expr_exthdr_snprintf_xml(char *buf, size_t len, + struct nft_rule_expr *e) +{ + struct nft_expr_exthdr *exthdr = nft_expr_data(e); + + return snprintf(buf, len, "%u" + "%s" + "%u" + "%u", + exthdr->dreg, exthdr_type2str(exthdr->type), + exthdr->offset, exthdr->len); +} + +static int nft_rule_expr_exthdr_snprintf_default(char *buf, size_t len, + struct nft_rule_expr *e) +{ + struct nft_expr_exthdr *exthdr = nft_expr_data(e); + + return snprintf(buf, len, "load %ub @ %u + %u => reg %u ", + exthdr->len, exthdr->type, exthdr->offset, + exthdr->dreg); +} + static int nft_rule_expr_exthdr_snprintf(char *buf, size_t len, uint32_t type, uint32_t flags, struct nft_rule_expr *e) { - struct nft_expr_exthdr *exthdr = nft_expr_data(e); - switch(type) { case NFT_OUTPUT_DEFAULT: - return snprintf(buf, len, "load %ub @ %u + %u => reg %u ", - exthdr->len, exthdr->type, - exthdr->offset, exthdr->dreg); + return nft_rule_expr_exthdr_snprintf_default(buf, len, e); case NFT_OUTPUT_XML: - return snprintf(buf, len, "%u" - "%s" - "%u" - "%u", - exthdr->dreg, - exthdr_type2str(exthdr->type), - exthdr->offset, exthdr->len); + return nft_rule_expr_exthdr_snprintf_xml(buf, len, e); case NFT_OUTPUT_JSON: - return snprintf(buf, len, "\"dreg\":%u," - "\"exthdr_type\":\"%s\",\"offset\":%u," - "\"len\":%u", - exthdr->dreg, - exthdr_type2str(exthdr->type), - exthdr->offset, exthdr->len); + return nft_rule_expr_exthdr_snprintf_json(buf, len, e); default: break; } -- cgit v1.2.3