From 8fa63d78432f231c09aceaf632b8757b1c02b84d Mon Sep 17 00:00:00 2001 From: Jeremy Sowden Date: Fri, 17 Jan 2020 20:58:08 +0000 Subject: bitwise: add support for left- and right-shifts. The kernel supports bitwise shifts. Add support to libnftnl. Signed-off-by: Jeremy Sowden Signed-off-by: Pablo Neira Ayuso --- src/expr/bitwise.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src') diff --git a/src/expr/bitwise.c b/src/expr/bitwise.c index 6ea39fb..9ea2f66 100644 --- a/src/expr/bitwise.c +++ b/src/expr/bitwise.c @@ -233,6 +233,25 @@ nftnl_expr_bitwise_snprintf_bool(char *buf, size_t size, return offset; } +static int +nftnl_expr_bitwise_snprintf_shift(char *buf, size_t size, const char *op, + const struct nftnl_expr_bitwise *bitwise) +{ int remain = size, offset = 0, ret; + + ret = snprintf(buf, remain, "reg %u = ( reg %u %s ", + bitwise->dreg, bitwise->sreg, op); + SNPRINTF_BUFFER_SIZE(ret, remain, offset); + + ret = nftnl_data_reg_snprintf(buf + offset, remain, &bitwise->data, + NFTNL_OUTPUT_DEFAULT, 0, DATA_VALUE); + SNPRINTF_BUFFER_SIZE(ret, remain, offset); + + ret = snprintf(buf + offset, remain, ") "); + SNPRINTF_BUFFER_SIZE(ret, remain, offset); + + return offset; +} + static int nftnl_expr_bitwise_snprintf_default(char *buf, size_t size, const struct nftnl_expr *e) { @@ -244,7 +263,10 @@ static int nftnl_expr_bitwise_snprintf_default(char *buf, size_t size, err = nftnl_expr_bitwise_snprintf_bool(buf, size, bitwise); break; case NFT_BITWISE_LSHIFT: + err = nftnl_expr_bitwise_snprintf_shift(buf, size, "<<", bitwise); + break; case NFT_BITWISE_RSHIFT: + err = nftnl_expr_bitwise_snprintf_shift(buf, size, ">>", bitwise); break; } -- cgit v1.2.3