mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-01-11 20:50:15 +02:00
Fix pptp handling of routes to server.
The existing code is fairly broken. It assumes you're using Legacy IP, and it assumes that the server is reachable via your default route. Via the first default route in the 'route -n' output, in fact, regardless of metric. Fix all those problems by using 'ip route get' to really find the *current* route to the server, and install a host-specific route to match. Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31565 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
f34832554e
commit
fe8fbd1c05
@ -23,7 +23,7 @@ define Package/pptp
|
||||
TITLE:=PPTP client
|
||||
MAINTAINER:=Jo-Philipp Wich <xm@subsignal.org>
|
||||
URL:=http://pptpclient.sourceforge.net/
|
||||
DEPENDS:=+ppp +kmod-gre +resolveip
|
||||
DEPENDS:=+ppp +kmod-gre +resolveip +ip
|
||||
endef
|
||||
|
||||
define Package/pptp/description
|
||||
|
@ -1,5 +1,6 @@
|
||||
find_gw() {
|
||||
route -n | awk '$1 == "0.0.0.0" { print $2; exit }'
|
||||
find_route() {
|
||||
ip route get $1 | sed -e 's/ /\n/g' | \
|
||||
sed -ne '1p;/via/{N;p};/dev/{N;p};/src/{N;p};/mtu/{N;p}'
|
||||
}
|
||||
|
||||
scan_pptp() {
|
||||
@ -9,7 +10,7 @@ scan_pptp() {
|
||||
stop_interface_pptp() {
|
||||
stop_interface_ppp "$1"
|
||||
for ip in $(uci_get_state network "$1" serv_addrs); do
|
||||
route del -host "$ip" 2>/dev/null
|
||||
ip route del "$ip" 2>/dev/null
|
||||
done
|
||||
}
|
||||
|
||||
@ -36,16 +37,13 @@ setup_interface_pptp() {
|
||||
done
|
||||
sleep 1
|
||||
|
||||
local gw="$(find_gw)"
|
||||
[ -n "$gw" ] && {
|
||||
local serv_addrs=""
|
||||
for ip in $(resolveip -4 -t 3 "$server"); do
|
||||
for ip in $(resolveip -t 3 "${server}"); do
|
||||
append serv_addrs "$ip"
|
||||
route delete -host "$ip" 2>/dev/null
|
||||
route add -host "$ip" gw "$gw"
|
||||
ip route replace $(find_route $ip)
|
||||
done
|
||||
uci_toggle_state network "$config" serv_addrs "$serv_addrs"
|
||||
}
|
||||
}
|
||||
|
||||
# fix up the netmask
|
||||
config_get netmask "$config" netmask
|
||||
|
Loading…
Reference in New Issue
Block a user