* [libnftnl PATCH v3 0/2] Do not print unset value in xml file
@ 2014-06-02 12:06 Ana Rey
2014-06-02 12:06 ` [libnftnl PATCH v3 1/2] expr: log: Code refactoring to use nft_rule_expr_set_* functions Ana Rey
2014-06-02 12:06 ` [libnftnl PATCH v3 2/2] src: expr: log: Do not print unset values in xml Ana Rey
0 siblings, 2 replies; 4+ messages in thread
From: Ana Rey @ 2014-06-02 12:06 UTC (permalink / raw)
To: netfilter-devel; +Cc: Ana Rey
In this version, I rename some variables, I fix writing errors in the patch
description and I fix wrong indentation.
[Change in v2:]
Hi,
After some advises of Arturo Borrero, I send a previous patch to
'Code refactoring to use nft_rule_expr_set_* functions' patch and v2 of
"Do not print unset values in xml" patch.
Ana Rey (2):
expr: log: Code refactoring to use nft_rule_expr_set_* functions
src: expr: log: Do not print unset values in xml.
src/expr/log.c | 93 ++++++++++++++++++++++++++++++++++------------------------
1 file changed, 54 insertions(+), 39 deletions(-)
--
2.0.0.rc2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [libnftnl PATCH v3 1/2] expr: log: Code refactoring to use nft_rule_expr_set_* functions
2014-06-02 12:06 [libnftnl PATCH v3 0/2] Do not print unset value in xml file Ana Rey
@ 2014-06-02 12:06 ` Ana Rey
2014-06-02 12:33 ` Pablo Neira Ayuso
2014-06-02 12:06 ` [libnftnl PATCH v3 2/2] src: expr: log: Do not print unset values in xml Ana Rey
1 sibling, 1 reply; 4+ messages in thread
From: Ana Rey @ 2014-06-02 12:06 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>
Suggested-by: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>
---
[Changes in v3:]
Delete uval16 variable name and add qthreshold and group variable name for
code readability reasons. Also, fix writing errors in the patch description.
[Changes in v2:]
Without changes.
src/expr/log.c | 44 ++++++++++++++++++++++----------------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/src/expr/log.c b/src/expr/log.c
index a61a8d3..0b7c646 100644
--- a/src/expr/log.c
+++ b/src/expr/log.c
@@ -133,6 +133,10 @@ nft_rule_expr_log_parse(struct nft_rule_expr *e, struct nlattr *attr)
{
struct nft_expr_log *log = nft_expr_data(e);
struct nlattr *tb[NFTA_LOG_MAX+1] = {};
+ const char *prefix;
+ uint32_t snaplen;
+ uint16_t group;
+ uint16_t qthreshold;
if (mnl_attr_parse_nested(attr, nft_rule_expr_log_cb, tb) < 0)
return -1;
@@ -141,20 +145,20 @@ nft_rule_expr_log_parse(struct nft_rule_expr *e, struct nlattr *attr)
if (log->prefix)
xfree(log->prefix);
- log->prefix = strdup(mnl_attr_get_str(tb[NFTA_LOG_PREFIX]));
- e->flags |= (1 << NFT_EXPR_LOG_PREFIX);
+ prefix = strdup(mnl_attr_get_str(tb[NFTA_LOG_PREFIX]));
+ nft_rule_expr_set_str(e, NFT_EXPR_LOG_PREFIX, prefix);
}
if (tb[NFTA_LOG_GROUP]) {
- log->group = ntohs(mnl_attr_get_u16(tb[NFTA_LOG_GROUP]));
- e->flags |= (1 << NFT_EXPR_LOG_GROUP);
+ group = ntohs(mnl_attr_get_u16(tb[NFTA_LOG_GROUP]));
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, group);
}
if (tb[NFTA_LOG_SNAPLEN]) {
- log->snaplen = ntohl(mnl_attr_get_u32(tb[NFTA_LOG_SNAPLEN]));
- e->flags |= (1 << NFT_EXPR_LOG_SNAPLEN);
+ snaplen = ntohl(mnl_attr_get_u32(tb[NFTA_LOG_SNAPLEN]));
+ nft_rule_expr_set_u32(e, NFT_EXPR_LOG_SNAPLEN, snaplen);
}
if (tb[NFTA_LOG_QTHRESHOLD]) {
- log->qthreshold = ntohs(mnl_attr_get_u16(tb[NFTA_LOG_QTHRESHOLD]));
- e->flags |= (1 << NFT_EXPR_LOG_QTHRESHOLD);
+ qthreshold = ntohs(mnl_attr_get_u16(tb[NFTA_LOG_QTHRESHOLD]));
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_QTHRESHOLD, qthreshold);
}
return 0;
@@ -166,7 +170,8 @@ static int nft_rule_expr_log_json_parse(struct nft_rule_expr *e, json_t *root,
#ifdef JSON_PARSING
const char *prefix;
uint32_t snaplen;
- uint16_t uval16;
+ uint16_t group;
+ uint16_t qthreshold;
prefix = nft_jansson_parse_str(root, "prefix", err);
if (prefix == NULL)
@@ -174,11 +179,11 @@ static int nft_rule_expr_log_json_parse(struct nft_rule_expr *e, json_t *root,
nft_rule_expr_set_str(e, NFT_EXPR_LOG_PREFIX, prefix);
- if (nft_jansson_parse_val(root, "group", NFT_TYPE_U16, &uval16,
+ if (nft_jansson_parse_val(root, "group", NFT_TYPE_U16, &group,
err) < 0)
return -1;
- nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, uval16);
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, group);
if (nft_jansson_parse_val(root, "snaplen", NFT_TYPE_U32, &snaplen,
err) < 0)
@@ -187,10 +192,10 @@ static int nft_rule_expr_log_json_parse(struct nft_rule_expr *e, json_t *root,
nft_rule_expr_set_u32(e, NFT_EXPR_LOG_SNAPLEN, snaplen);
if (nft_jansson_parse_val(root, "qthreshold", NFT_TYPE_U16,
- &uval16, err) < 0)
+ &qthreshold, err) < 0)
return -1;
- nft_rule_expr_set_u16(e, NFT_EXPR_LOG_QTHRESHOLD, uval16);
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_QTHRESHOLD, qthreshold);
return 0;
#else
@@ -211,30 +216,25 @@ static int nft_rule_expr_log_xml_parse(struct nft_rule_expr *e,
NFT_XML_MAND, err);
if (prefix == NULL)
return -1;
-
- log->prefix = strdup(prefix);
- e->flags |= (1 << NFT_EXPR_LOG_PREFIX);
+ nft_rule_expr_set_str(e, NFT_EXPR_LOG_PREFIX, prefix);
if (nft_mxml_num_parse(tree, "group", MXML_DESCEND_FIRST, BASE_DEC,
&log->group, NFT_TYPE_U16, NFT_XML_MAND,
err) != 0)
return -1;
-
- e->flags |= (1 << NFT_EXPR_LOG_GROUP);
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, log->group);
if (nft_mxml_num_parse(tree, "snaplen", MXML_DESCEND_FIRST, BASE_DEC,
&log->snaplen, NFT_TYPE_U32, NFT_XML_MAND,
err) != 0)
return -1;
-
- e->flags |= (1 << NFT_EXPR_LOG_SNAPLEN);
+ nft_rule_expr_set_u32(e, NFT_EXPR_LOG_SNAPLEN, log->snaplen);
if (nft_mxml_num_parse(tree, "qthreshold", MXML_DESCEND_FIRST,
BASE_DEC, &log->qthreshold,
NFT_TYPE_U16, NFT_XML_MAND, err) != 0)
return -1;
-
- e->flags |= (1 << NFT_EXPR_LOG_QTHRESHOLD);
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_QTHRESHOLD, log->qthreshold);
return 0;
#else
--
2.0.0.rc2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [libnftnl PATCH v3 2/2] src: expr: log: Do not print unset values in xml.
2014-06-02 12:06 [libnftnl PATCH v3 0/2] Do not print unset value in xml file Ana Rey
2014-06-02 12:06 ` [libnftnl PATCH v3 1/2] expr: log: Code refactoring to use nft_rule_expr_set_* functions Ana Rey
@ 2014-06-02 12:06 ` Ana Rey
1 sibling, 0 replies; 4+ messages in thread
From: Ana Rey @ 2014-06-02 12:06 UTC (permalink / raw)
To: netfilter-devel; +Cc: Ana Rey
It changes the parse and the snprint functions to omit unset values.
If we used this rule:
ntt add rule ip test output log
We got this xml file:
<rule><family>ip</family>
<table>test</table>
<chain>output</chain>
<handle>88</handle>
<expr type="log">
<prefix>(null)</prefix>
<group>0</group>
<snaplen>0</snaplen>
<qthreshold>0</qthreshold>
</expr>
</rule>
And It was imposible import this file.
Now, That rule creates this xml file without null values:
<rule><family>ip</family>
<table>test</table>
<chain>output</chain>
<handle>88</handle>
<expr type="log">
</expr>
</rule>
and It's possible import this xml file.
Signed-off-by: Ana Rey <anarey@gmail.com>
---
[Changes in v3]
Fix wrong indentation.
[Changes in v2]
This patch has some changes that derive from the previous
"src: expr: log: Code refactoring to use nft_rule_expr_set_* functions"
patch.
src/expr/log.c | 57 ++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 36 insertions(+), 21 deletions(-)
diff --git a/src/expr/log.c b/src/expr/log.c
index 0b7c646..12e9990 100644
--- a/src/expr/log.c
+++ b/src/expr/log.c
@@ -214,27 +214,25 @@ static int nft_rule_expr_log_xml_parse(struct nft_rule_expr *e,
prefix = nft_mxml_str_parse(tree, "prefix", MXML_DESCEND_FIRST,
NFT_XML_MAND, err);
- if (prefix == NULL)
- return -1;
- nft_rule_expr_set_str(e, NFT_EXPR_LOG_PREFIX, prefix);
+ if (prefix != NULL)
+ nft_rule_expr_set_str(e, NFT_EXPR_LOG_PREFIX, prefix);
if (nft_mxml_num_parse(tree, "group", MXML_DESCEND_FIRST, BASE_DEC,
&log->group, NFT_TYPE_U16, NFT_XML_MAND,
- err) != 0)
- return -1;
- nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, log->group);
+ err) == 0)
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, log->group);
if (nft_mxml_num_parse(tree, "snaplen", MXML_DESCEND_FIRST, BASE_DEC,
&log->snaplen, NFT_TYPE_U32, NFT_XML_MAND,
- err) != 0)
- return -1;
- nft_rule_expr_set_u32(e, NFT_EXPR_LOG_SNAPLEN, log->snaplen);
-
- if (nft_mxml_num_parse(tree, "qthreshold", MXML_DESCEND_FIRST,
- BASE_DEC, &log->qthreshold,
- NFT_TYPE_U16, NFT_XML_MAND, err) != 0)
- return -1;
- nft_rule_expr_set_u16(e, NFT_EXPR_LOG_QTHRESHOLD, log->qthreshold);
+ err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_LOG_SNAPLEN, log->snaplen);
+
+ if (nft_mxml_num_parse(tree, "qthreshold", MXML_DESCEND_FIRST, BASE_DEC,
+ &log->qthreshold, NFT_TYPE_U16, NFT_XML_MAND,
+ err) == 0) {
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_QTHRESHOLD,
+ log->qthreshold);
+ }
return 0;
#else
@@ -256,14 +254,31 @@ static int nft_rule_expr_log_snprintf_default(char *buf, size_t len,
static int nft_rule_expr_log_snprintf_xml(char *buf, size_t size,
struct nft_rule_expr *e)
{
+ int ret, len = size, offset = 0;
struct nft_expr_log *log = nft_expr_data(e);
- return snprintf(buf, size, "<prefix>%s</prefix>"
- "<group>%u</group>"
- "<snaplen>%u</snaplen>"
- "<qthreshold>%u</qthreshold>",
- log->prefix, log->group,
- log->snaplen, log->qthreshold);
+ if (e->flags & (1 << NFT_EXPR_LOG_PREFIX)) {
+ ret = snprintf(buf+offset, len, "<prefix>%s</prefix>",
+ log->prefix);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_LOG_GROUP)) {
+ ret = snprintf(buf+offset, len, "<group>%u</group>",
+ log->group);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_LOG_SNAPLEN)) {
+ ret = snprintf(buf+offset, len, "<snaplen>%u</snaplen>",
+ log->snaplen);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ if (e->flags & (1 << NFT_EXPR_LOG_QTHRESHOLD)) {
+ ret = snprintf(buf+offset, len, "<qthreshold>%u</qthreshold>",
+ log->qthreshold);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+
+ return offset;
}
static int nft_rule_expr_log_snprintf_json(char *buf, size_t len,
--
2.0.0.rc2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [libnftnl PATCH v3 1/2] expr: log: Code refactoring to use nft_rule_expr_set_* functions
2014-06-02 12:06 ` [libnftnl PATCH v3 1/2] expr: log: Code refactoring to use nft_rule_expr_set_* functions Ana Rey
@ 2014-06-02 12:33 ` Pablo Neira Ayuso
0 siblings, 0 replies; 4+ messages in thread
From: Pablo Neira Ayuso @ 2014-06-02 12:33 UTC (permalink / raw)
To: Ana Rey; +Cc: netfilter-devel, arturo.borrero.glez
On Mon, Jun 02, 2014 at 02:06:09PM +0200, Ana Rey wrote:
> @@ -211,30 +216,25 @@ static int nft_rule_expr_log_xml_parse(struct nft_rule_expr *e,
> NFT_XML_MAND, err);
> if (prefix == NULL)
> return -1;
> -
> - log->prefix = strdup(prefix);
> - e->flags |= (1 << NFT_EXPR_LOG_PREFIX);
> + nft_rule_expr_set_str(e, NFT_EXPR_LOG_PREFIX, prefix);
>
> if (nft_mxml_num_parse(tree, "group", MXML_DESCEND_FIRST, BASE_DEC,
> &log->group, NFT_TYPE_U16, NFT_XML_MAND,
^^^^^^^^^^^
note this
> err) != 0)
> return -1;
> -
> - e->flags |= (1 << NFT_EXPR_LOG_GROUP);
> + nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, log->group);
I know Arturo asked for this, but it doesn't make much sense to set
log->group from nft_mxml_num_parse() and then reset it again via
nft_rule_expr_set_u16().
My suggestion is to make something similar to what the _json() parse
function currently do, ie.
uint16_t group;
...
if (nft_mxml_num_parse(tree, "group", MXML_DESCEND_FIRST,
BASE_DEC, &group, NFT_TYPE_U16,
NFT_XML_MAND, err) < 0)
return -1;
nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, group);
Note that, while at it, we can consolidate the if check to < 0 instead
of != 0 as we do in many other parts of the code.
Please, send me a v4 version.
Regarding the title, I'd suggest: "Use nft_rule_expr_set_* the xml parsing code"
The json chunk below, you can send me in a different patch as a
cleanup. Thanks.
@@ -166,7 +170,8 @@ static int nft_rule_expr_log_json_parse(struct
nft_rule_expr *e, json_t *root,
#ifdef JSON_PARSING
const char *prefix;
uint32_t snaplen;
- uint16_t uval16;
+ uint16_t group;
+ uint16_t qthreshold;
prefix = nft_jansson_parse_str(root, "prefix", err);
if (prefix == NULL)
@@ -174,11 +179,11 @@ static int nft_rule_expr_log_json_parse(struct
nft_rule_expr *e, json_t *root,
nft_rule_expr_set_str(e, NFT_EXPR_LOG_PREFIX, prefix);
- if (nft_jansson_parse_val(root, "group", NFT_TYPE_U16,
&uval16,
+ if (nft_jansson_parse_val(root, "group", NFT_TYPE_U16, &group,
err) < 0)
return -1;
- nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, uval16);
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_GROUP, group);
if (nft_jansson_parse_val(root, "snaplen", NFT_TYPE_U32,
&snaplen,
err) < 0)
@@ -187,10 +192,10 @@ static int nft_rule_expr_log_json_parse(struct
nft_rule_expr *e, json_t *root,
nft_rule_expr_set_u32(e, NFT_EXPR_LOG_SNAPLEN, snaplen);
if (nft_jansson_parse_val(root, "qthreshold", NFT_TYPE_U16,
- &uval16, err) < 0)
+ &qthreshold, err) < 0)
return -1;
- nft_rule_expr_set_u16(e, NFT_EXPR_LOG_QTHRESHOLD, uval16);
+ nft_rule_expr_set_u16(e, NFT_EXPR_LOG_QTHRESHOLD, qthreshold);
return 0;
#else
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-06-02 12:33 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-02 12:06 [libnftnl PATCH v3 0/2] Do not print unset value in xml file Ana Rey
2014-06-02 12:06 ` [libnftnl PATCH v3 1/2] expr: log: Code refactoring to use nft_rule_expr_set_* functions Ana Rey
2014-06-02 12:33 ` Pablo Neira Ayuso
2014-06-02 12:06 ` [libnftnl PATCH v3 2/2] src: expr: log: Do not print unset values in xml Ana Rey
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.