summaryrefslogtreecommitdiffstats
path: root/src/evaluate.c
diff options
context:
space:
mode:
authorJeremy Sowden <jeremy@azazel.net>2020-03-03 09:48:30 +0000
committerFlorian Westphal <fw@strlen.de>2020-03-04 23:36:41 +0100
commit904bad2bcfa72cb197e9fe18db3c4681086000ea (patch)
treea14437eee9b287f74d6ab14036235e41756aed25 /src/evaluate.c
parent4ac2cd199fbae8f52d43db7c817527ba1c5dedaa (diff)
evaluate: convert the byte-order of payload statement arguments.
Since shift operations require host byte-order, we need to be able to convert the result of the shift back to network byte-order, in a rule like: nft add rule ip t c tcp dport set tcp dport lshift 1 Signed-off-by: Jeremy Sowden <jeremy@azazel.net> Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src/evaluate.c')
-rw-r--r--src/evaluate.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/evaluate.c b/src/evaluate.c
index a169e41b..9b1a04f2 100644
--- a/src/evaluate.c
+++ b/src/evaluate.c
@@ -2225,6 +2225,11 @@ static int stmt_evaluate_payload(struct eval_ctx *ctx, struct stmt *stmt)
payload->byteorder, &stmt->payload.val) < 0)
return -1;
+ if (!expr_is_constant(stmt->payload.val) &&
+ byteorder_conversion(ctx, &stmt->payload.val,
+ payload->byteorder) < 0)
+ return -1;
+
need_csum = stmt_evaluate_payload_need_csum(payload);
if (!payload_needs_adjustment(payload)) {