X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=system-linux.c;h=21385fc767b971c18fb5e237995e00bd4a5a504d;hp=fb2ee29d2d8e216adf76163318e6da0fcc7590dc;hb=3eea8576d48d9b20cc1c6b46f54c7345a39d13aa;hpb=60f57b2bfb87c463fc271a9c3e8e1f97feaecdca diff --git a/system-linux.c b/system-linux.c index fb2ee29..21385fc 100644 --- a/system-linux.c +++ b/system-linux.c @@ -43,6 +43,10 @@ #define RTN_FAILED_POLICY 12 #endif +#ifndef RT_TABLE_PRELOCAL +#define RT_TABLE_PRELOCAL 128 +#endif + #include #include #include @@ -1606,6 +1610,8 @@ bool system_resolve_rt_table(const char *name, unsigned int *id) table = RT_TABLE_MAIN; else if (!strcmp(name, "local")) table = RT_TABLE_LOCAL; + else if (!strcmp(name, "prelocal")) + table = RT_TABLE_PRELOCAL; /* try to look up name in /etc/iproute2/rt_tables */ else if ((f = fopen("/etc/iproute2/rt_tables", "r")) != NULL) @@ -1767,6 +1773,10 @@ int system_flush_iprules(void) rule.flags = IPRULE_INET4 | IPRULE_PRIORITY | IPRULE_LOOKUP; rule.priority = 0; + rule.lookup = RT_TABLE_PRELOCAL; + rv |= system_iprule(&rule, RTM_NEWRULE); + + rule.priority = 1; rule.lookup = RT_TABLE_LOCAL; rv |= system_iprule(&rule, RTM_NEWRULE); @@ -1782,6 +1792,10 @@ int system_flush_iprules(void) rule.flags = IPRULE_INET6 | IPRULE_PRIORITY | IPRULE_LOOKUP; rule.priority = 0; + rule.lookup = RT_TABLE_PRELOCAL; + rv |= system_iprule(&rule, RTM_NEWRULE); + + rule.priority = 1; rule.lookup = RT_TABLE_LOCAL; rv |= system_iprule(&rule, RTM_NEWRULE);