path: root/src/meta.c
diff options
authorPablo Neira Ayuso <>2015-04-09 14:15:15 +0200
committerPablo Neira Ayuso <>2015-04-11 19:22:45 +0200
commit3ed296118a065caff5600e60d4f7ef18e137f9a0 (patch)
tree50e6776142bf52a6a3b1ae5ae65631c1d1faa9ca /src/meta.c
parent628122466c32e7f1795c9754a46e6b6b91e71aa5 (diff)
src: restore interface to index cache
nftables used to have a cache to speed up interface name <-> index lookup, restore it using libmnl. This reduces netlink traffic since if_nametoindex() and if_indextoname() open, send a request, receive the list of interface and close a netlink socket for each call. I think this is also good for consistency since nft -f will operate with the same index number when reloading the ruleset. The cache is populated by when nft_if_nametoindex() and nft_if_indextoname() are used for first time. Then, it it released in the output path. In the interactive mode, it is invalidated after each command. Signed-off-by: Pablo Neira Ayuso <>
Diffstat (limited to 'src/meta.c')
1 files changed, 3 insertions, 2 deletions
diff --git a/src/meta.c b/src/meta.c
index ad57228a..bfc12580 100644
--- a/src/meta.c
+++ b/src/meta.c
@@ -30,6 +30,7 @@
#include <gmputil.h>
#include <utils.h>
#include <erec.h>
+#include <iface.h>
static struct symbol_table *realm_tbl;
static void __init realm_table_init(void)
@@ -138,7 +139,7 @@ static void ifindex_type_print(const struct expr *expr)
int ifindex;
ifindex = mpz_get_uint32(expr->value);
- if (if_indextoname(ifindex, name))
+ if (nft_if_indextoname(ifindex, name))
printf("%s", name);
printf("%d", ifindex);
@@ -149,7 +150,7 @@ static struct error_record *ifindex_type_parse(const struct expr *sym,
int ifindex;
- ifindex = if_nametoindex(sym->identifier);
+ ifindex = nft_if_nametoindex(sym->identifier);
if (ifindex == 0)
return error(&sym->location, "Interface does not exist");