All of lore.kernel.org
 help / color / mirror / Atom feed
* [libnftnl PATCH 0/5] Do not print unset values in xml and json
@ 2014-06-26 17:08 Ana Rey
  2014-06-26 17:08 ` [libnftnl PATCH 1/5] src: table: Free memory in the same function that is reserved Ana Rey
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Ana Rey @ 2014-06-26 17:08 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:

* src: table: Free memory in the same function that is reserved
* src: table: Use nft_table_attr_set_* in the xml functions
* src: table: Add set, unset and parse implementation for use value

 Moreover, I add some implementations for use value.

Ana Rey (5):
  src: table: Free memory in the same function that is reserved
  src: table: Use nft_table_attr_set_* in the xml functions
  src: table: Add set, unset and parse implementation for use value
  src: table: Do not print unset values in xml file
  src: table: Do not print unset values in json file

 src/table.c | 144 ++++++++++++++++++++++++++++++++++++++----------------------
 1 file changed, 92 insertions(+), 52 deletions(-)

-- 
2.0.0


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

* [libnftnl PATCH 1/5] src: table: Free memory in the same function that is reserved
  2014-06-26 17:08 [libnftnl PATCH 0/5] Do not print unset values in xml and json Ana Rey
@ 2014-06-26 17:08 ` Ana Rey
  2014-06-26 17:08 ` [libnftnl PATCH 2/5] src: table: Use nft_table_attr_set_* in the xml functions Ana Rey
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Ana Rey @ 2014-06-26 17:08 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

Free memory in the same function that is reserved.

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

diff --git a/src/table.c b/src/table.c
index b4d1663..ed6e615 100644
--- a/src/table.c
+++ b/src/table.c
@@ -328,25 +328,21 @@ int nft_jansson_parse_table(struct nft_table *t, json_t *tree,
 
 	str = nft_jansson_parse_str(root, "name", err);
 	if (str == NULL)
-		goto err;
+		return -1;
 
 	nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, str);
 
 	if (nft_jansson_parse_family(root, &family, err) != 0)
-		goto err;
+		return -1;
 
 	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family);
 
 	if (nft_jansson_parse_val(root, "flags", NFT_TYPE_U32, &flags, err) < 0)
-		goto err;
+		return -1;
 
 	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags);
 
-	nft_jansson_free_root(tree);
 	return 0;
-err:
-	nft_jansson_free_root(tree);
-	return -1;
 }
 #endif
 
@@ -357,12 +353,17 @@ static int nft_table_json_parse(struct nft_table *t, const void *json,
 #ifdef JSON_PARSING
 	json_t *tree;
 	json_error_t error;
+	int ret;
 
 	tree = nft_jansson_create_root(json, &error, err, input);
 	if (tree == NULL)
 		return -1;
 
-	return nft_jansson_parse_table(t, tree, err);
+	ret = nft_jansson_parse_table(t, tree, err);
+
+	nft_jansson_free_root(tree);
+
+	return ret;
 #else
 	errno = EOPNOTSUPP;
 	return -1;
-- 
2.0.0


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

* [libnftnl PATCH 2/5] src: table: Use nft_table_attr_set_* in the xml functions
  2014-06-26 17:08 [libnftnl PATCH 0/5] Do not print unset values in xml and json Ana Rey
  2014-06-26 17:08 ` [libnftnl PATCH 1/5] src: table: Free memory in the same function that is reserved Ana Rey
@ 2014-06-26 17:08 ` Ana Rey
  2014-06-26 17:08 ` [libnftnl PATCH 3/5] src: table: Add set, unset and parse implementation for use value Ana Rey
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Ana Rey @ 2014-06-26 17:08 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

Code refactoring to use nft_table_attr_set_* in parse xml functions.

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/table.c | 18 +++++-------------
 1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/src/table.c b/src/table.c
index ed6e615..de4a64d 100644
--- a/src/table.c
+++ b/src/table.c
@@ -263,32 +263,24 @@ int nft_mxml_table_parse(mxml_node_t *tree, struct nft_table *t,
 {
 	const char *name;
 	int family;
+	uint32_t flags;
 
 	name = nft_mxml_str_parse(tree, "name", MXML_DESCEND_FIRST,
 				  NFT_XML_MAND, err);
 	if (name == NULL)
 		return -1;
-
-	if (t->name)
-		xfree(t->name);
-
-	t->name = strdup(name);
-	t->flags |= (1 << NFT_TABLE_ATTR_NAME);
+	nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, name);
 
 	family = nft_mxml_family_parse(tree, "family", MXML_DESCEND_FIRST,
 				       NFT_XML_MAND, err);
 	if (family < 0)
 		return -1;
-
-	t->family = family;
-	t->flags |= (1 << NFT_TABLE_ATTR_FAMILY);
+	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family);
 
 	if (nft_mxml_num_parse(tree, "flags", MXML_DESCEND, BASE_DEC,
-			       &t->table_flags, NFT_TYPE_U32,
-			       NFT_XML_MAND, err) != 0)
+			       &flags, NFT_TYPE_U32, NFT_XML_MAND, err) != 0)
 		return -1;
-
-	t->flags |= (1 << NFT_TABLE_ATTR_FLAGS);
+	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags);
 
 	return 0;
 }
-- 
2.0.0


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

* [libnftnl PATCH 3/5] src: table: Add set, unset and parse implementation for use value
  2014-06-26 17:08 [libnftnl PATCH 0/5] Do not print unset values in xml and json Ana Rey
  2014-06-26 17:08 ` [libnftnl PATCH 1/5] src: table: Free memory in the same function that is reserved Ana Rey
  2014-06-26 17:08 ` [libnftnl PATCH 2/5] src: table: Use nft_table_attr_set_* in the xml functions Ana Rey
@ 2014-06-26 17:08 ` Ana Rey
  2014-06-26 17:08 ` [libnftnl PATCH 4/5] src: table: Do not print unset values in xml file Ana Rey
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Ana Rey @ 2014-06-26 17:08 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

Add some parts of the implemention of 'use' vualue in table that miss it.

These changes are neeeded for a correct import/export of xml/json file

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/table.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/table.c b/src/table.c
index de4a64d..5a0135f 100644
--- a/src/table.c
+++ b/src/table.c
@@ -72,8 +72,7 @@ void nft_table_attr_unset(struct nft_table *t, uint16_t attr)
 	case NFT_TABLE_ATTR_FAMILY:
 		break;
 	case NFT_TABLE_ATTR_USE:
-		/* Cannot be unset, ignoring it */
-		return;
+		break;
 	}
 	t->flags &= ~(1 << attr);
 }
@@ -106,8 +105,8 @@ void nft_table_attr_set_data(struct nft_table *t, uint16_t attr,
 		t->family = *((uint32_t *)data);
 		break;
 	case NFT_TABLE_ATTR_USE:
-		/* Cannot be set, ignoring it */
-		return;
+		t->use = *((uint32_t *)data);
+		break;
 	}
 	t->flags |= (1 << attr);
 }
@@ -263,7 +262,7 @@ int nft_mxml_table_parse(mxml_node_t *tree, struct nft_table *t,
 {
 	const char *name;
 	int family;
-	uint32_t flags;
+	uint32_t flags, use;
 
 	name = nft_mxml_str_parse(tree, "name", MXML_DESCEND_FIRST,
 				  NFT_XML_MAND, err);
@@ -282,6 +281,10 @@ int nft_mxml_table_parse(mxml_node_t *tree, struct nft_table *t,
 		return -1;
 	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags);
 
+	if (nft_mxml_num_parse(tree, "use", MXML_DESCEND, BASE_DEC,
+			       &use, NFT_TYPE_U32, NFT_XML_MAND, err) == 0)
+		nft_table_attr_set_u32(t, NFT_TABLE_ATTR_USE, use);
+
 	return 0;
 }
 #endif
@@ -310,7 +313,7 @@ int nft_jansson_parse_table(struct nft_table *t, json_t *tree,
 			    struct nft_parse_err *err)
 {
 	json_t *root;
-	uint32_t flags;
+	uint32_t flags, use;
 	const char *str;
 	int family;
 
@@ -334,6 +337,9 @@ int nft_jansson_parse_table(struct nft_table *t, json_t *tree,
 
 	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags);
 
+	if (nft_jansson_parse_val(root, "use", NFT_TYPE_U32, &use, err) == 0)
+		nft_table_attr_set_u32(t, NFT_TABLE_ATTR_USE, use);
+
 	return 0;
 }
 #endif
-- 
2.0.0


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

* [libnftnl PATCH 4/5] src: table: Do not print unset values in xml file
  2014-06-26 17:08 [libnftnl PATCH 0/5] Do not print unset values in xml and json Ana Rey
                   ` (2 preceding siblings ...)
  2014-06-26 17:08 ` [libnftnl PATCH 3/5] src: table: Add set, unset and parse implementation for use value Ana Rey
@ 2014-06-26 17:08 ` Ana Rey
  2014-06-26 17:08 ` [libnftnl PATCH 5/5] src: table: Do not print unset values in json file Ana Rey
  2014-06-30 10:49 ` [libnftnl PATCH 0/5] Do not print unset values in xml and json Pablo Neira Ayuso
  5 siblings, 0 replies; 7+ messages in thread
From: Ana Rey @ 2014-06-26 17:08 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

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

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/table.c | 47 ++++++++++++++++++++++++++++++++++-------------
 1 file changed, 34 insertions(+), 13 deletions(-)

diff --git a/src/table.c b/src/table.c
index 5a0135f..7874245 100644
--- a/src/table.c
+++ b/src/table.c
@@ -266,20 +266,17 @@ int nft_mxml_table_parse(mxml_node_t *tree, struct nft_table *t,
 
 	name = nft_mxml_str_parse(tree, "name", MXML_DESCEND_FIRST,
 				  NFT_XML_MAND, err);
-	if (name == NULL)
-		return -1;
-	nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, name);
+	if (name != NULL)
+		nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, name);
 
 	family = nft_mxml_family_parse(tree, "family", MXML_DESCEND_FIRST,
 				       NFT_XML_MAND, err);
-	if (family < 0)
-		return -1;
-	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family);
+	if (family >= 0)
+		nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family);
 
 	if (nft_mxml_num_parse(tree, "flags", MXML_DESCEND, BASE_DEC,
-			       &flags, NFT_TYPE_U32, NFT_XML_MAND, err) != 0)
-		return -1;
-	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags);
+			       &flags, NFT_TYPE_U32, NFT_XML_MAND, err) == 0)
+		nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags);
 
 	if (nft_mxml_num_parse(tree, "use", MXML_DESCEND, BASE_DEC,
 			       &use, NFT_TYPE_U32, NFT_XML_MAND, err) == 0)
@@ -424,10 +421,34 @@ static int nft_table_snprintf_json(char *buf, size_t size, struct nft_table *t)
 
 static int nft_table_snprintf_xml(char *buf, size_t size, struct nft_table *t)
 {
-	return snprintf(buf, size, "<table><name>%s</name><family>%s</family>"
-			"<flags>%d</flags><use>%d</use></table>",
-			t->name, nft_family2str(t->family),
-			t->table_flags, t->use);
+	int ret, len = size, offset = 0;
+
+	ret = snprintf(buf, size, "<table>");
+	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+	if (t->flags & (1 << NFT_TABLE_ATTR_NAME)) {
+		ret = snprintf(buf + offset, size, "<name>%s</name>", t->name);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+	if (t->flags & (1 << NFT_TABLE_ATTR_FAMILY)) {
+		ret = snprintf(buf + offset, size, "<family>%s</family>",
+			       nft_family2str(t->family));
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+	if (t->flags & (1 << NFT_TABLE_ATTR_FLAGS)) {
+		ret = snprintf(buf + offset, size, "<flags>%u</flags>",
+			       t->table_flags);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+	if (t->flags & (1 << NFT_TABLE_ATTR_USE)) {
+		ret = snprintf(buf + offset, size, "<use>%u</use>", t->use);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+
+	ret = snprintf(buf + offset, size, "</table>");
+	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+	return offset;
 }
 
 static int nft_table_snprintf_default(char *buf, size_t size, struct nft_table *t)
-- 
2.0.0


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

* [libnftnl PATCH 5/5] src: table: Do not print unset values in json file
  2014-06-26 17:08 [libnftnl PATCH 0/5] Do not print unset values in xml and json Ana Rey
                   ` (3 preceding siblings ...)
  2014-06-26 17:08 ` [libnftnl PATCH 4/5] src: table: Do not print unset values in xml file Ana Rey
@ 2014-06-26 17:08 ` Ana Rey
  2014-06-30 10:49 ` [libnftnl PATCH 0/5] Do not print unset values in xml and json Pablo Neira Ayuso
  5 siblings, 0 replies; 7+ messages in thread
From: Ana Rey @ 2014-06-26 17:08 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

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

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/table.c | 64 ++++++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 42 insertions(+), 22 deletions(-)

diff --git a/src/table.c b/src/table.c
index 7874245..abbaa52 100644
--- a/src/table.c
+++ b/src/table.c
@@ -319,20 +319,15 @@ int nft_jansson_parse_table(struct nft_table *t, json_t *tree,
 		return -1;
 
 	str = nft_jansson_parse_str(root, "name", err);
-	if (str == NULL)
-		return -1;
-
-	nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, str);
-
-	if (nft_jansson_parse_family(root, &family, err) != 0)
-		return -1;
-
-	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family);
+	if (str != NULL)
+		nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, str);
 
-	if (nft_jansson_parse_val(root, "flags", NFT_TYPE_U32, &flags, err) < 0)
-		return -1;
+	if (nft_jansson_parse_family(root, &family, err) == 0)
+		nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family);
 
-	nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags);
+	if (nft_jansson_parse_val(root, "flags", NFT_TYPE_U32, &flags,
+				  err) == 0)
+		nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags);
 
 	if (nft_jansson_parse_val(root, "use", NFT_TYPE_U32, &use, err) == 0)
 		nft_table_attr_set_u32(t, NFT_TABLE_ATTR_USE, use);
@@ -407,16 +402,41 @@ EXPORT_SYMBOL(nft_table_parse_file);
 
 static int nft_table_snprintf_json(char *buf, size_t size, struct nft_table *t)
 {
-	return snprintf(buf, size,
-			"{\"table\":{"
-			"\"name\":\"%s\","
-			"\"family\":\"%s\","
-			"\"flags\":%d,"
-			"\"use\":%d"
-			"}"
-			"}" ,
-			t->name, nft_family2str(t->family),
-			t->table_flags, t->use);
+	int ret, len = size, offset = 0;
+
+	ret = snprintf(buf, size, "{\"table\":{");
+	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	ret = 0;
+
+	if (t->flags & (1 << NFT_TABLE_ATTR_NAME)) {
+		ret = snprintf(buf + offset, size, "\"name\":\"%s\",", t->name);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+	if (t->flags & (1 << NFT_TABLE_ATTR_FAMILY)) {
+		ret = snprintf(buf + offset, size, "\"family\":\"%s\",",
+			       nft_family2str(t->family));
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+	if (t->flags & (1 << NFT_TABLE_ATTR_FLAGS)) {
+		ret = snprintf(buf + offset, size, "\"flags\":%u,",
+			       t->table_flags);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+	if (t->flags & (1 << NFT_TABLE_ATTR_USE)) {
+		ret = snprintf(buf + offset, size, "\"use\":%u,", t->use);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+
+	/* If  some values is set, ret is not 0. So, It's needed to remove the
+	 * last comma characther
+	 */
+	if (ret > 0)
+		offset--;
+
+	ret = snprintf(buf + offset, size, "}}");
+	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+	return offset;
 }
 
 static int nft_table_snprintf_xml(char *buf, size_t size, struct nft_table *t)
-- 
2.0.0


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

* Re: [libnftnl PATCH 0/5] Do not print unset values in xml and json
  2014-06-26 17:08 [libnftnl PATCH 0/5] Do not print unset values in xml and json Ana Rey
                   ` (4 preceding siblings ...)
  2014-06-26 17:08 ` [libnftnl PATCH 5/5] src: table: Do not print unset values in json file Ana Rey
@ 2014-06-30 10:49 ` Pablo Neira Ayuso
  5 siblings, 0 replies; 7+ messages in thread
From: Pablo Neira Ayuso @ 2014-06-30 10:49 UTC (permalink / raw)
  To: Ana Rey; +Cc: netfilter-devel

On Thu, Jun 26, 2014 at 07:08:36PM +0200, Ana Rey wrote:
> This patchset does tasks about does not print unset value in xml and json file
> and about refactoring code:
> 
> * src: table: Free memory in the same function that is reserved
> * src: table: Use nft_table_attr_set_* in the xml functions
> * src: table: Add set, unset and parse implementation for use value
> 
>  Moreover, I add some implementations for use value.
> 
> Ana Rey (5):
>   src: table: Free memory in the same function that is reserved
>   src: table: Use nft_table_attr_set_* in the xml functions
>   src: table: Add set, unset and parse implementation for use value
>   src: table: Do not print unset values in xml file
>   src: table: Do not print unset values in json file

Series applied, thanks Ana.

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

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

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-26 17:08 [libnftnl PATCH 0/5] Do not print unset values in xml and json Ana Rey
2014-06-26 17:08 ` [libnftnl PATCH 1/5] src: table: Free memory in the same function that is reserved Ana Rey
2014-06-26 17:08 ` [libnftnl PATCH 2/5] src: table: Use nft_table_attr_set_* in the xml functions Ana Rey
2014-06-26 17:08 ` [libnftnl PATCH 3/5] src: table: Add set, unset and parse implementation for use value Ana Rey
2014-06-26 17:08 ` [libnftnl PATCH 4/5] src: table: Do not print unset values in xml file Ana Rey
2014-06-26 17:08 ` [libnftnl PATCH 5/5] src: table: Do not print unset values in json file Ana Rey
2014-06-30 10:49 ` [libnftnl PATCH 0/5] 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.