12345678910111213141516171819202122232425262728293031323334 |
- 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 <jo@mein.io>
- --- a/pppd/sys-linux.c
- +++ b/pppd/sys-linux.c
- @@ -1710,6 +1710,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)) {
- @@ -1717,7 +1720,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");
|