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