diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2015-04-09 14:15:15 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2015-04-11 19:22:45 +0200 |
commit | 3ed296118a065caff5600e60d4f7ef18e137f9a0 (patch) | |
tree | 50e6776142bf52a6a3b1ae5ae65631c1d1faa9ca /include | |
parent | 628122466c32e7f1795c9754a46e6b6b91e71aa5 (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 <pablo@netfilter.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/Makefile.am | 1 | ||||
-rw-r--r-- | include/iface.h | 18 |
2 files changed, 19 insertions, 0 deletions
diff --git a/include/Makefile.am b/include/Makefile.am index f22561bb..465d8047 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -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 @@ +#ifndef _NFTABLES_IFACE_H_ +#define _NFTABLES_IFACE_H_ + +#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); + +#endif |