]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
netlink: Make use of nftnl_{expr,set_elem}_set_imm()
authorPhil Sutter <phil@nwl.cc>
Wed, 8 Oct 2025 20:15:15 +0000 (22:15 +0200)
committerPhil Sutter <phil@nwl.cc>
Tue, 27 Jan 2026 22:01:54 +0000 (23:01 +0100)
Pass the previously collected byteorder (and sizes) to libnftnl for
improved netlink debug output.

Signed-off-by: Phil Sutter <phil@nwl.cc>
src/netlink.c
src/netlink_linearize.c

index d81cfccb6c6aa97ddd3183d752a100cd850efb96..ad19f8b7dc39236daa9cd23bf29fd67a7b2d4c60 100644 (file)
@@ -139,17 +139,22 @@ struct nftnl_set_elem *alloc_nftnl_setelem(const struct expr *set,
                        netlink_gen_key(key, &nld);
                        key->flags &= ~EXPR_F_INTERVAL;
 
-                       nftnl_set_elem_set(nlse, NFTNL_SET_ELEM_KEY, nld.value, nld.len);
+                       nftnl_set_elem_set_imm(nlse, NFTNL_SET_ELEM_KEY,
+                                              nld.value, nld.len,
+                                              nld.byteorder, nld.sizes);
 
                        key->flags |= EXPR_F_INTERVAL_END;
                        netlink_gen_key(key, &nld);
                        key->flags &= ~EXPR_F_INTERVAL_END;
 
-                       nftnl_set_elem_set(nlse, NFTNL_SET_ELEM_KEY_END,
-                                          nld.value, nld.len);
+                       nftnl_set_elem_set_imm(nlse, NFTNL_SET_ELEM_KEY_END,
+                                              nld.value, nld.len,
+                                              nld.byteorder, nld.sizes);
                } else {
                        netlink_gen_key(key, &nld);
-                       nftnl_set_elem_set(nlse, NFTNL_SET_ELEM_KEY, nld.value, nld.len);
+                       nftnl_set_elem_set_imm(nlse, NFTNL_SET_ELEM_KEY,
+                                              nld.value, nld.len,
+                                              nld.byteorder, nld.sizes);
                }
                break;
        }
@@ -217,8 +222,9 @@ struct nftnl_set_elem *alloc_nftnl_setelem(const struct expr *set,
                case EXPR_RANGE:
                case EXPR_RANGE_VALUE:
                case EXPR_PREFIX:
-                       nftnl_set_elem_set(nlse, NFTNL_SET_ELEM_DATA,
-                                          nld.value, nld.len);
+                       nftnl_set_elem_set_imm(nlse, NFTNL_SET_ELEM_DATA,
+                                              nld.value, nld.len,
+                                              nld.byteorder, nld.sizes);
                        break;
                default:
                        BUG("unexpected set element expression");
index 30bc0094cc7e6f705d883fd0e22183f34e28fcfd..ac0eaff9a23cab291dc4273afa35cabb8e86db87 100644 (file)
@@ -482,8 +482,10 @@ static struct expr *netlink_gen_prefix(struct netlink_linearize_ctx *ctx,
        netlink_put_register(nle, NFTNL_EXPR_BITWISE_SREG, sreg);
        netlink_put_register(nle, NFTNL_EXPR_BITWISE_DREG, sreg);
        nftnl_expr_set_u32(nle, NFTNL_EXPR_BITWISE_LEN, nld.len);
-       nftnl_expr_set(nle, NFTNL_EXPR_BITWISE_MASK, nld.value, nld.len);
-       nftnl_expr_set(nle, NFTNL_EXPR_BITWISE_XOR, zero.value, zero.len);
+       nftnl_expr_set_imm(nle, NFTNL_EXPR_BITWISE_MASK,
+                          nld.value, nld.len, nld.byteorder);
+       nftnl_expr_set_imm(nle, NFTNL_EXPR_BITWISE_XOR,
+                          zero.value, zero.len, zero.byteorder);
        nft_rule_add_expr(ctx, nle, &expr->location);
 
        return expr->right->prefix;
@@ -551,15 +553,18 @@ static void netlink_gen_flagcmp(struct netlink_linearize_ctx *ctx,
                nle = alloc_nft_expr("cmp");
                netlink_put_register(nle, NFTNL_EXPR_CMP_SREG, sreg);
                nftnl_expr_set_u32(nle, NFTNL_EXPR_CMP_OP, NFT_CMP_EQ);
-               nftnl_expr_set(nle, NFTNL_EXPR_CMP_DATA, nld2.value, nld2.len);
+               nftnl_expr_set_imm(nle, NFTNL_EXPR_CMP_DATA,
+                                  nld2.value, nld2.len, nld2.byteorder);
                nft_rule_add_expr(ctx, nle, &expr->location);
        } else {
                nle = alloc_nft_expr("bitwise");
                netlink_put_register(nle, NFTNL_EXPR_BITWISE_SREG, sreg);
                netlink_put_register(nle, NFTNL_EXPR_BITWISE_DREG, sreg);
                nftnl_expr_set_u32(nle, NFTNL_EXPR_BITWISE_LEN, len);
-               nftnl_expr_set(nle, NFTNL_EXPR_BITWISE_MASK, nld2.value, nld2.len);
-               nftnl_expr_set(nle, NFTNL_EXPR_BITWISE_XOR, nld.value, nld.len);
+               nftnl_expr_set_imm(nle, NFTNL_EXPR_BITWISE_MASK,
+                                  nld2.value, nld2.len, nld2.byteorder);
+               nftnl_expr_set_imm(nle, NFTNL_EXPR_BITWISE_XOR,
+                                  nld.value, nld.len, nld.byteorder);
                nft_rule_add_expr(ctx, nle, &expr->location);
 
                nle = alloc_nft_expr("cmp");
@@ -569,7 +574,8 @@ static void netlink_gen_flagcmp(struct netlink_linearize_ctx *ctx,
                else
                        nftnl_expr_set_u32(nle, NFTNL_EXPR_CMP_OP, NFT_CMP_NEQ);
 
-               nftnl_expr_set(nle, NFTNL_EXPR_CMP_DATA, nld.value, nld.len);
+               nftnl_expr_set_imm(nle, NFTNL_EXPR_CMP_DATA,
+                                  nld.value, nld.len, nld.byteorder);
                nft_rule_add_expr(ctx, nle, &expr->location);
        }
 
@@ -645,7 +651,8 @@ static void netlink_gen_relational(struct netlink_linearize_ctx *ctx,
        nftnl_expr_set_u32(nle, NFTNL_EXPR_CMP_OP,
                           netlink_gen_cmp_op(expr->op));
        netlink_gen_data(right, &nld);
-       nftnl_expr_set(nle, NFTNL_EXPR_CMP_DATA, nld.value, len);
+       nftnl_expr_set_imm(nle, NFTNL_EXPR_CMP_DATA,
+                          nld.value, len, nld.byteorder);
        release_register(ctx, expr->left);
 
        nft_rule_add_expr(ctx, nle, &expr->location);
@@ -681,8 +688,8 @@ static void netlink_gen_bitwise_shift(struct netlink_linearize_ctx *ctx,
        netlink_gen_raw_data(expr->right->value, expr->right->byteorder,
                             sizeof(uint32_t), &nld);
 
-       nftnl_expr_set(nle, NFTNL_EXPR_BITWISE_DATA, nld.value,
-                      nld.len);
+       nftnl_expr_set_imm(nle, NFTNL_EXPR_BITWISE_DATA,
+                          nld.value, nld.len, nld.byteorder);
 
        nft_rule_add_expr(ctx, nle, &expr->location);
 }
@@ -747,9 +754,11 @@ static void netlink_gen_bitwise_mask_xor(struct netlink_linearize_ctx *ctx,
        nftnl_expr_set_u32(nle, NFTNL_EXPR_BITWISE_LEN, len);
 
        netlink_gen_raw_data(mask, expr->byteorder, len, &nld);
-       nftnl_expr_set(nle, NFTNL_EXPR_BITWISE_MASK, nld.value, nld.len);
+       nftnl_expr_set_imm(nle, NFTNL_EXPR_BITWISE_MASK,
+                          nld.value, nld.len, nld.byteorder);
        netlink_gen_raw_data(xor, expr->byteorder, len, &nld);
-       nftnl_expr_set(nle, NFTNL_EXPR_BITWISE_XOR, nld.value, nld.len);
+       nftnl_expr_set_imm(nle, NFTNL_EXPR_BITWISE_XOR,
+                          nld.value, nld.len, nld.byteorder);
 
        mpz_clear(tmp);
        mpz_clear(val);
@@ -871,7 +880,8 @@ static void netlink_gen_immediate(struct netlink_linearize_ctx *ctx,
        netlink_gen_data(expr, &nld);
        switch (expr->etype) {
        case EXPR_VALUE:
-               nftnl_expr_set(nle, NFTNL_EXPR_IMM_DATA, nld.value, nld.len);
+               nftnl_expr_set_imm(nle, NFTNL_EXPR_IMM_DATA,
+                                  nld.value, nld.len, nld.byteorder);
                break;
        case EXPR_VERDICT:
                if (expr->chain) {