]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
rule: move comment out of handle
authorPatrick McHardy <kaber@trash.net>
Sun, 15 Nov 2015 16:10:45 +0000 (16:10 +0000)
committerPatrick McHardy <kaber@trash.net>
Sun, 15 Nov 2015 16:10:45 +0000 (16:10 +0000)
The comment does not belong to the handle, it belongs to the rule.

Signed-off-by: Patrick McHardy <kaber@trash.net>
include/rule.h
src/netlink.c
src/netlink_delinearize.c
src/netlink_linearize.c
src/parser_bison.y
src/rule.c

index a86f600b013b624b5f3e42a300634e62b169b861..c848f0fc94410103faf32ae88e5d93c55028d43c 100644 (file)
@@ -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,
index ad86084e8d259e804d8e9c34fea87ab38daa74d3..974afb17e2f6b6ee61ced84a0d92e2ad46506f84 100644 (file)
@@ -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;
 }
index 3584de782134b2b58de618ae0b932b0fb3fedace..3499d748285acf4dd2507e7d084e4aff2cd7bffd 100644 (file)
@@ -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);
index c9af03650c368f99817646a300672d73bccdea79..7c6ef1659fb79667466cfc6ae030888267385f78 100644 (file)
@@ -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);
 }
index ab4524b83293004a6828a1fbf985e48d7e0de2d1..ec1e7428805a9b04dafa7dd4c53b35664fb1700e 100644 (file)
@@ -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);
index df4d1fb47cde51d6137beded515b7908efa7a207..5d3cd84124be4b5c876bcbe2276de1b32a98aa04 100644 (file)
@@ -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);