]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/sys-linux.c
Ignore routes through our own interface in have_route_to
[ppp.git] / pppd / sys-linux.c
index af5164fe3e4be1cef3aab5b30a85d8561cdb4af6..2d50977a9600f77c7cfcf2547337e41fd014e12d 100644 (file)
@@ -1309,6 +1309,8 @@ static int defaultroute_exists (struct rtentry *rt)
 /*
  * have_route_to - determine if the system has any route to
  * a given IP address.
+ * For demand mode to work properly, we have to ignore routes
+ * through our own interface.
  */
 int have_route_to(u_int32_t addr)
 {
@@ -1319,7 +1321,7 @@ int have_route_to(u_int32_t addr)
        return -1;              /* don't know */
 
     while (read_route_table(&rt)) {
-       if ((rt.rt_flags & RTF_UP) == 0)
+       if ((rt.rt_flags & RTF_UP) == 0 || strcmp(rt.rt_dev, ifname) == 0)
            continue;
        if ((addr & ((struct sockaddr_in *)&rt.rt_genmask)->sin_addr.s_addr)
            == ((struct sockaddr_in *)&rt.rt_genmask)->sin_addr.s_addr) {