summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2014-06-20 19:48:32 +0200
committerSteven Barth <steven@midlink.org>2014-06-20 19:48:32 +0200
commit07e9b542017c692ee2abe7a8689517b466150944 (patch)
tree5de40d767a9bdf30d0a2bf6ad2235f01dc37dbdb
parent65cab45660dd0b234b663a39a133c64271f667b7 (diff)
downloadnetifd-07e9b542017c692ee2abe7a8689517b466150944.tar.gz
system: fix treatment of RT_TABLE_MAIN
Do not treat RT_TABLE_MAIN as RT_TABLE_UNSPEC in system_resolve_rt_table() in order to allow ip rules with lookup main to work as expected. Provide a new function system_is_default_rt_table() to allow calling code to specifically test for RT_TABLE_MAIN, this is going to be needed for the backwards compatible handling of the table attribute in route objects. Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
-rw-r--r--system-dummy.c5
-rw-r--r--system-linux.c9
-rw-r--r--system.h1
3 files changed, 11 insertions, 4 deletions
diff --git a/system-dummy.c b/system-dummy.c
index f2988f2..66b3ae6 100644
--- a/system-dummy.c
+++ b/system-dummy.c
@@ -205,6 +205,11 @@ bool system_resolve_rt_table(const char *name, unsigned int *id)
return true;
}
+bool system_is_default_rt_table(unsigned int id)
+{
+ return true;
+}
+
int system_add_iprule(struct iprule *rule)
{
return 0;
diff --git a/system-linux.c b/system-linux.c
index 8f612c9..c6f17e9 100644
--- a/system-linux.c
+++ b/system-linux.c
@@ -1464,14 +1464,15 @@ bool system_resolve_rt_table(const char *name, unsigned int *id)
if (table == RT_TABLE_UNSPEC)
return false;
- /* do not consider main table special */
- if (table == RT_TABLE_MAIN)
- table = RT_TABLE_UNSPEC;
-
*id = table;
return true;
}
+bool system_is_default_rt_table(unsigned int id)
+{
+ return (id == RT_TABLE_MAIN);
+}
+
static int system_iprule(struct iprule *rule, int cmd)
{
int alen = ((rule->flags & IPRULE_FAMILY) == IPRULE_INET4) ? 4 : 16;
diff --git a/system.h b/system.h
index 4c80eb0..0fde7f1 100644
--- a/system.h
+++ b/system.h
@@ -130,6 +130,7 @@ int system_flush_routes(void);
bool system_resolve_rt_type(const char *type, unsigned int *id);
bool system_resolve_rt_table(const char *name, unsigned int *id);
+bool system_is_default_rt_table(unsigned int id);
int system_del_ip_tunnel(const char *name);
int system_add_ip_tunnel(const char *name, struct blob_attr *attr);