Pass the previously collected byteorder (and sizes) to libnftnl for improved netlink debug output. Signed-off-by: Phil Sutter --- src/netlink.c | 18 ++++++++++++------ src/netlink_linearize.c | 34 ++++++++++++++++++++++------------ 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/netlink.c b/src/netlink.c index 9d6cc31e40fb5..68228bdc5c99a 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -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\n"); diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c index 43cfbfa75f3d2..36a539bf96283 100644 --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c @@ -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) { -- 2.51.0