interface-ip: use ptp address as well to find local address target
authorHans Dedecker <dedeckeh@gmail.com>
Fri, 17 May 2019 16:27:59 +0000 (18:27 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Fri, 17 May 2019 16:38:42 +0000 (18:38 +0200)
In case of tunnel over PPP(such as gretap over l2tp): tunnel interface
use PPP's peer address as remote address, netifd script will call
proto_add_host_dependency function, then netifd will search which device
can reach to the remote address. Before the patch, netifd don't consider
the PPP interface can reach to the remote address, so netifd will select
default route to remote address, it will lead to remote address unreachable.

Based on a patch by xiaofan <xfan1024@live.com>

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
interface-ip.c

index d4f428db5c88b836c5bbe0460242404b3d32f413..864de5059e5906a88a10012f98acbf00c9390937 100644 (file)
@@ -196,6 +196,10 @@ __find_ip_addr_target(struct interface_ip_settings *ip, union if_addr *a, bool v
                if (v6 != ((addr->flags & DEVADDR_FAMILY) == DEVADDR_INET6))
                        continue;
 
+               if (((addr->flags & DEVADDR_FAMILY) == DEVADDR_INET4) &&
+                               addr->point_to_point && a->in.s_addr == addr->point_to_point)
+                       return true;
+
                /* Handle offlink addresses correctly */
                unsigned int mask = addr->mask;
                if ((addr->flags & DEVADDR_FAMILY) == DEVADDR_INET6 &&