2012-06-19 17:03:24 +00:00
|
|
|
pppd: Retain foreign default routes on Linux
|
|
|
|
|
|
|
|
On Linux, when pppd attempts to delete its default route it does not fill
|
|
|
|
the rt_dev field of the struct rtentry used to match the system default route.
|
|
|
|
As a consequence, pppd happily deletes any default route even if it belongs
|
|
|
|
to another interface.
|
|
|
|
|
|
|
|
This patch makes pppd fill out the rt_dev field so that only own default
|
|
|
|
routes are ever matched.
|
|
|
|
|
|
|
|
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
|
|
|
|
|
2010-08-04 21:47:29 +00:00
|
|
|
--- a/pppd/sys-linux.c
|
|
|
|
+++ b/pppd/sys-linux.c
|
2011-07-28 16:51:12 +00:00
|
|
|
@@ -1743,6 +1743,7 @@ int cifdefaultroute (int unit, u_int32_t
|
2010-08-04 21:47:29 +00:00
|
|
|
SIN_ADDR(rt.rt_genmask) = 0L;
|
|
|
|
}
|
|
|
|
|
2010-08-04 21:50:50 +00:00
|
|
|
+ rt.rt_dev = ifname;
|
2010-08-04 21:47:29 +00:00
|
|
|
rt.rt_flags = RTF_UP;
|
|
|
|
if (ioctl(sock_fd, SIOCDELRT, &rt) < 0 && errno != ESRCH) {
|
|
|
|
if (still_ppp()) {
|