All of lore.kernel.org
 help / color / mirror / Atom feed
* [libnftnl PATCH 0/4] expr: exthdr: Do not print unset values in xml and json
@ 2014-06-24 12:33 Ana Rey
  2014-06-24 12:33 ` [libnftnl PATCH 1/4] expr: exthdr: Add nft_rule_expr_exthdr_snprinf_* functions Ana Rey
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-24 12:33 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

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

 src/expr/exthdr.c | 167 +++++++++++++++++++++++++++++++++---------------------
 1 file changed, 102 insertions(+), 65 deletions(-)

-- 
2.0.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [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", &reg, 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

end of thread, other threads:[~2014-06-24 17:15 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 ` [libnftnl PATCH 3/4] expr: exthdr: Do not print unset values in xml 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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.