path: root/include
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 /include
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 'include')
2 files changed, 19 insertions, 0 deletions
diff --git a/include/ b/include/
index f22561bb..465d8047 100644
--- a/include/
+++ b/include/
@@ -4,6 +4,7 @@ noinst_HEADERS = cli.h \
datatype.h \
expression.h \
gmputil.h \
+ iface.h \
mnl.h \
nftables.h \
payload.h \
diff --git a/include/iface.h b/include/iface.h
new file mode 100644
index 00000000..f41ee8be
--- /dev/null
+++ b/include/iface.h
@@ -0,0 +1,18 @@
+#include <net/if.h>
+struct iface {
+ struct list_head list;
+ char name[IFNAMSIZ];
+ uint32_t ifindex;
+unsigned int nft_if_nametoindex(const char *name);
+char *nft_if_indextoname(unsigned int ifindex, char *name);
+void iface_cache_update(void);
+void iface_cache_release(void);