summaryrefslogtreecommitdiff
path: root/interface-ip.c
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2019-05-17 18:27:59 +0200
committerHans Dedecker <dedeckeh@gmail.com>2019-05-17 18:38:42 +0200
commit22e8e589fd6ab5d19dc1d3c9d1bcf2bfabf1fafb (patch)
treef82a3910b5f96ee9896332de242c9ffc3a6f2b02 /interface-ip.c
parentf1aa0f9064653110d117fb5be8d8901086236227 (diff)
downloadnetifd-22e8e589fd6ab5d19dc1d3c9d1bcf2bfabf1fafb.tar.gz
interface-ip: use ptp address as well to find local address target
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>
Diffstat (limited to 'interface-ip.c')
-rw-r--r--interface-ip.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/interface-ip.c b/interface-ip.c
index d4f428d..864de50 100644
--- a/interface-ip.c
+++ b/interface-ip.c
@@ -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 &&