netfilter: bitwise: add helper for evaluating boolean operations.
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>
This commit is contained in:
parent
3f8d9eb032
commit
71d6ded3ac
|
@ -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 = ®s->data[priv->sreg];
|
||||
u32 *dst = ®s->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] = {
|
||||
|
|
Loading…
Reference in New Issue