1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-07-04 20:32:21 +03: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:
juhosg 2012-05-03 09:39:01 +00:00
parent f34832554e
commit fe8fbd1c05
2 changed files with 12 additions and 14 deletions

View File

@ -23,7 +23,7 @@ define Package/pptp
TITLE:=PPTP client TITLE:=PPTP client
MAINTAINER:=Jo-Philipp Wich <xm@subsignal.org> MAINTAINER:=Jo-Philipp Wich <xm@subsignal.org>
URL:=http://pptpclient.sourceforge.net/ URL:=http://pptpclient.sourceforge.net/
DEPENDS:=+ppp +kmod-gre +resolveip DEPENDS:=+ppp +kmod-gre +resolveip +ip
endef endef
define Package/pptp/description define Package/pptp/description

View File

@ -1,5 +1,6 @@
find_gw() { find_route() {
route -n | awk '$1 == "0.0.0.0" { print $2; exit }' 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() { scan_pptp() {
@ -9,7 +10,7 @@ scan_pptp() {
stop_interface_pptp() { stop_interface_pptp() {
stop_interface_ppp "$1" stop_interface_ppp "$1"
for ip in $(uci_get_state network "$1" serv_addrs); do 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 done
} }
@ -36,16 +37,13 @@ setup_interface_pptp() {
done done
sleep 1 sleep 1
local gw="$(find_gw)" local serv_addrs=""
[ -n "$gw" ] && { for ip in $(resolveip -t 3 "${server}"); do
local serv_addrs="" append serv_addrs "$ip"
for ip in $(resolveip -4 -t 3 "$server"); do ip route replace $(find_route $ip)
append serv_addrs "$ip" done
route delete -host "$ip" 2>/dev/null uci_toggle_state network "$config" serv_addrs "$serv_addrs"
route add -host "$ip" gw "$gw" }
done
uci_toggle_state network "$config" serv_addrs "$serv_addrs"
}
# fix up the netmask # fix up the netmask
config_get netmask "$config" netmask config_get netmask "$config" netmask