path: root/include/expr_ops.h
diff options
authorPablo Neira Ayuso <>2015-02-13 18:01:02 +0100
committerPablo Neira Ayuso <>2015-02-17 19:25:11 +0100
commit26c945057d742fc4b0f4dfdc07849074cb9264c1 (patch)
tree20facafe81106096f8ee1ca954fe0e59b8e8c664 /include/expr_ops.h
parent007e93ea118436eb40a2e39d6ae185c14b74ecf1 (diff)
src: split internal.h is smaller files
The internal.h file started being a small file with private definitions. Its size has been increasing over time more and more, so let's split this in small header files that map to the corresponding class where the functions belong to. Signed-off-by: Pablo Neira Ayuso <>
Diffstat (limited to 'include/expr_ops.h')
1 files changed, 34 insertions, 0 deletions
diff --git a/include/expr_ops.h b/include/expr_ops.h
new file mode 100644
index 0000000..ea5defd
--- /dev/null
+++ b/include/expr_ops.h
@@ -0,0 +1,34 @@
+#ifndef _EXPR_OPS_H_
+#define _EXPR_OPS_H_
+#include <stdint.h>
+#include "internal.h"
+struct nlattr;
+struct nlmsghdr;
+struct nft_rule_expr;
+struct expr_ops {
+ struct list_head head;
+ const char *name;
+ uint32_t alloc_len;
+ int max_attr;
+ void (*free)(struct nft_rule_expr *e);
+ int (*set)(struct nft_rule_expr *e, uint16_t type, const void *data, uint32_t data_len);
+ const void *(*get)(const struct nft_rule_expr *e, uint16_t type, uint32_t *data_len);
+ int (*parse)(struct nft_rule_expr *e, struct nlattr *attr);
+ void (*build)(struct nlmsghdr *nlh, struct nft_rule_expr *e);
+ int (*snprintf)(char *buf, size_t len, uint32_t type, uint32_t flags, struct nft_rule_expr *e);
+ int (*xml_parse)(struct nft_rule_expr *e, mxml_node_t *tree,
+ struct nft_parse_err *err);
+ int (*json_parse)(struct nft_rule_expr *e, json_t *data,
+ struct nft_parse_err *err);
+void nft_expr_ops_register(struct expr_ops *ops);
+struct expr_ops *nft_expr_ops_lookup(const char *name);
+#define nft_expr_data(ops) (void *)ops->data