aboutsummaryrefslogtreecommitdiffstats
path: root/package/ppp/patches/340-populate_default_gateway.patch
blob: 9a0284eb23329fffbfd8697f20353f75ee1c91a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
pppd: Fill in default gateway on Linux

On Linux, when pppd creates the default route, it does not set the peer
address as gateway, leading to a default route without gateway address.

This behaviour breaks various downstream programs which attempt to infer
the default gateway IP address from the system default route entry.

This patch addresses the issue by filling in the peer address as gateway
when generating the default route entry.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>

--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
@@ -1697,6 +1697,9 @@ int sifdefaultroute (int unit, u_int32_t
     memset (&rt, 0, sizeof (rt));
     SET_SA_FAMILY (rt.rt_dst, AF_INET);
 
+    SET_SA_FAMILY(rt.rt_gateway, AF_INET);
+    SIN_ADDR(rt.rt_gateway) = gateway;
+
     rt.rt_dev = ifname;
 
     if (kernel_version > KVERSION(2,1,0)) {
@@ -1704,7 +1707,7 @@ int sifdefaultroute (int unit, u_int32_t
 	SIN_ADDR(rt.rt_genmask) = 0L;
     }
 
-    rt.rt_flags = RTF_UP;
+    rt.rt_flags = RTF_UP | RTF_GATEWAY;
     if (ioctl(sock_fd, SIOCADDRT, &rt) < 0) {
 	if (!ok_error(errno))
 	    error("default route ioctl(SIOCADDRT): %m");