summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2019-06-07 19:21:19 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2019-06-07 23:54:51 +0200
commit4cbbb0a31a45860cdc365e9fba9621c24bbaf8d8 (patch)
tree3eec0c2e36df961a8939fca8e8842e27e4044085
parent7a11d807058cfdc684064ad064d9ea904e4b43de (diff)
rule: Introduce rule_lookup_by_index()
In contrast to rule_lookup(), this function returns a chain's rule at a given index instead of by handle. Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--include/rule.h2
-rw-r--r--src/rule.c11
2 files changed, 13 insertions, 0 deletions
diff --git a/include/rule.h b/include/rule.h
index bf3f3963..87b440b6 100644
--- a/include/rule.h
+++ b/include/rule.h
@@ -260,6 +260,8 @@ extern struct rule *rule_get(struct rule *rule);
extern void rule_free(struct rule *rule);
extern void rule_print(const struct rule *rule, struct output_ctx *octx);
extern struct rule *rule_lookup(const struct chain *chain, uint64_t handle);
+extern struct rule *rule_lookup_by_index(const struct chain *chain,
+ uint64_t index);
/**
* struct set - nftables set
diff --git a/src/rule.c b/src/rule.c
index e570238a..20fe6f37 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -641,6 +641,17 @@ struct rule *rule_lookup(const struct chain *chain, uint64_t handle)
return NULL;
}
+struct rule *rule_lookup_by_index(const struct chain *chain, uint64_t index)
+{
+ struct rule *rule;
+
+ list_for_each_entry(rule, &chain->rules, list) {
+ if (!--index)
+ return rule;
+ }
+ return NULL;
+}
+
struct scope *scope_init(struct scope *scope, const struct scope *parent)
{
scope->parent = parent;