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@xxxxxx> --- include/rule.h | 2 ++ src/rule.c | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/rule.h b/include/rule.h index 61aa040a2e891..a7dd042d60e3f 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 78e0388e41e93..dc2dd3628b17f 100644 --- a/src/rule.c +++ b/src/rule.c @@ -716,6 +716,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; -- 2.21.0