diff options
author | Ana Rey <anarey@gmail.com> | 2014-06-24 14:33:44 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-06-24 19:12:15 +0200 |
commit | b74233b7e753a0be4846d923029d8ff15d3890a4 (patch) | |
tree | d6e16da2a4db278c0e06af24193048ae2e876deb /src | |
parent | 574a2b3a9aa88c8f0d05d20970fc0b2a02244685 (diff) |
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 <anarey@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/expr/exthdr.c | 56 |
1 files changed, 38 insertions, 18 deletions
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, "<dreg>%u</dreg>" + "<exthdr_type>%s</exthdr_type>" + "<offset>%u</offset>" + "<len>%u</len>", + 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, "<dreg>%u</dreg>" - "<exthdr_type>%s</exthdr_type>" - "<offset>%u</offset>" - "<len>%u</len>", - 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; } |