aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2015-04-05 08:43:38 -0400
committerPablo Neira Ayuso <pablo@netfilter.org>2015-04-08 10:58:27 -0400
commit68e942e88add0ac8576fc8397e86495edf3dcea7 (patch)
treea068c331abf3b14574ecc9bab024a879bcb21bcb /include
parent22fe54d5fefcfa98c58cc2f4607dd26d9648b3f5 (diff)
netfilter: nf_tables: support optional userdata for set elements
Add an userdata set extension and allow the user to attach arbitrary data to set elements. This is intended to hold TLV encoded data like comments or DNS annotations that have no meaning to the kernel. 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.h7
-rw-r--r--include/uapi/linux/netfilter/nf_tables.h2
2 files changed, 9 insertions, 0 deletions
diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h
index 38c3496f7bf2..63c44bdfdd3b 100644
--- a/include/net/netfilter/nf_tables.h
+++ b/include/net/netfilter/nf_tables.h
@@ -350,6 +350,7 @@ void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set,
350 * @NFT_SET_EXT_FLAGS: element flags 350 * @NFT_SET_EXT_FLAGS: element flags
351 * @NFT_SET_EXT_TIMEOUT: element timeout 351 * @NFT_SET_EXT_TIMEOUT: element timeout
352 * @NFT_SET_EXT_EXPIRATION: element expiration time 352 * @NFT_SET_EXT_EXPIRATION: element expiration time
353 * @NFT_SET_EXT_USERDATA: user data associated with the element
353 * @NFT_SET_EXT_NUM: number of extension types 354 * @NFT_SET_EXT_NUM: number of extension types
354 */ 355 */
355enum nft_set_extensions { 356enum nft_set_extensions {
@@ -358,6 +359,7 @@ enum nft_set_extensions {
358 NFT_SET_EXT_FLAGS, 359 NFT_SET_EXT_FLAGS,
359 NFT_SET_EXT_TIMEOUT, 360 NFT_SET_EXT_TIMEOUT,
360 NFT_SET_EXT_EXPIRATION, 361 NFT_SET_EXT_EXPIRATION,
362 NFT_SET_EXT_USERDATA,
361 NFT_SET_EXT_NUM 363 NFT_SET_EXT_NUM
362}; 364};
363 365
@@ -464,6 +466,11 @@ static inline unsigned long *nft_set_ext_expiration(const struct nft_set_ext *ex
464 return nft_set_ext(ext, NFT_SET_EXT_EXPIRATION); 466 return nft_set_ext(ext, NFT_SET_EXT_EXPIRATION);
465} 467}
466 468
469static inline struct nft_userdata *nft_set_ext_userdata(const struct nft_set_ext *ext)
470{
471 return nft_set_ext(ext, NFT_SET_EXT_USERDATA);
472}
473
467static inline bool nft_set_elem_expired(const struct nft_set_ext *ext) 474static inline bool nft_set_elem_expired(const struct nft_set_ext *ext)
468{ 475{
469 return nft_set_ext_exists(ext, NFT_SET_EXT_EXPIRATION) && 476 return nft_set_ext_exists(ext, NFT_SET_EXT_EXPIRATION) &&
diff --git a/include/uapi/linux/netfilter/nf_tables.h b/include/uapi/linux/netfilter/nf_tables.h
index 0b87b2f67fe3..05ee1e0804a3 100644
--- a/include/uapi/linux/netfilter/nf_tables.h
+++ b/include/uapi/linux/netfilter/nf_tables.h
@@ -292,6 +292,7 @@ enum nft_set_elem_flags {
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) 293 * @NFTA_SET_ELEM_TIMEOUT: timeout value (NLA_U64)
294 * @NFTA_SET_ELEM_EXPIRATION: expiration time (NLA_U64) 294 * @NFTA_SET_ELEM_EXPIRATION: expiration time (NLA_U64)
295 * @NFTA_SET_ELEM_USERDATA: user data (NLA_BINARY)
295 */ 296 */
296enum nft_set_elem_attributes { 297enum nft_set_elem_attributes {
297 NFTA_SET_ELEM_UNSPEC, 298 NFTA_SET_ELEM_UNSPEC,
@@ -300,6 +301,7 @@ enum nft_set_elem_attributes {
300 NFTA_SET_ELEM_FLAGS, 301 NFTA_SET_ELEM_FLAGS,
301 NFTA_SET_ELEM_TIMEOUT, 302 NFTA_SET_ELEM_TIMEOUT,
302 NFTA_SET_ELEM_EXPIRATION, 303 NFTA_SET_ELEM_EXPIRATION,
304 NFTA_SET_ELEM_USERDATA,
303 __NFTA_SET_ELEM_MAX 305 __NFTA_SET_ELEM_MAX
304}; 306};
305#define NFTA_SET_ELEM_MAX (__NFTA_SET_ELEM_MAX - 1) 307#define NFTA_SET_ELEM_MAX (__NFTA_SET_ELEM_MAX - 1)