summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2015-11-15 16:10:45 +0000
committerPatrick McHardy <kaber@trash.net>2015-11-15 16:10:45 +0000
commitc552570dc67a56614c1053b9ea2fb27cd6ce106b (patch)
tree4fca6d4ed25a5abead43ec2890085d8e00b17ac1
parent2f16228172ff3629c09b7d0633e30c125aebc37e (diff)
rule: move comment out of handle
The comment does not belong to the handle, it belongs to the rule. Signed-off-by: Patrick McHardy <kaber@trash.net>
-rw-r--r--include/rule.h4
-rw-r--r--src/netlink.c3
-rw-r--r--src/netlink_delinearize.c16
-rw-r--r--src/netlink_linearize.c4
-rw-r--r--src/parser_bison.y2
-rw-r--r--src/rule.c8
6 files changed, 18 insertions, 19 deletions
diff --git a/include/rule.h b/include/rule.h
index a86f600b..c848f0fc 100644
--- a/include/rule.h
+++ b/include/rule.h
@@ -15,7 +15,6 @@
* @handle: rule handle (rules only)
* @position: rule position (rules only)
* @set_id: set ID (sets only)
- * @comment: human-readable comment (rules only)
*/
struct handle {
uint32_t family;
@@ -25,7 +24,6 @@ struct handle {
uint64_t handle;
uint64_t position;
uint32_t set_id;
- const char *comment;
};
extern void handle_merge(struct handle *dst, const struct handle *src);
@@ -157,6 +155,7 @@ extern void chain_print_plain(const struct chain *chain);
* @location: location the rule was defined at
* @stmt: list of statements
* @num_stmts: number of statements in stmts list
+ * @comment: comment
*/
struct rule {
struct list_head list;
@@ -164,6 +163,7 @@ struct rule {
struct location location;
struct list_head stmts;
unsigned int num_stmts;
+ const char *comment;
};
extern struct rule *rule_alloc(const struct location *loc,
diff --git a/src/netlink.c b/src/netlink.c
index ad86084e..974afb17 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -167,9 +167,6 @@ struct nftnl_rule *alloc_nftnl_rule(const struct handle *h)
nftnl_rule_set_u64(nlr, NFTNL_RULE_HANDLE, h->handle);
if (h->position)
nftnl_rule_set_u64(nlr, NFTNL_RULE_POSITION, h->position);
- if (h->comment)
- nftnl_rule_set_data(nlr, NFTNL_RULE_USERDATA,
- h->comment, strlen(h->comment) + 1);
return nlr;
}
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c
index 3584de78..3499d748 100644
--- a/src/netlink_delinearize.c
+++ b/src/netlink_delinearize.c
@@ -1609,19 +1609,19 @@ struct rule *netlink_delinearize_rule(struct netlink_ctx *ctx,
if (nftnl_rule_is_set(nlr, NFTNL_RULE_POSITION))
h.position = nftnl_rule_get_u64(nlr, NFTNL_RULE_POSITION);
+ pctx->rule = rule_alloc(&netlink_location, &h);
+ pctx->table = table_lookup(&h);
+ assert(pctx->table != NULL);
+
if (nftnl_rule_is_set(nlr, NFTNL_RULE_USERDATA)) {
- uint32_t len;
const void *data;
+ uint32_t len;
- data = nftnl_rule_get_data(nlr, NFTNL_RULE_USERDATA,
- &len);
- h.comment = xmalloc(len);
- memcpy((char *)h.comment, data, len);
+ data = nftnl_rule_get_data(nlr, NFTNL_RULE_USERDATA, &len);
+ pctx->rule->comment = xmalloc(len);
+ memcpy((char *)pctx->rule->comment, data, len);
}
- pctx->rule = rule_alloc(&netlink_location, &h);
- pctx->table = table_lookup(&h);
- assert(pctx->table != NULL);
nftnl_expr_foreach((struct nftnl_rule *)nlr, netlink_parse_expr, pctx);
rule_parse_postprocess(pctx, pctx->rule);
diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c
index c9af0365..7c6ef165 100644
--- a/src/netlink_linearize.c
+++ b/src/netlink_linearize.c
@@ -1030,5 +1030,9 @@ void netlink_linearize_rule(struct netlink_ctx *ctx, struct nftnl_rule *nlr,
list_for_each_entry(stmt, &rule->stmts, list)
netlink_gen_stmt(&lctx, stmt);
+ if (rule->comment)
+ nftnl_rule_set_data(nlr, NFTNL_RULE_USERDATA,
+ rule->comment, strlen(rule->comment) + 1);
+
netlink_dump_rule(nlr);
}
diff --git a/src/parser_bison.y b/src/parser_bison.y
index ab4524b8..ec1e7428 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -1288,7 +1288,7 @@ rule : stmt_list comment_spec
struct stmt *i;
$$ = rule_alloc(&@$, NULL);
- $$->handle.comment = $2;
+ $$->comment = $2;
list_for_each_entry(i, $1, list)
$$->num_stmts++;
list_splice_tail($1, &$$->stmts);
diff --git a/src/rule.c b/src/rule.c
index df4d1fb4..5d3cd841 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -32,7 +32,6 @@ void handle_free(struct handle *h)
xfree(h->table);
xfree(h->chain);
xfree(h->set);
- xfree(h->comment);
}
void handle_merge(struct handle *dst, const struct handle *src)
@@ -49,8 +48,6 @@ void handle_merge(struct handle *dst, const struct handle *src)
dst->handle = src->handle;
if (dst->position == 0)
dst->position = src->position;
- if (dst->comment == NULL && src->comment != NULL)
- dst->comment = xstrdup(src->comment);
}
static LIST_HEAD(table_list);
@@ -378,6 +375,7 @@ void rule_free(struct rule *rule)
{
stmt_list_free(&rule->stmts);
handle_free(&rule->handle);
+ xfree(rule->comment);
xfree(rule);
}
@@ -390,8 +388,8 @@ void rule_print(const struct rule *rule)
printf(" ");
}
- if (rule->handle.comment)
- printf("comment \"%s\" ", rule->handle.comment);
+ if (rule->comment)
+ printf("comment \"%s\" ", rule->comment);
if (handle_output > 0)
printf("# handle %" PRIu64, rule->handle.handle);