Fix pptp handling of routes to server.
[openwrt.git] / package / pptp / files / pptp.sh
1 find_route() {
2         ip route get $1 | sed -e 's/ /\n/g' | \
3             sed -ne '1p;/via/{N;p};/dev/{N;p};/src/{N;p};/mtu/{N;p}'
4 }
5
6 scan_pptp() {
7         config_set "$1" device "pptp-$1"
8 }
9
10 stop_interface_pptp() {
11         stop_interface_ppp "$1"
12         for ip in $(uci_get_state network "$1" serv_addrs); do
13                 ip route del "$ip" 2>/dev/null
14         done
15 }
16
17 coldplug_interface_pptp() {
18         setup_interface_pptp "pptp-$1" "$1"
19 }
20
21 setup_interface_pptp() {
22         local config="$2"
23         local ifname
24
25         local device
26         config_get device "$config" device
27
28         local server
29         config_get server "$config" server
30
31         local buffering
32         config_get_bool buffering "$config" buffering 1
33         [ "$buffering" == 0 ] && buffering="--nobuffer" || buffering=
34
35         for module in slhc ppp_generic ppp_async ip_gre; do
36                 /sbin/insmod $module 2>&- >&-
37         done
38         sleep 1
39
40         local serv_addrs=""
41         for ip in $(resolveip -t 3 "${server}"); do
42                 append serv_addrs "$ip"
43                 ip route replace $(find_route $ip)
44         done
45         uci_toggle_state network "$config" serv_addrs "$serv_addrs"
46 }
47
48         # fix up the netmask
49         config_get netmask "$config" netmask
50         [ -z "$netmask" -o -z "$device" ] || ifconfig $device netmask $netmask
51
52         config_get mtu "$config" mtu
53         mtu=${mtu:-1452}
54         start_pppd "$config" \
55                 pty "/usr/sbin/pptp $server --loglevel 0 --nolaunchpppd $buffering" \
56                 file /etc/ppp/options.pptp \
57                 mtu $mtu mru $mtu
58 }