From c552570dc67a56614c1053b9ea2fb27cd6ce106b Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Sun, 15 Nov 2015 16:10:45 +0000 Subject: rule: move comment out of handle The comment does not belong to the handle, it belongs to the rule. Signed-off-by: Patrick McHardy --- src/netlink.c | 3 --- src/netlink_delinearize.c | 16 ++++++++-------- src/netlink_linearize.c | 4 ++++ src/parser_bison.y | 2 +- src/rule.c | 8 +++----- 5 files changed, 16 insertions(+), 17 deletions(-) (limited to 'src') 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); -- cgit v1.2.3