]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
set_elem: convert flag value to inclusive-OR binops during delinearize
authorPatrick McHardy <kaber@trash.net>
Mon, 23 Mar 2015 23:36:35 +0000 (23:36 +0000)
committerPatrick McHardy <kaber@trash.net>
Mon, 23 Mar 2015 23:36:35 +0000 (23:36 +0000)
When a set contains combined flag values, they are displayed as numeric
value since they don't match any of the single flag values:

tcp flags { 18, psh, syn}

Convert to a series of inclusive-OR binops of the single flag values
for improved readability:

tcp flags { syn | ack, psh, syn}

Signed-off-by: Patrick McHardy <kaber@trash.net>
src/netlink.c

index bd6aa939e4d1863e72a9294d3a02c13e3943b770..24dda67c42bfcc4a4d720d515bf2b8cdf32ca0fc 100644 (file)
@@ -1383,6 +1383,10 @@ static int netlink_delinearize_setelem(struct nft_set_elem *nlse,
            expr->byteorder == BYTEORDER_HOST_ENDIAN)
                mpz_switch_byteorder(expr->value, expr->len / BITS_PER_BYTE);
 
+       if (expr->dtype->basetype != NULL &&
+           expr->dtype->basetype->type == TYPE_BITMASK)
+               expr = bitmask_expr_to_binops(expr);
+
        if (flags & NFT_SET_ELEM_INTERVAL_END) {
                expr->flags |= EXPR_F_INTERVAL_END;
        } else {