From e35693fd13de771e1e047ffa4f799f72f1446e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Falgueras=20Garc=C3=ADa?= Date: Wed, 17 Aug 2016 16:07:09 +0200 Subject: src: Implement rule comparison MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch implements the function: bool nftnl_rule_cmp(const struct nftnl_rule *r1, const struct nftnl_rule *r2) for rule comparison. Expressions within rules need to be compared, so also has been created the function: bool nftnl_expr_cmp(const struct nftnl_expr *e1, const struct nftnl_expr *e2); Also includes all expression comparators. Signed-off-by: Carlos Falgueras GarcĂ­a Signed-off-by: Pablo Neira Ayuso --- include/data_reg.h | 3 +++ include/expr_ops.h | 1 + include/libnftnl/expr.h | 2 ++ include/libnftnl/rule.h | 2 ++ 4 files changed, 8 insertions(+) (limited to 'include') diff --git a/include/data_reg.h b/include/data_reg.h index e749b5b..3fec7cd 100644 --- a/include/data_reg.h +++ b/include/data_reg.h @@ -3,6 +3,7 @@ #include #include +#include #include enum { @@ -27,6 +28,8 @@ int nftnl_data_reg_snprintf(char *buf, size_t size, const union nftnl_data_reg *reg, uint32_t output_format, uint32_t flags, int reg_type); +bool nftnl_data_reg_cmp(const union nftnl_data_reg *r1, + const union nftnl_data_reg *r2, int reg_type); struct nlattr; int nftnl_parse_data(union nftnl_data_reg *data, struct nlattr *attr, int *type); diff --git a/include/expr_ops.h b/include/expr_ops.h index 3c0cb18..a334732 100644 --- a/include/expr_ops.h +++ b/include/expr_ops.h @@ -13,6 +13,7 @@ struct expr_ops { uint32_t alloc_len; int max_attr; void (*free)(const struct nftnl_expr *e); + bool (*cmp)(const struct nftnl_expr *e1, const struct nftnl_expr *e2); int (*set)(struct nftnl_expr *e, uint16_t type, const void *data, uint32_t data_len); const void *(*get)(const struct nftnl_expr *e, uint16_t type, uint32_t *data_len); int (*parse)(struct nftnl_expr *e, struct nlattr *attr); diff --git a/include/libnftnl/expr.h b/include/libnftnl/expr.h index 1efe31c..5dd5e10 100644 --- a/include/libnftnl/expr.h +++ b/include/libnftnl/expr.h @@ -36,6 +36,8 @@ 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); +bool nftnl_expr_cmp(const struct nftnl_expr *e1, const struct nftnl_expr *e2); + int nftnl_expr_snprintf(char *buf, size_t buflen, const struct nftnl_expr *expr, uint32_t type, uint32_t flags); enum { diff --git a/include/libnftnl/rule.h b/include/libnftnl/rule.h index e3bd6b8..adeedf2 100644 --- a/include/libnftnl/rule.h +++ b/include/libnftnl/rule.h @@ -50,6 +50,8 @@ 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); +bool nftnl_rule_cmp(const struct nftnl_rule *r1, const struct nftnl_rule *r2); + struct nlmsghdr; void nftnl_rule_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_rule *t); -- cgit v1.2.3