summaryrefslogtreecommitdiffstats
path: root/src/netlink_linearize.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/netlink_linearize.c')
-rw-r--r--src/netlink_linearize.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c
index 17375a5b..c46b6d47 100644
--- a/src/netlink_linearize.c
+++ b/src/netlink_linearize.c
@@ -687,21 +687,27 @@ static void netlink_gen_queue_stmt(struct netlink_linearize_ctx *ctx,
{
struct nft_rule_expr *nle;
uint16_t total_queues;
+ mpz_t low, high;
- nle = alloc_nft_expr("queue");
-
- nft_rule_expr_set_u16(nle, NFT_EXPR_QUEUE_NUM,
- stmt->queue.from);
-
- total_queues = stmt->queue.to - stmt->queue.from;
- nft_rule_expr_set_u16(nle, NFT_EXPR_QUEUE_TOTAL,
- total_queues + 1);
+ mpz_init2(low, 16);
+ mpz_init2(high, 16);
+ if (stmt->queue.queue != NULL) {
+ range_expr_value_low(low, stmt->queue.queue);
+ range_expr_value_high(high, stmt->queue.queue);
+ }
+ total_queues = mpz_get_uint16(high) - mpz_get_uint16(low) + 1;
+ nle = alloc_nft_expr("queue");
+ nft_rule_expr_set_u16(nle, NFT_EXPR_QUEUE_NUM, mpz_get_uint16(low));
+ nft_rule_expr_set_u16(nle, NFT_EXPR_QUEUE_TOTAL, total_queues);
if (stmt->queue.flags) {
nft_rule_expr_set_u16(nle, NFT_EXPR_QUEUE_FLAGS,
stmt->queue.flags);
}
nft_rule_add_expr(ctx->nlr, nle);
+
+ mpz_clear(low);
+ mpz_clear(high);
}
static void netlink_gen_ct_stmt(struct netlink_linearize_ctx *ctx,