]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
Add support for rt_tables.d
authorDavid Ahern <dsa@cumulusnetworks.com>
Tue, 24 Nov 2015 21:20:01 +0000 (13:20 -0800)
committerStephen Hemminger <shemming@brocade.com>
Sun, 29 Nov 2015 19:29:31 +0000 (11:29 -0800)
Add support for reading table id/name mappings from rt_tables.d
directory.

Suggested-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
etc/iproute2/rt_tables.d/README [new file with mode: 0644]
lib/rt_names.c

diff --git a/etc/iproute2/rt_tables.d/README b/etc/iproute2/rt_tables.d/README
new file mode 100644 (file)
index 0000000..79386f8
--- /dev/null
@@ -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'.
+
index e87c65dad39e670957849c158db06b5e62e34bd3..f68e91d6d046e6c998dee5aedb1df3c388b4e824 100644 (file)
@@ -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)