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");