openwrt-packages/net/sstp-client/files/lib/netifd/proto/sstp.sh

132 lines
2.9 KiB
Bash
Executable File

#!/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 "port"
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 port 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 port 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${port:+:$port} \
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
}