* [libnftnl PATCH 1/4] expr: exthdr: Add nft_rule_expr_exthdr_snprinf_* functions
2014-06-24 12:33 [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json Ana Rey
@ 2014-06-24 12:33 ` Ana Rey
2014-06-24 12:33 ` [libnftnl PATCH 2/4] expr: exthdr: Use nft_rule_expr_set_* in the xml parsing code Ana Rey
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-24 12:33 UTC (permalink / raw)
To: netfilter-devel; +Cc: Ana Rey
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>
---
src/expr/exthdr.c | 56 +++++++++++++++++++++++++++++++++++++------------------
1 file 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;
}
--
2.0.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [libnftnl PATCH 2/4] expr: exthdr: Use nft_rule_expr_set_* in the xml parsing code
2014-06-24 12:33 [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json Ana Rey
2014-06-24 12:33 ` [libnftnl PATCH 1/4] expr: exthdr: Add nft_rule_expr_exthdr_snprinf_* functions Ana Rey
@ 2014-06-24 12:33 ` Ana Rey
2014-06-24 12:33 ` [libnftnl PATCH 3/4] expr: exthdr: Do not print unset values in xml Ana Rey
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-24 12:33 UTC (permalink / raw)
To: netfilter-devel; +Cc: Ana Rey
Code refactoring to use nft_rule_expr_set_* in parse functions.
Signed-off-by: Ana Rey <anarey@gmail.com>
---
src/expr/exthdr.c | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/src/expr/exthdr.c b/src/expr/exthdr.c
index ad80826..e624990 100644
--- a/src/expr/exthdr.c
+++ b/src/expr/exthdr.c
@@ -238,17 +238,14 @@ nft_rule_expr_exthdr_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree,
struct nft_parse_err *err)
{
#ifdef XML_PARSING
- struct nft_expr_exthdr *exthdr = nft_expr_data(e);
const char *exthdr_type;
int type;
- uint32_t reg;
+ uint32_t dreg, len, offset;
- if (nft_mxml_reg_parse(tree, "dreg", ®, MXML_DESCEND_FIRST,
+ if (nft_mxml_reg_parse(tree, "dreg", &dreg, MXML_DESCEND_FIRST,
NFT_XML_MAND, err) != 0)
return -1;
-
- exthdr->dreg = reg;
- e->flags |= (1 << NFT_EXPR_EXTHDR_DREG);
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_DREG, dreg);
exthdr_type = nft_mxml_str_parse(tree, "exthdr_type",
MXML_DESCEND_FIRST, NFT_XML_MAND, err);
@@ -258,25 +255,20 @@ nft_rule_expr_exthdr_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree,
type = str2exthdr_type(exthdr_type);
if (type < 0)
return -1;
-
- exthdr->type = type;
- e->flags |= (1 << NFT_EXPR_EXTHDR_TYPE);
+ nft_rule_expr_set_u8(e, NFT_EXPR_EXTHDR_TYPE, type);
/* Get and set <offset> */
if (nft_mxml_num_parse(tree, "offset", MXML_DESCEND_FIRST, BASE_DEC,
- &exthdr->offset, NFT_TYPE_U32,
- NFT_XML_MAND, err) != 0)
+ &offset, NFT_TYPE_U32, NFT_XML_MAND, err) != 0)
return -1;
-
- e->flags |= (1 << NFT_EXPR_EXTHDR_OFFSET);
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_OFFSET, offset);
/* Get and set <len> */
if (nft_mxml_num_parse(tree, "len", MXML_DESCEND_FIRST, BASE_DEC,
- &exthdr->len, NFT_TYPE_U32, NFT_XML_MAND,
- err) != 0)
+ &len, NFT_TYPE_U32, NFT_XML_MAND, err) != 0)
return -1;
- e->flags |= (1 << NFT_EXPR_EXTHDR_LEN);
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_LEN, len);
return 0;
#else
--
2.0.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [libnftnl PATCH 3/4] expr: exthdr: Do not print unset values in xml
2014-06-24 12:33 [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json Ana Rey
2014-06-24 12:33 ` [libnftnl PATCH 1/4] expr: exthdr: Add nft_rule_expr_exthdr_snprinf_* functions Ana Rey
2014-06-24 12:33 ` [libnftnl PATCH 2/4] expr: exthdr: Use nft_rule_expr_set_* in the xml parsing code Ana Rey
@ 2014-06-24 12:33 ` Ana Rey
2014-06-24 12:33 ` [libnftnl PATCH 4/4] expr: exthdr: Do not print unset values in json Ana Rey
2014-06-24 17:15 ` [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json Pablo Neira Ayuso
4 siblings, 0 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-24 12:33 UTC (permalink / raw)
To: netfilter-devel; +Cc: Ana Rey
It changes the parse and the snprint functions to omit unset values.
Signed-off-by: Ana Rey <anarey@gmail.com>
---
src/expr/exthdr.c | 57 +++++++++++++++++++++++++++++++++----------------------
1 file changed, 34 insertions(+), 23 deletions(-)
diff --git a/src/expr/exthdr.c b/src/expr/exthdr.c
index e624990..6fb83b2 100644
--- a/src/expr/exthdr.c
+++ b/src/expr/exthdr.c
@@ -243,32 +243,27 @@ nft_rule_expr_exthdr_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree,
uint32_t dreg, len, offset;
if (nft_mxml_reg_parse(tree, "dreg", &dreg, MXML_DESCEND_FIRST,
- NFT_XML_MAND, err) != 0)
- return -1;
- nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_DREG, dreg);
+ NFT_XML_MAND, err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_DREG, dreg);
exthdr_type = nft_mxml_str_parse(tree, "exthdr_type",
MXML_DESCEND_FIRST, NFT_XML_MAND, err);
- if (exthdr_type == NULL)
- return -1;
-
- type = str2exthdr_type(exthdr_type);
- if (type < 0)
- return -1;
- nft_rule_expr_set_u8(e, NFT_EXPR_EXTHDR_TYPE, type);
+ if (exthdr_type != NULL) {
+ type = str2exthdr_type(exthdr_type);
+ if (type < 0)
+ return -1;
+ nft_rule_expr_set_u8(e, NFT_EXPR_EXTHDR_TYPE, type);
+ }
/* Get and set <offset> */
if (nft_mxml_num_parse(tree, "offset", MXML_DESCEND_FIRST, BASE_DEC,
- &offset, NFT_TYPE_U32, NFT_XML_MAND, err) != 0)
- return -1;
- nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_OFFSET, offset);
+ &offset, NFT_TYPE_U32, NFT_XML_MAND, err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_OFFSET, offset);
/* Get and set <len> */
if (nft_mxml_num_parse(tree, "len", MXML_DESCEND_FIRST, BASE_DEC,
- &len, NFT_TYPE_U32, NFT_XML_MAND, err) != 0)
- return -1;
-
- nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_LEN, len);
+ &len, NFT_TYPE_U32, NFT_XML_MAND, err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_LEN, len);
return 0;
#else
@@ -293,13 +288,29 @@ 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);
+ int ret, size = len, offset = 0;
- 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);
+ if (e->flags & (1 << NFT_EXPR_EXTHDR_DREG)) {
+ ret = snprintf(buf, len, "<dreg>%u</dreg>", exthdr->dreg);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_EXTHDR_TYPE)) {
+ ret = snprintf(buf + offset, len,
+ "<exthdr_type>%s</exthdr_type>",
+ exthdr_type2str(exthdr->type));
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_EXTHDR_OFFSET)) {
+ ret = snprintf(buf + offset, len, "<offset>%u</offset>",
+ exthdr->offset);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_EXTHDR_LEN)) {
+ ret = snprintf(buf + offset, len, "<len>%u</len>", exthdr->len);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+
+ return offset;
}
static int nft_rule_expr_exthdr_snprintf_default(char *buf, size_t len,
--
2.0.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [libnftnl PATCH 4/4] expr: exthdr: Do not print unset values in json
2014-06-24 12:33 [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json Ana Rey
` (2 preceding siblings ...)
2014-06-24 12:33 ` [libnftnl PATCH 3/4] expr: exthdr: Do not print unset values in xml Ana Rey
@ 2014-06-24 12:33 ` Ana Rey
2014-06-24 17:15 ` [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json Pablo Neira Ayuso
4 siblings, 0 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-24 12:33 UTC (permalink / raw)
To: netfilter-devel; +Cc: Ana Rey
It changes the parse and the snprint functions to omit unset values.
Signed-off-by: Ana Rey <anarey@gmail.com>
---
src/expr/exthdr.c | 64 +++++++++++++++++++++++++++++++++----------------------
1 file changed, 39 insertions(+), 25 deletions(-)
diff --git a/src/expr/exthdr.c b/src/expr/exthdr.c
index 6fb83b2..e237c73 100644
--- a/src/expr/exthdr.c
+++ b/src/expr/exthdr.c
@@ -201,30 +201,24 @@ nft_rule_expr_exthdr_json_parse(struct nft_rule_expr *e, json_t *root,
uint32_t uval32;
int type;
- if (nft_jansson_parse_reg(root, "dreg", NFT_TYPE_U32, &uval32, err) < 0)
- return -1;
-
- nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_DREG, uval32);
+ if (nft_jansson_parse_reg(root, "dreg", NFT_TYPE_U32, &uval32,
+ err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_DREG, uval32);
exthdr_type = nft_jansson_parse_str(root, "exthdr_type", err);
- if (exthdr_type == NULL)
- return -1;
-
- type = str2exthdr_type(exthdr_type);
- if (type < 0)
- return -1;
-
- nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_TYPE, type);
-
- if (nft_jansson_parse_val(root, "offset", NFT_TYPE_U32, &uval32, err) < 0)
- return -1;
-
- nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_OFFSET, uval32);
+ if (exthdr_type != NULL) {
+ type = str2exthdr_type(exthdr_type);
+ if (type < 0)
+ return -1;
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_TYPE, type);
+ }
- if (nft_jansson_parse_val(root, "len", NFT_TYPE_U32, &uval32, err) < 0)
- return -1;
+ if (nft_jansson_parse_val(root, "offset", NFT_TYPE_U32, &uval32,
+ err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_OFFSET, uval32);
- nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_LEN, uval32);
+ if (nft_jansson_parse_val(root, "len", NFT_TYPE_U32, &uval32, err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_EXTHDR_LEN, uval32);
return 0;
#else
@@ -276,12 +270,32 @@ 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);
+ int ret, size = len, offset = 0;
- return snprintf(buf, len, "\"dreg\":%u,"
- "\"exthdr_type\":\"%s\",\"offset\":%u,"
- "\"len\":%u",
- exthdr->dreg, exthdr_type2str(exthdr->type),
- exthdr->offset, exthdr->len);
+ if (e->flags & (1 << NFT_EXPR_EXTHDR_DREG)) {
+ ret = snprintf(buf, len, "\"dreg\":%u,", exthdr->dreg);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_EXTHDR_TYPE)) {
+ ret = snprintf(buf + offset, len, "\"exthdr_type\":\"%s\",",
+ exthdr_type2str(exthdr->type));
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_EXTHDR_OFFSET)) {
+ ret = snprintf(buf + offset, len, "\"offset\":%u,",
+ exthdr->offset);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_EXTHDR_LEN)) {
+ ret = snprintf(buf + offset, len, "\"len\":%u,",
+ exthdr->len);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ /* Remove the last comma characther */
+ if (offset > 0)
+ offset--;
+
+ return offset;
}
static int nft_rule_expr_exthdr_snprintf_xml(char *buf, size_t len,
--
2.0.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json
2014-06-24 12:33 [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json Ana Rey
` (3 preceding siblings ...)
2014-06-24 12:33 ` [libnftnl PATCH 4/4] expr: exthdr: Do not print unset values in json Ana Rey
@ 2014-06-24 17:15 ` Pablo Neira Ayuso
4 siblings, 0 replies; 6+ messages in thread
From: Pablo Neira Ayuso @ 2014-06-24 17:15 UTC (permalink / raw)
To: Ana Rey; +Cc: netfilter-devel
On Tue, Jun 24, 2014 at 02:33:43PM +0200, Ana Rey wrote:
> This patchset does tasks about does not print unset values in xml and json file
> and about refactoring code:
> * "expr: exthdr: Add nft_rule_expr_exthdr_snprinf_* functions"
> * "expr: exthdr: Use nft_rule_expr_set_* in the xml parsing code"
>
> Ana Rey (4):
> expr: exthdr: Add nft_rule_expr_exthdr_snprinf_* functions
> expr: exthdr: Use nft_rule_expr_set_* in the xml parsing code
> expr: exthdr: Do not print unset values in xml
> expr: exthdr: Do not print unset values in json
Applied, thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread