summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/chain.c16
-rw-r--r--src/libnftables.map8
-rw-r--r--src/rule.c32
-rw-r--r--src/set.c15
-rw-r--r--src/set_elem.c16
-rw-r--r--src/table.c16
6 files changed, 103 insertions, 0 deletions
diff --git a/src/chain.c b/src/chain.c
index 1c53daa..62a6ddd 100644
--- a/src/chain.c
+++ b/src/chain.c
@@ -801,6 +801,22 @@ void nft_chain_list_del(struct nft_chain *r)
}
EXPORT_SYMBOL(nft_chain_list_del);
+int nft_chain_list_foreach(struct nft_chain_list *chain_list,
+ int (*cb)(struct nft_chain *r, void *data),
+ void *data)
+{
+ struct nft_chain *cur, *tmp;
+ int ret;
+
+ list_for_each_entry_safe(cur, tmp, &chain_list->list, head) {
+ ret = cb(cur, data);
+ if (ret < 0)
+ return ret;
+ }
+ return 0;
+}
+EXPORT_SYMBOL(nft_chain_list_foreach);
+
struct nft_chain_list_iter {
struct nft_chain_list *list;
struct nft_chain *cur;
diff --git a/src/libnftables.map b/src/libnftables.map
index 2b31d55..6ee7a36 100644
--- a/src/libnftables.map
+++ b/src/libnftables.map
@@ -16,6 +16,7 @@ global:
nft_table_nlmsg_parse;
nft_table_list_alloc;
nft_table_list_free;
+ nft_table_list_foreach;
nft_table_list_add;
nft_table_list_iter_create;
nft_table_list_iter_next;
@@ -43,6 +44,7 @@ global:
nft_chain_list_free;
nft_chain_list_add;
nft_chain_list_del;
+ nft_chain_list_foreach;
nft_chain_list_iter_create;
nft_chain_list_iter_next;
nft_chain_list_iter_destroy;
@@ -66,6 +68,7 @@ global:
nft_rule_nlmsg_parse;
nft_rule_add_expr;
+ nft_rule_expr_foreach;
nft_rule_expr_iter_create;
nft_rule_expr_iter_next;
nft_rule_expr_iter_destroy;
@@ -87,6 +90,7 @@ global:
nft_rule_list_alloc;
nft_rule_list_free;
nft_rule_list_add;
+ nft_rule_list_foreach;
nft_rule_list_iter_create;
nft_rule_list_iter_cur;
nft_rule_list_iter_next;
@@ -109,6 +113,7 @@ global:
nft_set_list_alloc;
nft_set_list_free;
nft_set_list_add;
+ nft_set_list_foreach;
nft_set_list_iter_create;
nft_set_list_iter_cur;
@@ -118,6 +123,7 @@ global:
nft_set_elem_alloc;
nft_set_elem_free;
nft_set_elem_add;
+ nft_set_elem_foreach;
nft_set_elem_attr_unset;
nft_set_elem_attr_set;
nft_set_elem_attr_set_u32;
@@ -133,6 +139,8 @@ global:
nft_set_elems_nlmsg_build_payload;
nft_set_elems_nlmsg_parse;
+ nft_set_elems_foreach;
+
nft_set_elems_iter_create;
nft_set_elems_iter_cur;
nft_set_elems_iter_next;
diff --git a/src/rule.c b/src/rule.c
index 4c1672d..13b5a11 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -742,6 +742,22 @@ int nft_rule_snprintf(char *buf, size_t size, struct nft_rule *r,
}
EXPORT_SYMBOL(nft_rule_snprintf);
+int nft_rule_expr_foreach(struct nft_rule *r,
+ int (*cb)(struct nft_rule_expr *e, void *data),
+ void *data)
+{
+ struct nft_rule_expr *cur, *tmp;
+ int ret;
+
+ list_for_each_entry_safe(cur, tmp, &r->expr_list, head) {
+ ret = cb(cur, data);
+ if (ret < 0)
+ return ret;
+ }
+ return 0;
+}
+EXPORT_SYMBOL(nft_rule_expr_foreach);
+
struct nft_rule_expr_iter {
struct nft_rule *r;
struct nft_rule_expr *cur;
@@ -817,6 +833,22 @@ void nft_rule_list_add(struct nft_rule *r, struct nft_rule_list *list)
}
EXPORT_SYMBOL(nft_rule_list_add);
+int nft_rule_list_foreach(struct nft_rule_list *rule_list,
+ int (*cb)(struct nft_rule *r, void *data),
+ void *data)
+{
+ struct nft_rule *cur, *tmp;
+ int ret;
+
+ list_for_each_entry_safe(cur, tmp, &rule_list->list, head) {
+ ret = cb(cur, data);
+ if (ret < 0)
+ return ret;
+ }
+ return 0;
+}
+EXPORT_SYMBOL(nft_rule_list_foreach);
+
struct nft_rule_list_iter {
struct nft_rule_list *list;
struct nft_rule *cur;
diff --git a/src/set.c b/src/set.c
index 8e8adad..4d16062 100644
--- a/src/set.c
+++ b/src/set.c
@@ -364,6 +364,21 @@ void nft_set_list_add(struct nft_set *s, struct nft_set_list *list)
}
EXPORT_SYMBOL(nft_set_list_add);
+int nft_set_list_foreach(struct nft_set_list *set_list,
+ int (*cb)(struct nft_set *t, void *data), void *data)
+{
+ struct nft_set *cur, *tmp;
+ int ret;
+
+ list_for_each_entry_safe(cur, tmp, &set_list->list, head) {
+ ret = cb(cur, data);
+ if (ret < 0)
+ return ret;
+ }
+ return 0;
+}
+EXPORT_SYMBOL(nft_set_list_foreach);
+
struct nft_set_list_iter {
struct nft_set_list *list;
struct nft_set *cur;
diff --git a/src/set_elem.c b/src/set_elem.c
index dae1f8c..209227f 100644
--- a/src/set_elem.c
+++ b/src/set_elem.c
@@ -396,6 +396,22 @@ int nft_set_elem_snprintf(char *buf, size_t size, struct nft_set_elem *e,
}
EXPORT_SYMBOL(nft_set_elem_snprintf);
+int nft_set_elem_foreach(struct nft_set *s,
+ int (*cb)(struct nft_set_elem *e, void *data),
+ void *data)
+{
+ struct nft_set_elem *elem;
+ int ret;
+
+ list_for_each_entry(elem, &s->element_list, head) {
+ ret = cb(elem, data);
+ if (ret < 0)
+ return ret;
+ }
+ return 0;
+}
+EXPORT_SYMBOL(nft_set_elem_foreach);
+
struct nft_set_elems_iter {
struct list_head *list;
struct nft_set_elem *cur;
diff --git a/src/table.c b/src/table.c
index f21a6ed..3e8d4c9 100644
--- a/src/table.c
+++ b/src/table.c
@@ -409,6 +409,22 @@ void nft_table_list_add(struct nft_table *r, struct nft_table_list *list)
}
EXPORT_SYMBOL(nft_table_list_add);
+int nft_table_list_foreach(struct nft_table_list *table_list,
+ int (*cb)(struct nft_table *t, void *data),
+ void *data)
+{
+ struct nft_table *cur, *tmp;
+ int ret;
+
+ list_for_each_entry_safe(cur, tmp, &table_list->list, head) {
+ ret = cb(cur, data);
+ if (ret < 0)
+ return ret;
+ }
+ return 0;
+}
+EXPORT_SYMBOL(nft_table_list_foreach);
+
struct nft_table_list_iter {
struct nft_table_list *list;
struct nft_table *cur;