diff options
-rw-r--r-- | include/libnftnl/chain.h | 2 | ||||
-rw-r--r-- | src/chain.c | 28 | ||||
-rw-r--r-- | src/libnftnl.map | 3 |
3 files changed, 33 insertions, 0 deletions
diff --git a/include/libnftnl/chain.h b/include/libnftnl/chain.h index f04f610..64e10e9 100644 --- a/include/libnftnl/chain.h +++ b/include/libnftnl/chain.h @@ -76,6 +76,7 @@ int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *t); int nftnl_rule_foreach(struct nftnl_chain *c, int (*cb)(struct nftnl_rule *r, void *data), void *data); +struct nftnl_rule *nftnl_rule_lookup_byindex(struct nftnl_chain *c, uint32_t index); struct nftnl_rule_iter; @@ -89,6 +90,7 @@ struct nftnl_chain_list *nftnl_chain_list_alloc(void); void nftnl_chain_list_free(struct nftnl_chain_list *list); int nftnl_chain_list_is_empty(const struct nftnl_chain_list *list); int nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list, int (*cb)(struct nftnl_chain *t, void *data), void *data); +struct nftnl_chain *nftnl_chain_list_lookup_byname(struct nftnl_chain_list *chain_list, const char *chain); void nftnl_chain_list_add(struct nftnl_chain *r, struct nftnl_chain_list *list); void nftnl_chain_list_add_tail(struct nftnl_chain *r, struct nftnl_chain_list *list); diff --git a/src/chain.c b/src/chain.c index c8b7f9b..8668fb7d 100644 --- a/src/chain.c +++ b/src/chain.c @@ -734,6 +734,20 @@ int nftnl_rule_foreach(struct nftnl_chain *c, return 0; } +EXPORT_SYMBOL(nftnl_rule_lookup_byindex); +struct nftnl_rule * +nftnl_rule_lookup_byindex(struct nftnl_chain *c, uint32_t index) +{ + struct nftnl_rule *r; + + list_for_each_entry(r, &c->rule_list, head) { + if (!index) + return r; + index--; + } + return NULL; +} + struct nftnl_rule_iter { const struct nftnl_chain *c; struct nftnl_rule *cur; @@ -856,6 +870,20 @@ int nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list, return 0; } +EXPORT_SYMBOL(nftnl_chain_list_lookup_byname); +struct nftnl_chain * +nftnl_chain_list_lookup_byname(struct nftnl_chain_list *chain_list, + const char *chain) +{ + struct nftnl_chain *c; + + list_for_each_entry(c, &chain_list->list, head) { + if (!strcmp(chain, c->name)) + return c; + } + return NULL; +} + struct nftnl_chain_list_iter { const struct nftnl_chain_list *list; struct nftnl_chain *cur; diff --git a/src/libnftnl.map b/src/libnftnl.map index 96d5b5f..0d3be32 100644 --- a/src/libnftnl.map +++ b/src/libnftnl.map @@ -345,4 +345,7 @@ LIBNFTNL_12 { nftnl_rule_iter_create; nftnl_rule_iter_next; nftnl_rule_iter_destroy; + + nftnl_chain_list_lookup_byname; + nftnl_rule_lookup_byindex; } LIBNFTNL_11; |