|
|
- #!/bin/sh
-
- [ -x /usr/bin/sstpc ] || exit 0
-
- [ -n "$INCLUDE_ONLY" ] || {
- . /lib/functions.sh
- . ../netifd-proto.sh
- init_proto "$@"
- }
-
- proto_sstp_init_config() {
- proto_config_add_string "server"
- proto_config_add_string "username"
- proto_config_add_string "password"
- proto_config_add_string "pppd_options"
- proto_config_add_string "sstp_options"
- proto_config_add_int "log_level"
- proto_config_add_int "mtu"
- proto_config_add_boolean "ipv6"
- proto_config_add_boolean "defaultroute"
- proto_config_add_boolean "peerdns"
- available=1
- no_device=1
- }
-
- proto_sstp_setup() {
- local config="$1"; shift
- local iface="$2"
- local ifname="sstp-$config"
-
- local ip serv_addr server ipv6 defaultroute peerdns
- json_get_var server server && {
- for ip in $(resolveip -t 5 "$server"); do
- ( proto_add_host_dependency "$config" "$ip" )
- serv_addr=1
- done
- }
- [ -n "$serv_addr" ] || {
- echo "Could not resolve server address"
- sleep 5
- proto_setup_failed "$config"
- exit 1
- }
-
- json_get_vars username password pppd_options sstp_options log_level ipv6 defaultroute peerdns
- if [ "$ipv6" = 1 ]; then
- ipv6=1
- else
- ipv6=""
- fi
- if [ "$defaultroute" = 0 ]; then
- defaultroute=""
- else
- defaultroute=1
- fi
-
- if [ "$peerdns" = 0 ]; then
- peerdns=""
- else
- peerdns=1
- fi
-
- [ -n "$mtu" ] || json_get_var mtu mtu
- [ -n "$log_level" ] || log_level=0
-
- local load
- for module in slhc ppp_generic ppp_async ppp_mppe ip_gre gre pptp; do
- grep -q "^$module " /proc/modules && continue
- /sbin/insmod $module 2>&- >&-
- load=1
- done
- [ "$load" = "1" ] && sleep 1
-
- proto_init_update "$ifname" 1
- proto_send_update "$config"
-
- proto_run_command "$config" sstpc \
- --cert-warn \
- --password $password \
- --user $username \
- --log-level $log_level \
- --save-server-route \
- --ipparam $config \
- $sstp_options \
- $server \
- ifname $ifname \
- require-mschap-v2 \
- ${ipv6:++ipv6} \
- refuse-pap \
- noauth \
- ${defaultroute:+replacedefaultroute defaultroute} \
- ${peerdns:+usepeerdns} \
- ip-up-script /lib/netifd/ppp-up \
- ipv6-up-script /lib/netifd/ppp-up \
- ip-down-script /lib/netifd/ppp-down \
- ipv6-down-script /lib/netifd/ppp-down \
- ${mtu:+mtu $mtu mru $mtu} \
- $pppd_options
-
- # WORKAROUND: Workaround to properly register the sstp interface (As seeen in: https://forum.archive.openwrt.org/viewtopic.php?id=58007)
- # WORKAROUND: Start
- sleep 10
- proto_init_update "$ifname" 1
- proto_send_update "$config"
- # WORKAROUND: End
-
- # if use pppoe and sstp at same time , firewall need reload .
- # but don't konw why
- /etc/init.d/firewall reload 2>&- >&-
- }
-
- proto_sstp_teardown() {
- local interface="$1"
-
- case "$ERROR" in
- 11|19)
- proto_notify_error "$interface" AUTH_FAILED
- proto_block_restart "$interface"
- ;;
- 2)
- proto_notify_error "$interface" INVALID_OPTIONS
- proto_block_restart "$interface"
- ;;
- esac
- proto_kill_command "$interface"
- }
-
- [ -n "$INCLUDE_ONLY" ] || {
- add_protocol sstp
- }
|