OSDN Git Service

netfilter: bitwise: add helper for evaluating boolean operations.
authorJeremy Sowden <jeremy@azazel.net>
Wed, 15 Jan 2020 20:05:53 +0000 (20:05 +0000)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 16 Jan 2020 14:51:59 +0000 (15:51 +0100)
Split the code specific to evaluating bitwise boolean operations out
into a separate function.  Similar functions will be added later for
shift operations.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nft_bitwise.c

index d0cc5f7..88a91c6 100644 (file)
@@ -24,16 +24,27 @@ struct nft_bitwise {
        struct nft_data         xor;
 };
 
+static void nft_bitwise_eval_bool(u32 *dst, const u32 *src,
+                                 const struct nft_bitwise *priv)
+{
+       unsigned int i;
+
+       for (i = 0; i < DIV_ROUND_UP(priv->len, 4); i++)
+               dst[i] = (src[i] & priv->mask.data[i]) ^ priv->xor.data[i];
+}
+
 void nft_bitwise_eval(const struct nft_expr *expr,
                      struct nft_regs *regs, const struct nft_pktinfo *pkt)
 {
        const struct nft_bitwise *priv = nft_expr_priv(expr);
        const u32 *src = &regs->data[priv->sreg];
        u32 *dst = &regs->data[priv->dreg];
-       unsigned int i;
 
-       for (i = 0; i < DIV_ROUND_UP(priv->len, 4); i++)
-               dst[i] = (src[i] & priv->mask.data[i]) ^ priv->xor.data[i];
+       switch (priv->op) {
+       case NFT_BITWISE_BOOL:
+               nft_bitwise_eval_bool(dst, src, priv);
+               break;
+       }
 }
 
 static const struct nla_policy nft_bitwise_policy[NFTA_BITWISE_MAX + 1] = {