Add support for reading table id/name mappings from rt_tables.d directory. Suggested-by: Roopa Prabhu <ro...@cumulusnetworks.com> Signed-off-by: David Ahern <d...@cumulusnetworks.com> --- v2 - comments from Stephen - only process files ending in '.conf' - add README file to etc/iproute2/rt_tables.d
etc/iproute2/rt_tables.d/README | 3 +++ lib/rt_names.c | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 etc/iproute2/rt_tables.d/README diff --git a/etc/iproute2/rt_tables.d/README b/etc/iproute2/rt_tables.d/README new file mode 100644 index 000000000000..79386f89cc14 --- /dev/null +++ b/etc/iproute2/rt_tables.d/README @@ -0,0 +1,3 @@ +Each file in this directory is an rt_tables configuration file. iproute2 +commands scan this directory processing all files that end in '.conf'. + diff --git a/lib/rt_names.c b/lib/rt_names.c index e87c65dad39e..f68e91d6d046 100644 --- a/lib/rt_names.c +++ b/lib/rt_names.c @@ -17,6 +17,7 @@ #include <string.h> #include <sys/time.h> #include <sys/socket.h> +#include <dirent.h> #include <asm/types.h> #include <linux/rtnetlink.h> @@ -339,6 +340,8 @@ static int rtnl_rttable_init; static void rtnl_rttable_initialize(void) { + struct dirent *de; + DIR *d; int i; rtnl_rttable_init = 1; @@ -348,6 +351,29 @@ static void rtnl_rttable_initialize(void) } rtnl_hash_initialize(CONFDIR "/rt_tables", rtnl_rttable_hash, 256); + + d = opendir(CONFDIR "/rt_tables.d"); + if (!d) + return; + + while ((de = readdir(d)) != NULL) { + char path[PATH_MAX]; + size_t len; + + if (*de->d_name == '.') + continue; + + /* only consider filenames ending in '.conf' */ + len = strlen(de->d_name); + if (len <= 5) + continue; + if (strcmp(de->d_name + len - 5, ".conf")) + continue; + + snprintf(path, sizeof(path), CONFDIR "/rt_tables.d/%s", de->d_name); + rtnl_hash_initialize(path, rtnl_rttable_hash, 256); + } + closedir(d); } const char * rtnl_rttable_n2a(__u32 id, char *buf, int len) -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html