netfilter: nf_tables: add support for inverted logic in nft_lookup
Introduce a new configuration option for this expression, which allows users to invert the logic of set lookups. In _init() we will now return EINVAL if NFT_LOOKUP_F_INV is in anyway related to a map lookup. The code in the _eval() function has been untangled and updated to sopport the XOR of options, as we should consider 4 cases: * lookup false, invert false -> NFT_BREAK * lookup false, invert true -> return w/o NFT_BREAK * lookup true, invert false -> return w/o NFT_BREAK * lookup true, invert true -> NFT_BREAK Signed-off-by: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:

committed by
Pablo Neira Ayuso

parent
82bec71d46
commit
0071e184a5
@@ -546,6 +546,10 @@ enum nft_cmp_attributes {
|
||||
};
|
||||
#define NFTA_CMP_MAX (__NFTA_CMP_MAX - 1)
|
||||
|
||||
enum nft_lookup_flags {
|
||||
NFT_LOOKUP_F_INV = (1 << 0),
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nft_lookup_attributes - nf_tables set lookup expression netlink attributes
|
||||
*
|
||||
@@ -553,6 +557,7 @@ enum nft_cmp_attributes {
|
||||
* @NFTA_LOOKUP_SREG: source register of the data to look for (NLA_U32: nft_registers)
|
||||
* @NFTA_LOOKUP_DREG: destination register (NLA_U32: nft_registers)
|
||||
* @NFTA_LOOKUP_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
|
||||
* @NFTA_LOOKUP_FLAGS: flags (NLA_U32: enum nft_lookup_flags)
|
||||
*/
|
||||
enum nft_lookup_attributes {
|
||||
NFTA_LOOKUP_UNSPEC,
|
||||
@@ -560,6 +565,7 @@ enum nft_lookup_attributes {
|
||||
NFTA_LOOKUP_SREG,
|
||||
NFTA_LOOKUP_DREG,
|
||||
NFTA_LOOKUP_SET_ID,
|
||||
NFTA_LOOKUP_FLAGS,
|
||||
__NFTA_LOOKUP_MAX
|
||||
};
|
||||
#define NFTA_LOOKUP_MAX (__NFTA_LOOKUP_MAX - 1)
|
||||
|
Reference in New Issue
Block a user