From 14ee0a979b622f95676eab77043b61cc5aab4270 Mon Sep 17 00:00:00 2001 From: Elise Lennion Date: Fri, 6 Jan 2017 19:43:32 -0200 Subject: src: sort set elements in netlink_get_setelems() So users can better track their ruleset via git. Without sorting, the elements can be listed in a different order every time the set is created, generating unnecessary git changes. Mergesort is used. Doesn't sort sets with 'flags interval' set on. Pablo appends to this changelog description: Currently these interval set elements are dumped in order. We'll likely get new representations soon that may not guarantee this anymore, so let's revisit this later in case we need it. Without this patch, nft list ruleset with a set containing 40000 elements takes on my laptop: real 0m2.742s user 0m0.112s sys 0m0.280s With this patch: real 0m2.846s user 0m0.180s sys 0m0.284s Difference is small, so don't get nft more complicated with yet another getopt() option, enable this by default. Signed-off-by: Elise Lennion Signed-off-by: Pablo Neira Ayuso --- include/expression.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/expression.h b/include/expression.h index 71e9c43e..ec90265b 100644 --- a/include/expression.h +++ b/include/expression.h @@ -396,6 +396,7 @@ extern struct expr *range_expr_alloc(const struct location *loc, extern void compound_expr_add(struct expr *compound, struct expr *expr); extern void compound_expr_remove(struct expr *compound, struct expr *expr); +extern void list_expr_sort(struct list_head *head); extern struct expr *concat_expr_alloc(const struct location *loc); -- cgit v1.2.3