The route table parameter needs to be checked in interface_update_proto_route; 
a route which has
an identical nexthop but a different routing table needs to be deleted and 
added in the correct
routing table.
While dumping the route list via ubus; don't display the default route when no 
default route is enabled.
Additonal make the ip4table and ip6table parameters visible when displaying the 
interface status.

Signed-off-by: Hans Dedecker <dedec...@gmail.com>
---
 interface-ip.c |    3 ++-
 interface.c    |    2 +-
 ubus.c         |    7 +++++++
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/interface-ip.c b/interface-ip.c
index 084688c..fb1163c 100644
--- a/interface-ip.c
+++ b/interface-ip.c
@@ -632,7 +632,8 @@ interface_update_proto_route(struct vlist_tree *tree,
        route_new = container_of(node_new, struct device_route, node);
 
        if (node_old && node_new)
-               keep = !memcmp(&route_old->nexthop, &route_new->nexthop, 
sizeof(route_old->nexthop));
+               keep = !memcmp(&route_old->nexthop, &route_new->nexthop, 
sizeof(route_old->nexthop)) &&
+                       (route_old->table == route_new->table);
 
        if (node_old) {
                if (!(route_old->flags & DEVADDR_EXTERNAL) && 
route_old->enabled && !keep)
diff --git a/interface.c b/interface.c
index 23c7032..9c208a2 100644
--- a/interface.c
+++ b/interface.c
@@ -918,7 +918,7 @@ interface_change_config(struct interface *if_old, struct 
interface *if_new)
 #undef UPDATE
 
        if (reload) {
-               D(INTERFACE, "Reload interface '%s because of config changes\n",
+               D(INTERFACE, "Reload interface '%s' because of config 
changes\n",
                  if_old->name);
                interface_clear_errors(if_old);
                set_config_state(if_old, IFC_RELOAD);
diff --git a/ubus.c b/ubus.c
index 9063680..1b90594 100644
--- a/ubus.c
+++ b/ubus.c
@@ -459,6 +459,9 @@ interface_ip_dump_route_list(struct interface_ip_settings 
*ip, bool enabled)
                if (route->enabled != enabled)
                        continue;
 
+               if ((ip->no_defaultroute == enabled) && !route->mask)
+                       continue;
+
                if ((route->flags & DEVADDR_FAMILY) == DEVADDR_INET4)
                        af = AF_INET;
                else
@@ -655,6 +658,10 @@ netifd_dump_status(struct interface *iface)
                blobmsg_add_string(&b, "device", dev->ifname);
 
        if (iface->state == IFS_UP) {
+               if (iface->ip4table)
+                       blobmsg_add_u32(&b, "ip4table", iface->ip4table);
+               if (iface->ip6table)
+                       blobmsg_add_u32(&b, "ip6table", iface->ip6table);       
          
                blobmsg_add_u32(&b, "metric", iface->metric);
                blobmsg_add_u8(&b, "delegation", 
!iface->proto_ip.no_delegation);
                a = blobmsg_open_array(&b, "ipv4-address");
-- 
1.7.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to