Initial commit
This commit is contained in:
@@ -0,0 +1,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 <jo@mein.io>
|
||||
|
||||
--- a/pppd/sys-linux.c
|
||||
+++ b/pppd/sys-linux.c
|
||||
@@ -1703,6 +1703,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;
|
||||
rt.rt_metric = dfl_route_metric + 1; /* +1 for binary compatibility */
|
||||
|
||||
@@ -1711,7 +1714,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");
|
||||
Reference in New Issue
Block a user