summaryrefslogtreecommitdiffstats
path: root/include/libnftnl
diff options
context:
space:
mode:
Diffstat (limited to 'include/libnftnl')
-rw-r--r--include/libnftnl/chain.h9
-rw-r--r--include/libnftnl/expr.h65
-rw-r--r--include/libnftnl/flowtable.h4
-rw-r--r--include/libnftnl/object.h40
-rw-r--r--include/libnftnl/rule.h1
-rw-r--r--include/libnftnl/set.h21
-rw-r--r--include/libnftnl/table.h2
-rw-r--r--include/libnftnl/udata.h35
8 files changed, 155 insertions, 22 deletions
diff --git a/include/libnftnl/chain.h b/include/libnftnl/chain.h
index 33d04e1..bac1f5f 100644
--- a/include/libnftnl/chain.h
+++ b/include/libnftnl/chain.h
@@ -32,6 +32,9 @@ enum nftnl_chain_attr {
NFTNL_CHAIN_TYPE,
NFTNL_CHAIN_DEV,
NFTNL_CHAIN_DEVICES,
+ NFTNL_CHAIN_FLAGS,
+ NFTNL_CHAIN_ID,
+ NFTNL_CHAIN_USERDATA,
__NFTNL_CHAIN_MAX
};
#define NFTNL_CHAIN_MAX (__NFTNL_CHAIN_MAX - 1)
@@ -46,6 +49,7 @@ void nftnl_chain_set_u32(struct nftnl_chain *t, uint16_t attr, uint32_t data);
void nftnl_chain_set_s32(struct nftnl_chain *t, uint16_t attr, int32_t data);
void nftnl_chain_set_u64(struct nftnl_chain *t, uint16_t attr, uint64_t data);
int nftnl_chain_set_str(struct nftnl_chain *t, uint16_t attr, const char *str);
+int nftnl_chain_set_array(struct nftnl_chain *t, uint16_t attr, const char **data);
const void *nftnl_chain_get(const struct nftnl_chain *c, uint16_t attr);
const void *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr,
@@ -55,6 +59,7 @@ uint8_t nftnl_chain_get_u8(const struct nftnl_chain *c, uint16_t attr);
uint32_t nftnl_chain_get_u32(const struct nftnl_chain *c, uint16_t attr);
int32_t nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr);
uint64_t nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr);
+const char *const *nftnl_chain_get_array(const struct nftnl_chain *c, uint16_t attr);
void nftnl_chain_rule_add(struct nftnl_rule *rule, struct nftnl_chain *c);
void nftnl_chain_rule_del(struct nftnl_rule *rule);
@@ -66,10 +71,6 @@ struct nlmsghdr;
void nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_chain *t);
-int nftnl_chain_parse(struct nftnl_chain *c, enum nftnl_parse_type type,
- const char *data, struct nftnl_parse_err *err);
-int nftnl_chain_parse_file(struct nftnl_chain *c, enum nftnl_parse_type type,
- FILE *fp, struct nftnl_parse_err *err);
int nftnl_chain_snprintf(char *buf, size_t size, const struct nftnl_chain *t, uint32_t type, uint32_t flags);
int nftnl_chain_fprintf(FILE *fp, const struct nftnl_chain *c, uint32_t type, uint32_t flags);
diff --git a/include/libnftnl/expr.h b/include/libnftnl/expr.h
index 3e0f5b0..fba1210 100644
--- a/include/libnftnl/expr.h
+++ b/include/libnftnl/expr.h
@@ -36,6 +36,14 @@ uint32_t nftnl_expr_get_u32(const struct nftnl_expr *expr, uint16_t type);
uint64_t nftnl_expr_get_u64(const struct nftnl_expr *expr, uint16_t type);
const char *nftnl_expr_get_str(const struct nftnl_expr *expr, uint16_t type);
+void nftnl_expr_build_payload(struct nlmsghdr *nlh, struct nftnl_expr *expr);
+
+/* For dynset expressions. */
+void nftnl_expr_add_expr(struct nftnl_expr *expr, uint32_t type, struct nftnl_expr *e);
+int nftnl_expr_expr_foreach(const struct nftnl_expr *e,
+ int (*cb)(struct nftnl_expr *e, void *data),
+ void *data);
+
int nftnl_expr_snprintf(char *buf, size_t buflen, const struct nftnl_expr *expr, uint32_t type, uint32_t flags);
int nftnl_expr_fprintf(FILE *fp, const struct nftnl_expr *expr, uint32_t type, uint32_t flags);
@@ -48,6 +56,7 @@ enum {
NFTNL_EXPR_PAYLOAD_CSUM_TYPE,
NFTNL_EXPR_PAYLOAD_CSUM_OFFSET,
NFTNL_EXPR_PAYLOAD_FLAGS,
+ __NFTNL_EXPR_PAYLOAD_MAX
};
enum {
@@ -57,33 +66,40 @@ enum {
NFTNL_EXPR_NG_OFFSET,
NFTNL_EXPR_NG_SET_NAME, /* deprecated */
NFTNL_EXPR_NG_SET_ID, /* deprecated */
+ __NFTNL_EXPR_NG_MAX
};
enum {
NFTNL_EXPR_META_KEY = NFTNL_EXPR_BASE,
NFTNL_EXPR_META_DREG,
NFTNL_EXPR_META_SREG,
+ __NFTNL_EXPR_META_MAX
};
enum {
NFTNL_EXPR_RT_KEY = NFTNL_EXPR_BASE,
NFTNL_EXPR_RT_DREG,
+ __NFTNL_EXPR_RT_MAX
};
enum {
NFTNL_EXPR_SOCKET_KEY = NFTNL_EXPR_BASE,
NFTNL_EXPR_SOCKET_DREG,
+ NFTNL_EXPR_SOCKET_LEVEL,
+ __NFTNL_EXPR_SOCKET_MAX
};
enum {
NFTNL_EXPR_TUNNEL_KEY = NFTNL_EXPR_BASE,
NFTNL_EXPR_TUNNEL_DREG,
+ __NFTNL_EXPR_TUNNEL_MAX
};
enum {
NFTNL_EXPR_CMP_SREG = NFTNL_EXPR_BASE,
NFTNL_EXPR_CMP_OP,
NFTNL_EXPR_CMP_DATA,
+ __NFTNL_EXPR_CMP_MAX
};
enum {
@@ -91,6 +107,7 @@ enum {
NFTNL_EXPR_RANGE_OP,
NFTNL_EXPR_RANGE_FROM_DATA,
NFTNL_EXPR_RANGE_TO_DATA,
+ __NFTNL_EXPR_RANGE_MAX
};
enum {
@@ -98,16 +115,20 @@ enum {
NFTNL_EXPR_IMM_DATA,
NFTNL_EXPR_IMM_VERDICT,
NFTNL_EXPR_IMM_CHAIN,
+ NFTNL_EXPR_IMM_CHAIN_ID,
+ __NFTNL_EXPR_IMM_MAX
};
enum {
NFTNL_EXPR_CTR_PACKETS = NFTNL_EXPR_BASE,
NFTNL_EXPR_CTR_BYTES,
+ __NFTNL_EXPR_CTR_MAX
};
enum {
NFTNL_EXPR_CONNLIMIT_COUNT = NFTNL_EXPR_BASE,
NFTNL_EXPR_CONNLIMIT_FLAGS,
+ __NFTNL_EXPR_CONNLIMIT_MAX
};
enum {
@@ -116,18 +137,23 @@ enum {
NFTNL_EXPR_BITWISE_LEN,
NFTNL_EXPR_BITWISE_MASK,
NFTNL_EXPR_BITWISE_XOR,
+ NFTNL_EXPR_BITWISE_OP,
+ NFTNL_EXPR_BITWISE_DATA,
+ __NFTNL_EXPR_BITWISE_MAX
};
enum {
NFTNL_EXPR_TG_NAME = NFTNL_EXPR_BASE,
NFTNL_EXPR_TG_REV,
NFTNL_EXPR_TG_INFO,
+ __NFTNL_EXPR_TG_MAX
};
enum {
NFTNL_EXPR_MT_NAME = NFTNL_EXPR_BASE,
NFTNL_EXPR_MT_REV,
NFTNL_EXPR_MT_INFO,
+ __NFTNL_EXPR_MT_MAX
};
enum {
@@ -138,12 +164,14 @@ enum {
NFTNL_EXPR_NAT_REG_PROTO_MIN,
NFTNL_EXPR_NAT_REG_PROTO_MAX,
NFTNL_EXPR_NAT_FLAGS,
+ __NFTNL_EXPR_NAT_MAX
};
enum {
NFTNL_EXPR_TPROXY_FAMILY = NFTNL_EXPR_BASE,
NFTNL_EXPR_TPROXY_REG_ADDR,
NFTNL_EXPR_TPROXY_REG_PORT,
+ __NFTNL_EXPR_TPROXY_MAX
};
enum {
@@ -152,6 +180,7 @@ enum {
NFTNL_EXPR_LOOKUP_SET,
NFTNL_EXPR_LOOKUP_SET_ID,
NFTNL_EXPR_LOOKUP_FLAGS,
+ __NFTNL_EXPR_LOOKUP_MAX
};
enum {
@@ -162,6 +191,9 @@ enum {
NFTNL_EXPR_DYNSET_SET_NAME,
NFTNL_EXPR_DYNSET_SET_ID,
NFTNL_EXPR_DYNSET_EXPR,
+ NFTNL_EXPR_DYNSET_EXPRESSIONS,
+ NFTNL_EXPR_DYNSET_FLAGS,
+ __NFTNL_EXPR_DYNSET_MAX
};
enum {
@@ -171,6 +203,7 @@ enum {
NFTNL_EXPR_LOG_QTHRESHOLD,
NFTNL_EXPR_LOG_LEVEL,
NFTNL_EXPR_LOG_FLAGS,
+ __NFTNL_EXPR_LOG_MAX
};
enum {
@@ -181,6 +214,7 @@ enum {
NFTNL_EXPR_EXTHDR_FLAGS,
NFTNL_EXPR_EXTHDR_OP,
NFTNL_EXPR_EXTHDR_SREG,
+ __NFTNL_EXPR_EXTHDR_MAX
};
enum {
@@ -188,6 +222,7 @@ enum {
NFTNL_EXPR_CT_KEY,
NFTNL_EXPR_CT_DIR,
NFTNL_EXPR_CT_SREG,
+ __NFTNL_EXPR_CT_MAX
};
enum {
@@ -196,6 +231,7 @@ enum {
NFTNL_EXPR_BYTEORDER_OP,
NFTNL_EXPR_BYTEORDER_LEN,
NFTNL_EXPR_BYTEORDER_SIZE,
+ __NFTNL_EXPR_BYTEORDER_MAX
};
enum {
@@ -204,11 +240,13 @@ enum {
NFTNL_EXPR_LIMIT_BURST,
NFTNL_EXPR_LIMIT_TYPE,
NFTNL_EXPR_LIMIT_FLAGS,
+ __NFTNL_EXPR_LIMIT_MAX
};
enum {
NFTNL_EXPR_REJECT_TYPE = NFTNL_EXPR_BASE,
NFTNL_EXPR_REJECT_CODE,
+ __NFTNL_EXPR_REJECT_MAX
};
enum {
@@ -216,39 +254,46 @@ enum {
NFTNL_EXPR_QUEUE_TOTAL,
NFTNL_EXPR_QUEUE_FLAGS,
NFTNL_EXPR_QUEUE_SREG_QNUM,
+ __NFTNL_EXPR_QUEUE_MAX
};
enum {
NFTNL_EXPR_QUOTA_BYTES = NFTNL_EXPR_BASE,
NFTNL_EXPR_QUOTA_FLAGS,
NFTNL_EXPR_QUOTA_CONSUMED,
+ __NFTNL_EXPR_QUOTA_MAX
};
enum {
NFTNL_EXPR_MASQ_FLAGS = NFTNL_EXPR_BASE,
NFTNL_EXPR_MASQ_REG_PROTO_MIN,
NFTNL_EXPR_MASQ_REG_PROTO_MAX,
+ __NFTNL_EXPR_MASQ_MAX
};
enum {
NFTNL_EXPR_REDIR_REG_PROTO_MIN = NFTNL_EXPR_BASE,
NFTNL_EXPR_REDIR_REG_PROTO_MAX,
NFTNL_EXPR_REDIR_FLAGS,
+ __NFTNL_EXPR_REDIR_MAX
};
enum {
NFTNL_EXPR_DUP_SREG_ADDR = NFTNL_EXPR_BASE,
NFTNL_EXPR_DUP_SREG_DEV,
+ __NFTNL_EXPR_DUP_MAX
};
enum {
NFTNL_EXPR_FLOW_TABLE_NAME = NFTNL_EXPR_BASE,
+ __NFTNL_EXPR_FLOW_MAX
};
enum {
NFTNL_EXPR_FWD_SREG_DEV = NFTNL_EXPR_BASE,
NFTNL_EXPR_FWD_SREG_ADDR,
NFTNL_EXPR_FWD_NFPROTO,
+ __NFTNL_EXPR_FWD_MAX
};
enum {
@@ -261,12 +306,14 @@ enum {
NFTNL_EXPR_HASH_TYPE,
NFTNL_EXPR_HASH_SET_NAME, /* deprecated */
NFTNL_EXPR_HASH_SET_ID, /* deprecated */
+ __NFTNL_EXPR_HASH_MAX
};
enum {
NFTNL_EXPR_FIB_DREG = NFTNL_EXPR_BASE,
NFTNL_EXPR_FIB_RESULT,
NFTNL_EXPR_FIB_FLAGS,
+ __NFTNL_EXPR_FIB_MAX
};
enum {
@@ -275,12 +322,14 @@ enum {
NFTNL_EXPR_OBJREF_SET_SREG,
NFTNL_EXPR_OBJREF_SET_NAME,
NFTNL_EXPR_OBJREF_SET_ID,
+ __NFTNL_EXPR_OBJREF_MAX
};
enum {
NFTNL_EXPR_OSF_DREG = NFTNL_EXPR_BASE,
NFTNL_EXPR_OSF_TTL,
NFTNL_EXPR_OSF_FLAGS,
+ __NFTNL_EXPR_OSF_MAX
};
enum {
@@ -289,12 +338,28 @@ enum {
NFTNL_EXPR_XFRM_KEY,
NFTNL_EXPR_XFRM_DIR,
NFTNL_EXPR_XFRM_SPNUM,
+ __NFTNL_EXPR_XFRM_MAX
};
enum {
NFTNL_EXPR_SYNPROXY_MSS = NFTNL_EXPR_BASE,
NFTNL_EXPR_SYNPROXY_WSCALE,
NFTNL_EXPR_SYNPROXY_FLAGS,
+ __NFTNL_EXPR_SYNPROXY_MAX
+};
+
+enum {
+ NFTNL_EXPR_LAST_MSECS = NFTNL_EXPR_BASE,
+ NFTNL_EXPR_LAST_SET,
+ __NFTNL_EXPR_LAST_MAX
+};
+
+enum {
+ NFTNL_EXPR_INNER_TYPE = NFTNL_EXPR_BASE,
+ NFTNL_EXPR_INNER_FLAGS,
+ NFTNL_EXPR_INNER_HDRSIZE,
+ NFTNL_EXPR_INNER_EXPR,
+ __NFTNL_EXPR_INNER_MAX
};
#ifdef __cplusplus
diff --git a/include/libnftnl/flowtable.h b/include/libnftnl/flowtable.h
index bdff114..168f833 100644
--- a/include/libnftnl/flowtable.h
+++ b/include/libnftnl/flowtable.h
@@ -41,7 +41,7 @@ void nftnl_flowtable_set_u32(struct nftnl_flowtable *t, uint16_t attr, uint32_t
void nftnl_flowtable_set_s32(struct nftnl_flowtable *t, uint16_t attr, int32_t data);
void nftnl_flowtable_set_u64(struct nftnl_flowtable *t, uint16_t attr, uint64_t data);
int nftnl_flowtable_set_str(struct nftnl_flowtable *t, uint16_t attr, const char *str);
-void nftnl_flowtable_set_array(struct nftnl_flowtable *t, uint16_t attr, const char **data);
+int nftnl_flowtable_set_array(struct nftnl_flowtable *t, uint16_t attr, const char **data);
const void *nftnl_flowtable_get(const struct nftnl_flowtable *c, uint16_t attr);
const void *nftnl_flowtable_get_data(const struct nftnl_flowtable *c, uint16_t attr,
@@ -50,7 +50,7 @@ const char *nftnl_flowtable_get_str(const struct nftnl_flowtable *c, uint16_t at
uint32_t nftnl_flowtable_get_u32(const struct nftnl_flowtable *c, uint16_t attr);
int32_t nftnl_flowtable_get_s32(const struct nftnl_flowtable *c, uint16_t attr);
uint64_t nftnl_flowtable_get_u64(const struct nftnl_flowtable *c, uint16_t attr);
-const char **nftnl_flowtable_get_array(const struct nftnl_flowtable *t, uint16_t attr);
+const char *const *nftnl_flowtable_get_array(const struct nftnl_flowtable *t, uint16_t attr);
struct nlmsghdr;
diff --git a/include/libnftnl/object.h b/include/libnftnl/object.h
index 221b15c..9930355 100644
--- a/include/libnftnl/object.h
+++ b/include/libnftnl/object.h
@@ -19,6 +19,7 @@ enum {
NFTNL_OBJ_FAMILY,
NFTNL_OBJ_USE,
NFTNL_OBJ_HANDLE,
+ NFTNL_OBJ_USERDATA,
NFTNL_OBJ_BASE = 16,
__NFTNL_OBJ_MAX
};
@@ -27,18 +28,21 @@ enum {
enum {
NFTNL_OBJ_CTR_PKTS = NFTNL_OBJ_BASE,
NFTNL_OBJ_CTR_BYTES,
+ __NFTNL_OBJ_CTR_MAX,
};
enum {
NFTNL_OBJ_QUOTA_BYTES = NFTNL_OBJ_BASE,
NFTNL_OBJ_QUOTA_CONSUMED,
NFTNL_OBJ_QUOTA_FLAGS,
+ __NFTNL_OBJ_QUOTA_MAX,
};
enum {
NFTNL_OBJ_CT_HELPER_NAME = NFTNL_OBJ_BASE,
NFTNL_OBJ_CT_HELPER_L3PROTO,
NFTNL_OBJ_CT_HELPER_L4PROTO,
+ __NFTNL_OBJ_CT_HELPER_MAX,
};
enum nftnl_cttimeout_array_tcp {
@@ -68,6 +72,7 @@ enum {
NFTNL_OBJ_CT_TIMEOUT_L3PROTO = NFTNL_OBJ_BASE,
NFTNL_OBJ_CT_TIMEOUT_L4PROTO,
NFTNL_OBJ_CT_TIMEOUT_ARRAY,
+ __NFTNL_OBJ_CT_TIMEOUT_MAX,
};
enum {
@@ -76,6 +81,7 @@ enum {
NFTNL_OBJ_CT_EXPECT_DPORT,
NFTNL_OBJ_CT_EXPECT_TIMEOUT,
NFTNL_OBJ_CT_EXPECT_SIZE,
+ __NFTNL_OBJ_CT_EXPECT_MAX,
};
enum {
@@ -84,12 +90,14 @@ enum {
NFTNL_OBJ_LIMIT_BURST,
NFTNL_OBJ_LIMIT_TYPE,
NFTNL_OBJ_LIMIT_FLAGS,
+ __NFTNL_OBJ_LIMIT_MAX,
};
enum {
NFTNL_OBJ_SYNPROXY_MSS = NFTNL_OBJ_BASE,
NFTNL_OBJ_SYNPROXY_WSCALE,
NFTNL_OBJ_SYNPROXY_FLAGS,
+ __NFTNL_OBJ_SYNPROXY_MAX,
};
enum {
@@ -109,10 +117,12 @@ enum {
NFTNL_OBJ_TUNNEL_ERSPAN_V1_INDEX,
NFTNL_OBJ_TUNNEL_ERSPAN_V2_HWID,
NFTNL_OBJ_TUNNEL_ERSPAN_V2_DIR,
+ __NFTNL_OBJ_TUNNEL_MAX,
};
enum {
NFTNL_OBJ_SECMARK_CTX = NFTNL_OBJ_BASE,
+ __NFTNL_OBJ_SECMARK_MAX,
};
struct nftnl_obj;
@@ -122,22 +132,22 @@ void nftnl_obj_free(const struct nftnl_obj *ne);
bool nftnl_obj_is_set(const struct nftnl_obj *ne, uint16_t attr);
void nftnl_obj_unset(struct nftnl_obj *ne, uint16_t attr);
-void nftnl_obj_set_data(struct nftnl_obj *ne, uint16_t attr, const void *data,
- uint32_t data_len);
+int nftnl_obj_set_data(struct nftnl_obj *ne, uint16_t attr, const void *data,
+ uint32_t data_len);
void nftnl_obj_set(struct nftnl_obj *ne, uint16_t attr, const void *data) __attribute__((deprecated));
-void nftnl_obj_set_u8(struct nftnl_obj *ne, uint16_t attr, uint8_t val);
-void nftnl_obj_set_u16(struct nftnl_obj *ne, uint16_t attr, uint16_t val);
-void nftnl_obj_set_u32(struct nftnl_obj *ne, uint16_t attr, uint32_t val);
-void nftnl_obj_set_u64(struct nftnl_obj *obj, uint16_t attr, uint64_t val);
-void nftnl_obj_set_str(struct nftnl_obj *ne, uint16_t attr, const char *str);
-const void *nftnl_obj_get_data(struct nftnl_obj *ne, uint16_t attr,
+int nftnl_obj_set_u8(struct nftnl_obj *ne, uint16_t attr, uint8_t val);
+int nftnl_obj_set_u16(struct nftnl_obj *ne, uint16_t attr, uint16_t val);
+int nftnl_obj_set_u32(struct nftnl_obj *ne, uint16_t attr, uint32_t val);
+int nftnl_obj_set_u64(struct nftnl_obj *obj, uint16_t attr, uint64_t val);
+int nftnl_obj_set_str(struct nftnl_obj *ne, uint16_t attr, const char *str);
+const void *nftnl_obj_get_data(const struct nftnl_obj *ne, uint16_t attr,
uint32_t *data_len);
-const void *nftnl_obj_get(struct nftnl_obj *ne, uint16_t attr);
-uint8_t nftnl_obj_get_u8(struct nftnl_obj *ne, uint16_t attr);
-uint16_t nftnl_obj_get_u16(struct nftnl_obj *obj, uint16_t attr);
-uint32_t nftnl_obj_get_u32(struct nftnl_obj *ne, uint16_t attr);
-uint64_t nftnl_obj_get_u64(struct nftnl_obj *obj, uint16_t attr);
-const char *nftnl_obj_get_str(struct nftnl_obj *ne, uint16_t attr);
+const void *nftnl_obj_get(const struct nftnl_obj *ne, uint16_t attr);
+uint8_t nftnl_obj_get_u8(const struct nftnl_obj *ne, uint16_t attr);
+uint16_t nftnl_obj_get_u16(const struct nftnl_obj *obj, uint16_t attr);
+uint32_t nftnl_obj_get_u32(const struct nftnl_obj *ne, uint16_t attr);
+uint64_t nftnl_obj_get_u64(const struct nftnl_obj *obj, uint16_t attr);
+const char *nftnl_obj_get_str(const struct nftnl_obj *ne, uint16_t attr);
void nftnl_obj_nlmsg_build_payload(struct nlmsghdr *nlh,
const struct nftnl_obj *ne);
@@ -167,7 +177,7 @@ struct nftnl_obj_list_iter *nftnl_obj_list_iter_create(struct nftnl_obj_list *l)
struct nftnl_obj *nftnl_obj_list_iter_next(struct nftnl_obj_list_iter *iter);
void nftnl_obj_list_iter_destroy(struct nftnl_obj_list_iter *iter);
-#ifdef __cplusplusg
+#ifdef __cplusplus
} /* extern "C" */
#endif
diff --git a/include/libnftnl/rule.h b/include/libnftnl/rule.h
index e5d1ca0..b6b93c6 100644
--- a/include/libnftnl/rule.h
+++ b/include/libnftnl/rule.h
@@ -51,6 +51,7 @@ uint32_t nftnl_rule_get_u32(const struct nftnl_rule *r, uint16_t attr);
uint64_t nftnl_rule_get_u64(const struct nftnl_rule *r, uint16_t attr);
void nftnl_rule_add_expr(struct nftnl_rule *r, struct nftnl_expr *expr);
+void nftnl_rule_del_expr(struct nftnl_expr *expr);
struct nlmsghdr;
diff --git a/include/libnftnl/set.h b/include/libnftnl/set.h
index db3fa68..e2e5795 100644
--- a/include/libnftnl/set.h
+++ b/include/libnftnl/set.h
@@ -29,6 +29,9 @@ enum nftnl_set_attr {
NFTNL_SET_USERDATA,
NFTNL_SET_OBJ_TYPE,
NFTNL_SET_HANDLE,
+ NFTNL_SET_DESC_CONCAT,
+ NFTNL_SET_EXPR,
+ NFTNL_SET_EXPRESSIONS,
__NFTNL_SET_MAX
};
#define NFTNL_SET_MAX (__NFTNL_SET_MAX - 1)
@@ -78,6 +81,12 @@ int nftnl_set_list_foreach(struct nftnl_set_list *set_list, int (*cb)(struct nft
struct nftnl_set *nftnl_set_list_lookup_byname(struct nftnl_set_list *set_list,
const char *set);
+struct nftnl_expr;
+void nftnl_set_add_expr(struct nftnl_set *s, struct nftnl_expr *expr);
+int nftnl_set_expr_foreach(const struct nftnl_set *s,
+ int (*cb)(struct nftnl_expr *e, void *data),
+ void *data);
+
struct nftnl_set_list_iter;
struct nftnl_set_list_iter *nftnl_set_list_iter_create(const struct nftnl_set_list *l);
struct nftnl_set *nftnl_set_list_iter_cur(const struct nftnl_set_list_iter *iter);
@@ -104,6 +113,8 @@ enum {
NFTNL_SET_ELEM_USERDATA,
NFTNL_SET_ELEM_EXPR,
NFTNL_SET_ELEM_OBJREF,
+ NFTNL_SET_ELEM_KEY_END,
+ NFTNL_SET_ELEM_EXPRESSIONS,
__NFTNL_SET_ELEM_MAX
};
#define NFTNL_SET_ELEM_MAX (__NFTNL_SET_ELEM_MAX - 1)
@@ -133,13 +144,21 @@ bool nftnl_set_elem_is_set(const struct nftnl_set_elem *s, uint16_t attr);
#define nftnl_set_elem_nlmsg_build_hdr nftnl_nlmsg_build_hdr
void nftnl_set_elems_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set *s);
void nftnl_set_elem_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set_elem *e);
+struct nlattr *nftnl_set_elem_nlmsg_build(struct nlmsghdr *nlh,
+ struct nftnl_set_elem *elem, int i);
int nftnl_set_elem_parse(struct nftnl_set_elem *e, enum nftnl_parse_type type,
const char *data, struct nftnl_parse_err *err);
int nftnl_set_elem_parse_file(struct nftnl_set_elem *e, enum nftnl_parse_type type,
FILE *fp, struct nftnl_parse_err *err);
int nftnl_set_elem_snprintf(char *buf, size_t size, const struct nftnl_set_elem *s, uint32_t type, uint32_t flags);
-int nftnl_set_elem_fprintf(FILE *fp, struct nftnl_set_elem *se, uint32_t type, uint32_t flags);
+int nftnl_set_elem_fprintf(FILE *fp, const struct nftnl_set_elem *se, uint32_t type, uint32_t flags);
+
+struct nftnl_expr;
+void nftnl_set_elem_add_expr(struct nftnl_set_elem *e, struct nftnl_expr *expr);
+int nftnl_set_elem_expr_foreach(struct nftnl_set_elem *e,
+ int (*cb)(struct nftnl_expr *e, void *data),
+ void *data);
int nftnl_set_elem_foreach(struct nftnl_set *s, int (*cb)(struct nftnl_set_elem *e, void *data), void *data);
diff --git a/include/libnftnl/table.h b/include/libnftnl/table.h
index 5faec81..d28c375 100644
--- a/include/libnftnl/table.h
+++ b/include/libnftnl/table.h
@@ -23,6 +23,8 @@ enum nftnl_table_attr {
NFTNL_TABLE_FLAGS,
NFTNL_TABLE_USE,
NFTNL_TABLE_HANDLE,
+ NFTNL_TABLE_USERDATA,
+ NFTNL_TABLE_OWNER,
__NFTNL_TABLE_MAX
};
#define NFTNL_TABLE_MAX (__NFTNL_TABLE_MAX - 1)
diff --git a/include/libnftnl/udata.h b/include/libnftnl/udata.h
index dd2f3df..dbf3a60 100644
--- a/include/libnftnl/udata.h
+++ b/include/libnftnl/udata.h
@@ -9,6 +9,18 @@
extern "C" {
#endif
+enum nftnl_udata_table_types {
+ NFTNL_UDATA_TABLE_COMMENT,
+ __NFTNL_UDATA_TABLE_MAX
+};
+#define NFTNL_UDATA_TABLE_MAX (__NFTNL_UDATA_TABLE_MAX - 1)
+
+enum nftnl_udata_chain_types {
+ NFTNL_UDATA_CHAIN_COMMENT,
+ __NFTNL_UDATA_CHAIN_MAX
+};
+#define NFTNL_UDATA_CHAIN_MAX (__NFTNL_UDATA_CHAIN_MAX - 1)
+
enum nftnl_udata_rule_types {
NFTNL_UDATA_RULE_COMMENT,
NFTNL_UDATA_RULE_EBTABLES_POLICY,
@@ -16,16 +28,34 @@ enum nftnl_udata_rule_types {
};
#define NFTNL_UDATA_RULE_MAX (__NFTNL_UDATA_RULE_MAX - 1)
+enum nftnl_udata_obj_types {
+ NFTNL_UDATA_OBJ_COMMENT,
+ __NFTNL_UDATA_OBJ_MAX
+};
+#define NFTNL_UDATA_OBJ_MAX (__NFTNL_UDATA_OBJ_MAX - 1)
+
#define NFTNL_UDATA_COMMENT_MAXLEN 128
enum nftnl_udata_set_types {
NFTNL_UDATA_SET_KEYBYTEORDER,
NFTNL_UDATA_SET_DATABYTEORDER,
NFTNL_UDATA_SET_MERGE_ELEMENTS,
+ NFTNL_UDATA_SET_KEY_TYPEOF,
+ NFTNL_UDATA_SET_DATA_TYPEOF,
+ NFTNL_UDATA_SET_EXPR,
+ NFTNL_UDATA_SET_DATA_INTERVAL,
+ NFTNL_UDATA_SET_COMMENT,
__NFTNL_UDATA_SET_MAX
};
#define NFTNL_UDATA_SET_MAX (__NFTNL_UDATA_SET_MAX - 1)
+enum {
+ NFTNL_UDATA_SET_TYPEOF_EXPR,
+ NFTNL_UDATA_SET_TYPEOF_DATA,
+ __NFTNL_UDATA_SET_TYPEOF_MAX,
+};
+#define NFTNL_UDATA_SET_TYPEOF_MAX (__NFTNL_UDATA_SET_TYPEOF_MAX - 1)
+
enum nftnl_udata_set_elem_types {
NFTNL_UDATA_SET_ELEM_COMMENT,
NFTNL_UDATA_SET_ELEM_FLAGS,
@@ -66,6 +96,11 @@ bool nftnl_udata_put_u32(struct nftnl_udata_buf *buf, uint8_t type,
bool nftnl_udata_put_strz(struct nftnl_udata_buf *buf, uint8_t type,
const char *strz);
+/* nest */
+struct nftnl_udata *nftnl_udata_nest_start(struct nftnl_udata_buf *buf,
+ uint8_t type);
+void nftnl_udata_nest_end(struct nftnl_udata_buf *buf, struct nftnl_udata *ud);
+
/* nftnl_udata_attr */
uint8_t nftnl_udata_type(const struct nftnl_udata *attr);
uint8_t nftnl_udata_len(const struct nftnl_udata *attr);