ChangeLog: https://github.com/ppp-project/ppp/blob/ppp-2.5.1/ChangeLog Suppressed patches: 010-use_target_for_configure.patch [1] 510-pptp_compile_fix.patch [2] 520-u_int_bsd_fix.patch [3] Upstreamed patches: 330-retain_foreign_default_routes.patch [4] 521-remove_unused_openssl_dep.patch [5] [1]e48a9b5de4[2] Merged into "500-add-pptp-plugin.patch" [3]797cdae57c[4]9856f47063[5]59342ab622Signed-off-by: Shiji Yang <yangshiji66@qq.com> Link: https://github.com/openwrt/openwrt/pull/16605 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
35 lines
1.1 KiB
Diff
35 lines
1.1 KiB
Diff
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
|
|
@@ -2251,6 +2251,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 */
|
|
|
|
@@ -2259,7 +2262,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");
|