diff options
author | David Ahern <dsa@cumulusnetworks.com> | 2015-11-24 13:20:01 -0800 |
---|---|---|
committer | Stephen Hemminger <shemming@brocade.com> | 2015-11-29 11:29:31 -0800 |
commit | 13ada95da4f05df5993ca332358fa3f2f3a21047 (patch) | |
tree | 02c09a2a7d490d0677b88de62be15065398a971b | |
parent | 906ac5437ab8e1e5f8514afe62bf01e1ff3906af (diff) | |
download | android_external_iproute2-13ada95da4f05df5993ca332358fa3f2f3a21047.tar.gz android_external_iproute2-13ada95da4f05df5993ca332358fa3f2f3a21047.tar.bz2 android_external_iproute2-13ada95da4f05df5993ca332358fa3f2f3a21047.zip |
Add support for rt_tables.d
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>
-rw-r--r-- | etc/iproute2/rt_tables.d/README | 3 | ||||
-rw-r--r-- | lib/rt_names.c | 26 |
2 files changed, 29 insertions, 0 deletions
diff --git a/etc/iproute2/rt_tables.d/README b/etc/iproute2/rt_tables.d/README new file mode 100644 index 0000000..79386f8 --- /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 e87c65d..f68e91d 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) |