From 8bae620abf9ac81794acca43d305ca74f15a13ff Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Thu, 20 Dec 2018 16:09:10 +0100 Subject: nft: Introduce fetch_chain_cache() Move chain cache population from nft_chain_list_get() into a dedicated function. Signed-off-by: Phil Sutter Signed-off-by: Pablo Neira Ayuso --- iptables/nft.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'iptables/nft.c') diff --git a/iptables/nft.c b/iptables/nft.c index 469448f4..b4255777 100644 --- a/iptables/nft.c +++ b/iptables/nft.c @@ -1295,20 +1295,12 @@ err: return MNL_CB_OK; } -struct nftnl_chain_list *nft_chain_list_get(struct nft_handle *h, - const char *table) +static int fetch_chain_cache(struct nft_handle *h) { char buf[16536]; struct nlmsghdr *nlh; - const struct builtin_table *t; int i, ret; - t = nft_table_builtin_find(h, table); - if (!t) - return NULL; - - if (h->table[t->type].chain_cache) - return h->table[t->type].chain_cache; retry: for (i = 0; i < NFT_TABLE_MAX; i++) { enum nft_table_type type = h->tables[i].type; @@ -1318,7 +1310,7 @@ retry: h->table[type].chain_cache = nftnl_chain_list_alloc(); if (!h->table[type].chain_cache) - return NULL; + return -1; } nlh = nftnl_chain_nlmsg_build_hdr(buf, NFT_MSG_GETCHAIN, h->family, @@ -1331,6 +1323,21 @@ retry: goto retry; } + return ret; +} + +struct nftnl_chain_list *nft_chain_list_get(struct nft_handle *h, + const char *table) +{ + const struct builtin_table *t; + + t = nft_table_builtin_find(h, table); + if (!t) + return NULL; + + if (!h->table[t->type].chain_cache) + fetch_chain_cache(h); + return h->table[t->type].chain_cache; } -- cgit v1.2.3