aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2015-03-26 08:39:37 -0400
committerPablo Neira Ayuso <pablo@netfilter.org>2015-04-01 05:17:28 -0400
commitc3e1b005ed1cc068fc9d454a6e745830d55d251d (patch)
tree8d0a0ecff6682b87f1c0811f52c8ad933ab64d2d /include
parent761da2935d6e18d178582dbdf315a3a458555505 (diff)
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>
Diffstat (limited to 'include')
-rw-r--r--include/net/netfilter/nf_tables.h20
-rw-r--r--include/uapi/linux/netfilter/nf_tables.h4
2 files changed, 24 insertions, 0 deletions
diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h
index 8936803a2ad5..f2726c537248 100644
--- a/include/net/netfilter/nf_tables.h
+++ b/include/net/netfilter/nf_tables.h
@@ -329,12 +329,16 @@ void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set,
329 * @NFT_SET_EXT_KEY: element key 329 * @NFT_SET_EXT_KEY: element key
330 * @NFT_SET_EXT_DATA: mapping data 330 * @NFT_SET_EXT_DATA: mapping data
331 * @NFT_SET_EXT_FLAGS: element flags 331 * @NFT_SET_EXT_FLAGS: element flags
332 * @NFT_SET_EXT_TIMEOUT: element timeout
333 * @NFT_SET_EXT_EXPIRATION: element expiration time
332 * @NFT_SET_EXT_NUM: number of extension types 334 * @NFT_SET_EXT_NUM: number of extension types
333 */ 335 */
334enum nft_set_extensions { 336enum nft_set_extensions {
335 NFT_SET_EXT_KEY, 337 NFT_SET_EXT_KEY,
336 NFT_SET_EXT_DATA, 338 NFT_SET_EXT_DATA,
337 NFT_SET_EXT_FLAGS, 339 NFT_SET_EXT_FLAGS,
340 NFT_SET_EXT_TIMEOUT,
341 NFT_SET_EXT_EXPIRATION,
338 NFT_SET_EXT_NUM 342 NFT_SET_EXT_NUM
339}; 343};
340 344
@@ -431,6 +435,22 @@ static inline u8 *nft_set_ext_flags(const struct nft_set_ext *ext)
431 return nft_set_ext(ext, NFT_SET_EXT_FLAGS); 435 return nft_set_ext(ext, NFT_SET_EXT_FLAGS);
432} 436}
433 437
438static inline u64 *nft_set_ext_timeout(const struct nft_set_ext *ext)
439{
440 return nft_set_ext(ext, NFT_SET_EXT_TIMEOUT);
441}
442
443static inline unsigned long *nft_set_ext_expiration(const struct nft_set_ext *ext)
444{
445 return nft_set_ext(ext, NFT_SET_EXT_EXPIRATION);
446}
447
448static inline bool nft_set_elem_expired(const struct nft_set_ext *ext)
449{
450 return nft_set_ext_exists(ext, NFT_SET_EXT_EXPIRATION) &&
451 time_is_before_eq_jiffies(*nft_set_ext_expiration(ext));
452}
453
434static inline struct nft_set_ext *nft_set_elem_ext(const struct nft_set *set, 454static inline struct nft_set_ext *nft_set_elem_ext(const struct nft_set *set,
435 void *elem) 455 void *elem)
436{ 456{
diff --git a/include/uapi/linux/netfilter/nf_tables.h b/include/uapi/linux/netfilter/nf_tables.h
index 971d245e7378..83441cc4594b 100644
--- a/include/uapi/linux/netfilter/nf_tables.h
+++ b/include/uapi/linux/netfilter/nf_tables.h
@@ -290,12 +290,16 @@ enum nft_set_elem_flags {
290 * @NFTA_SET_ELEM_KEY: key value (NLA_NESTED: nft_data) 290 * @NFTA_SET_ELEM_KEY: key value (NLA_NESTED: nft_data)
291 * @NFTA_SET_ELEM_DATA: data value of mapping (NLA_NESTED: nft_data_attributes) 291 * @NFTA_SET_ELEM_DATA: data value of mapping (NLA_NESTED: nft_data_attributes)
292 * @NFTA_SET_ELEM_FLAGS: bitmask of nft_set_elem_flags (NLA_U32) 292 * @NFTA_SET_ELEM_FLAGS: bitmask of nft_set_elem_flags (NLA_U32)
293 * @NFTA_SET_ELEM_TIMEOUT: timeout value (NLA_U64)
294 * @NFTA_SET_ELEM_EXPIRATION: expiration time (NLA_U64)
293 */ 295 */
294enum nft_set_elem_attributes { 296enum nft_set_elem_attributes {
295 NFTA_SET_ELEM_UNSPEC, 297 NFTA_SET_ELEM_UNSPEC,
296 NFTA_SET_ELEM_KEY, 298 NFTA_SET_ELEM_KEY,
297 NFTA_SET_ELEM_DATA, 299 NFTA_SET_ELEM_DATA,
298 NFTA_SET_ELEM_FLAGS, 300 NFTA_SET_ELEM_FLAGS,
301 NFTA_SET_ELEM_TIMEOUT,
302 NFTA_SET_ELEM_EXPIRATION,
299 __NFTA_SET_ELEM_MAX 303 __NFTA_SET_ELEM_MAX
300}; 304};
301#define NFTA_SET_ELEM_MAX (__NFTA_SET_ELEM_MAX - 1) 305#define NFTA_SET_ELEM_MAX (__NFTA_SET_ELEM_MAX - 1)