netfilter: nf_tables: add set element timeout support
Add API support for set element timeouts. Elements can have a individual timeout value specified, overriding the sets' default. Two new extension types are used for timeouts - the timeout value and the expiration time. The timeout value only exists if it differs from the default value. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
committed by
Pablo Neira Ayuso
parent
761da2935d
commit
c3e1b005ed
@@ -329,12 +329,16 @@ void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set,
|
||||
* @NFT_SET_EXT_KEY: element key
|
||||
* @NFT_SET_EXT_DATA: mapping data
|
||||
* @NFT_SET_EXT_FLAGS: element flags
|
||||
* @NFT_SET_EXT_TIMEOUT: element timeout
|
||||
* @NFT_SET_EXT_EXPIRATION: element expiration time
|
||||
* @NFT_SET_EXT_NUM: number of extension types
|
||||
*/
|
||||
enum nft_set_extensions {
|
||||
NFT_SET_EXT_KEY,
|
||||
NFT_SET_EXT_DATA,
|
||||
NFT_SET_EXT_FLAGS,
|
||||
NFT_SET_EXT_TIMEOUT,
|
||||
NFT_SET_EXT_EXPIRATION,
|
||||
NFT_SET_EXT_NUM
|
||||
};
|
||||
|
||||
@@ -431,6 +435,22 @@ static inline u8 *nft_set_ext_flags(const struct nft_set_ext *ext)
|
||||
return nft_set_ext(ext, NFT_SET_EXT_FLAGS);
|
||||
}
|
||||
|
||||
static inline u64 *nft_set_ext_timeout(const struct nft_set_ext *ext)
|
||||
{
|
||||
return nft_set_ext(ext, NFT_SET_EXT_TIMEOUT);
|
||||
}
|
||||
|
||||
static inline unsigned long *nft_set_ext_expiration(const struct nft_set_ext *ext)
|
||||
{
|
||||
return nft_set_ext(ext, NFT_SET_EXT_EXPIRATION);
|
||||
}
|
||||
|
||||
static inline bool nft_set_elem_expired(const struct nft_set_ext *ext)
|
||||
{
|
||||
return nft_set_ext_exists(ext, NFT_SET_EXT_EXPIRATION) &&
|
||||
time_is_before_eq_jiffies(*nft_set_ext_expiration(ext));
|
||||
}
|
||||
|
||||
static inline struct nft_set_ext *nft_set_elem_ext(const struct nft_set *set,
|
||||
void *elem)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user