Add support for rt_protos.d

Add support for reading proto id/name mappings from rt_protos.d
directory. Allows users to have custom protocol values converted
to human friendly names.

Each file under rt_protos.d has the 'id name' format used by
rt_protos. Only .conf files are read and parsed.

Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
This commit is contained in:
David Ahern
2017-01-09 15:43:09 -08:00
committed by Stephen Hemminger
parent 9b036afd3c
commit 719e331ff6
3 changed files with 29 additions and 1 deletions

View File

@@ -0,0 +1,2 @@
Each file in this directory is an rt_protos configuration file. iproute2
commands scan this directory processing all files that end in '.conf'.

View File

@@ -1,3 +1,2 @@
Each file in this directory is an rt_tables configuration file. iproute2
commands scan this directory processing all files that end in '.conf'.

View File

@@ -142,9 +142,36 @@ static int rtnl_rtprot_init;
static void rtnl_rtprot_initialize(void)
{
struct dirent *de;
DIR *d;
rtnl_rtprot_init = 1;
rtnl_tab_initialize(CONFDIR "/rt_protos",
rtnl_rtprot_tab, 256);
d = opendir(CONFDIR "/rt_protos.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_protos.d/%s",
de->d_name);
rtnl_tab_initialize(path, rtnl_rtprot_tab, 256);
}
closedir(d);
}
const char *rtnl_rtprot_n2a(int id, char *buf, int len)