All of lore.kernel.org
 help / color / mirror / Atom feed
* [libnftnl PATCH 0/4] limit: Do not print unset value
@ 2014-06-16  9:10 Ana Rey
  2014-06-16  9:10 ` [libnftnl PATCH 1/4] expr: limit: Add nft_rule_expr_limit_snprinf_* functions Ana Rey
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-16  9:10 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

This patchset does tasks about does not print unset value in xml and json file
and about refactoring code:
"expr: limit: Add nft_rule_expr_limit_snprinf_* functions" and
"expr: limit: Use nft_rule_expr_set_* in the xml parsing code"

Ana Rey (4):
  expr: limit: Add nft_rule_expr_limit_snprinf_* functions
  expr: limit: Use nft_rule_expr_set_* in the xml parsing code
  expr: limit: Do not print unset values in json
  expr: limit: Do not print unset values in xml

 src/expr/limit.c | 90 ++++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 62 insertions(+), 28 deletions(-)

-- 
2.0.0


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

* [libnftnl PATCH 1/4] expr: limit: Add nft_rule_expr_limit_snprinf_* functions
  2014-06-16  9:10 [libnftnl PATCH 0/4] limit: Do not print unset value Ana Rey
@ 2014-06-16  9:10 ` Ana Rey
  2014-06-16  9:10 ` [libnftnl PATCH 2/4] expr: limit: 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-16  9:10 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

Code refactoring in nft_rule_expr_limit_snprinf functions.
This process adds three new functions:

* nft_rule_expr_limit_snprinf_default
* nft_rule_expr_limit_snprinf_xml
* nft_rule_expr_limit_snprinf_json

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/expr/limit.c | 38 +++++++++++++++++++++++++++++---------
 1 file changed, 29 insertions(+), 9 deletions(-)

diff --git a/src/expr/limit.c b/src/expr/limit.c
index 7d10340..b7cd32d 100644
--- a/src/expr/limit.c
+++ b/src/expr/limit.c
@@ -181,24 +181,44 @@ static const char *get_unit(uint64_t u)
 	return "error";
 }
 
+static int nft_rule_expr_limit_snprintf_xml(char *buf, size_t len,
+					    struct nft_rule_expr *e) {
+	struct nft_expr_limit *limit = nft_expr_data(e);
+
+	return snprintf(buf, len, "<rate>%"PRIu64"</rate>"
+				  "<unit>%"PRIu64"</unit>",
+			limit->rate, limit->unit);
+}
+
+static int nft_rule_expr_limit_snprintf_json(char *buf, size_t len,
+					    struct nft_rule_expr *e) {
+	struct nft_expr_limit *limit = nft_expr_data(e);
+
+	return snprintf(buf, len, "\"rate\":%"PRIu64","
+				  "\"unit\":%"PRIu64"",
+			limit->rate, limit->unit);
+}
+
+static int nft_rule_expr_limit_snprintf_default(char *buf, size_t len,
+						struct nft_rule_expr *e) {
+	struct nft_expr_limit *limit = nft_expr_data(e);
+
+	return snprintf(buf, len, "rate %"PRIu64"/%s ",
+			limit->rate, get_unit(limit->unit));
+}
+
 static int
 nft_rule_expr_limit_snprintf(char *buf, size_t len, uint32_t type,
 			    uint32_t flags, struct nft_rule_expr *e)
 {
-	struct nft_expr_limit *limit = nft_expr_data(e);
 
 	switch(type) {
 	case NFT_OUTPUT_DEFAULT:
-		return snprintf(buf, len, "rate %"PRIu64"/%s ",
-				limit->rate, get_unit(limit->unit));
+		return nft_rule_expr_limit_snprintf_default(buf, len, e);
 	case NFT_OUTPUT_XML:
-		return snprintf(buf, len, "<rate>%"PRIu64"</rate>"
-					  "<unit>%"PRIu64"</unit>",
-				limit->rate, limit->unit);
+		return nft_rule_expr_limit_snprintf_xml(buf, len, e);
 	case NFT_OUTPUT_JSON:
-		return snprintf(buf, len, "\"rate\":%"PRIu64","
-					  "\"unit\":%"PRIu64"",
-				limit->rate, limit->unit);
+		return nft_rule_expr_limit_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: limit: Use nft_rule_expr_set_* in the xml parsing code
  2014-06-16  9:10 [libnftnl PATCH 0/4] limit: Do not print unset value Ana Rey
  2014-06-16  9:10 ` [libnftnl PATCH 1/4] expr: limit: Add nft_rule_expr_limit_snprinf_* functions Ana Rey
@ 2014-06-16  9:10 ` Ana Rey
  2014-06-16  9:10 ` [libnftnl PATCH 3/4] expr: limit: Do not print unset values in json Ana Rey
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-16  9:10 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/limit.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/src/expr/limit.c b/src/expr/limit.c
index b7cd32d..6e0a732 100644
--- a/src/expr/limit.c
+++ b/src/expr/limit.c
@@ -146,21 +146,19 @@ static int nft_rule_expr_limit_xml_parse(struct nft_rule_expr *e,
 					 struct nft_parse_err *err)
 {
 #ifdef XML_PARSING
-	struct nft_expr_limit *limit = nft_expr_data(e);
+	uint64_t rate, unit;
 
 	if (nft_mxml_num_parse(tree, "rate", MXML_DESCEND_FIRST, BASE_DEC,
-			       &limit->rate, NFT_TYPE_U64, NFT_XML_MAND,
-			       err) != 0)
+			       &rate, NFT_TYPE_U64, NFT_XML_MAND,
+			       err) < 0)
 		return -1;
-
-	e->flags |= (1 << NFT_EXPR_LIMIT_RATE);
+	nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_RATE, rate);
 
 	if (nft_mxml_num_parse(tree, "unit", MXML_DESCEND_FIRST, BASE_DEC,
-			       &limit->unit, NFT_TYPE_U64, NFT_XML_MAND,
-			       err) != 0)
+			       &unit, NFT_TYPE_U64, NFT_XML_MAND,
+			       err) < 0)
 		return -1;
-
-	e->flags |= (1 << NFT_EXPR_LIMIT_UNIT);
+	nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_UNIT, unit);
 
 	return 0;
 #else
-- 
2.0.0


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

* [libnftnl PATCH 3/4] expr: limit: Do not print unset values in json
  2014-06-16  9:10 [libnftnl PATCH 0/4] limit: Do not print unset value Ana Rey
  2014-06-16  9:10 ` [libnftnl PATCH 1/4] expr: limit: Add nft_rule_expr_limit_snprinf_* functions Ana Rey
  2014-06-16  9:10 ` [libnftnl PATCH 2/4] expr: limit: Use nft_rule_expr_set_* in the xml parsing code Ana Rey
@ 2014-06-16  9:10 ` Ana Rey
  2014-06-16  9:10 ` [libnftnl PATCH 4/4] expr: limit: Do not print unset values in xml Ana Rey
  2014-06-16 10:34 ` [libnftnl PATCH 0/4] limit: Do not print unset value Pablo Neira Ayuso
  4 siblings, 0 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-16  9:10 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

It changes the parse and the snprint functions to omit unset values.

Now, This part of a json file is gotten without unset elements.

{"expr":[{"type":"limit","rate":400,"unit":60}]}

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/expr/limit.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/src/expr/limit.c b/src/expr/limit.c
index 6e0a732..6732318 100644
--- a/src/expr/limit.c
+++ b/src/expr/limit.c
@@ -124,15 +124,11 @@ static int nft_rule_expr_limit_json_parse(struct nft_rule_expr *e, json_t *root,
 #ifdef JSON_PARSING
 	uint64_t uval64;
 
-	if (nft_jansson_parse_val(root, "rate", NFT_TYPE_U64, &uval64, err) < 0)
-		return -1;
-
-	nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_RATE, uval64);
+	if (nft_jansson_parse_val(root, "rate", NFT_TYPE_U64, &uval64, err) == 0)
+		nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_RATE, uval64);
 
-	if (nft_jansson_parse_val(root, "unit", NFT_TYPE_U64, &uval64, err) < 0)
-		return -1;
-
-	nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_UNIT, uval64);
+	if (nft_jansson_parse_val(root, "unit", NFT_TYPE_U64, &uval64, err) == 0)
+		nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_UNIT, uval64);
 
 	return 0;
 #else
@@ -191,10 +187,24 @@ static int nft_rule_expr_limit_snprintf_xml(char *buf, size_t len,
 static int nft_rule_expr_limit_snprintf_json(char *buf, size_t len,
 					    struct nft_rule_expr *e) {
 	struct nft_expr_limit *limit = nft_expr_data(e);
+	int ret, size = len, offset = 0;
 
-	return snprintf(buf, len, "\"rate\":%"PRIu64","
-				  "\"unit\":%"PRIu64"",
-			limit->rate, limit->unit);
+	if (e->flags & (1 << NFT_EXPR_LIMIT_RATE)) {
+		ret = snprintf(buf + offset, len, "\"rate\":%"PRIu64",",
+			       limit->rate);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+	if (e->flags & (1 << NFT_EXPR_LIMIT_UNIT)) {
+		ret = snprintf(buf + offset, len, "\"unit\":%"PRIu64",",
+			       limit->unit);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+
+	/* Remove the last comma characther */
+	if (offset > 0)
+		offset--;
+
+	return offset;
 }
 
 static int nft_rule_expr_limit_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: limit: Do not print unset values in xml
  2014-06-16  9:10 [libnftnl PATCH 0/4] limit: Do not print unset value Ana Rey
                   ` (2 preceding siblings ...)
  2014-06-16  9:10 ` [libnftnl PATCH 3/4] expr: limit: Do not print unset values in json Ana Rey
@ 2014-06-16  9:10 ` Ana Rey
  2014-06-16 10:34 ` [libnftnl PATCH 0/4] limit: Do not print unset value Pablo Neira Ayuso
  4 siblings, 0 replies; 6+ messages in thread
From: Ana Rey @ 2014-06-16  9:10 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

It changes the parse and the snprint functions to omit unset values.

Now, This part of a xml file is gotten without unset elements.

<expr type="limit">
	<rate>400</rate>
	<unit>60</unit>
</expr>

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/expr/limit.c | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/src/expr/limit.c b/src/expr/limit.c
index 6732318..3410597 100644
--- a/src/expr/limit.c
+++ b/src/expr/limit.c
@@ -145,16 +145,12 @@ static int nft_rule_expr_limit_xml_parse(struct nft_rule_expr *e,
 	uint64_t rate, unit;
 
 	if (nft_mxml_num_parse(tree, "rate", MXML_DESCEND_FIRST, BASE_DEC,
-			       &rate, NFT_TYPE_U64, NFT_XML_MAND,
-			       err) < 0)
-		return -1;
-	nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_RATE, rate);
+			       &rate, NFT_TYPE_U64, NFT_XML_MAND, err) == 0)
+		nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_RATE, rate);
 
 	if (nft_mxml_num_parse(tree, "unit", MXML_DESCEND_FIRST, BASE_DEC,
-			       &unit, NFT_TYPE_U64, NFT_XML_MAND,
-			       err) < 0)
-		return -1;
-	nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_UNIT, unit);
+			       &unit, NFT_TYPE_U64, NFT_XML_MAND, err) == 0)
+		nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_UNIT, unit);
 
 	return 0;
 #else
@@ -178,10 +174,20 @@ static const char *get_unit(uint64_t u)
 static int nft_rule_expr_limit_snprintf_xml(char *buf, size_t len,
 					    struct nft_rule_expr *e) {
 	struct nft_expr_limit *limit = nft_expr_data(e);
+	int ret, size = len, offset = 0;
 
-	return snprintf(buf, len, "<rate>%"PRIu64"</rate>"
-				  "<unit>%"PRIu64"</unit>",
-			limit->rate, limit->unit);
+	if (e->flags & (1 << NFT_EXPR_LIMIT_RATE)) {
+		ret = snprintf(buf + offset, len, "<rate>%"PRIu64"</rate>",
+			       limit->rate);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+	if (e->flags & (1 << NFT_EXPR_LIMIT_UNIT)) {
+		ret = snprintf(buf + offset, len, "<unit>%"PRIu64"</unit>",
+			       limit->unit);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+
+	return offset;
 }
 
 static int nft_rule_expr_limit_snprintf_json(char *buf, size_t len,
-- 
2.0.0


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

* Re: [libnftnl PATCH 0/4] limit: Do not print unset value
  2014-06-16  9:10 [libnftnl PATCH 0/4] limit: Do not print unset value Ana Rey
                   ` (3 preceding siblings ...)
  2014-06-16  9:10 ` [libnftnl PATCH 4/4] expr: limit: Do not print unset values in xml Ana Rey
@ 2014-06-16 10:34 ` Pablo Neira Ayuso
  4 siblings, 0 replies; 6+ messages in thread
From: Pablo Neira Ayuso @ 2014-06-16 10:34 UTC (permalink / raw)
  To: Ana Rey; +Cc: netfilter-devel

On Mon, Jun 16, 2014 at 11:10:13AM +0200, Ana Rey wrote:
> This patchset does tasks about does not print unset value in xml and json file
> and about refactoring code:
> "expr: limit: Add nft_rule_expr_limit_snprinf_* functions" and
> "expr: limit: Use nft_rule_expr_set_* in the xml parsing code"
> 
> Ana Rey (4):
>   expr: limit: Add nft_rule_expr_limit_snprinf_* functions
>   expr: limit: Use nft_rule_expr_set_* in the xml parsing code
>   expr: limit: Do not print unset values in json
>   expr: limit: Do not print unset values in xml

Series applied, thanks Ana.

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

end of thread, other threads:[~2014-06-16 10:34 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-16  9:10 [libnftnl PATCH 0/4] limit: Do not print unset value Ana Rey
2014-06-16  9:10 ` [libnftnl PATCH 1/4] expr: limit: Add nft_rule_expr_limit_snprinf_* functions Ana Rey
2014-06-16  9:10 ` [libnftnl PATCH 2/4] expr: limit: Use nft_rule_expr_set_* in the xml parsing code Ana Rey
2014-06-16  9:10 ` [libnftnl PATCH 3/4] expr: limit: Do not print unset values in json Ana Rey
2014-06-16  9:10 ` [libnftnl PATCH 4/4] expr: limit: Do not print unset values in xml Ana Rey
2014-06-16 10:34 ` [libnftnl PATCH 0/4] limit: Do not print unset value 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.