include $(TOPDIR)/rules.mk
PKG_NAME:=sstp-client
-PKG_VERSION:=1.0.12
+PKG_VERSION:=1.1.0
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
SECTION:=net
CATEGORY:=Network
SUBMENU:=VPN
- DEPENDS=+libevent2 +libopenssl +ppp
+ DEPENDS=+libevent2 +libopenssl +ppp +resolveip
TITLE:=SSTP-Client is a SSTP client for Linux.
URL:=http://sstp-client.sourceforge.net/
MAINTAINER:=Federico Di Marco <fededim@gmail.com>
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/.libs/sstpc $(1)/usr/bin/
$(CP) $(PKG_BUILD_DIR)/src/libsstp-api/.libs/*.so* $(1)/usr/lib/
$(CP) $(PKG_BUILD_DIR)/src/pppd-plugin/.libs/*.so* $(1)/usr/lib/
-
+
$(INSTALL_DIR) $(1)/etc
$(CP) files/etc $(1)
+ $(INSTALL_DIR) $(1)/lib/netifd/proto
+ $(INSTALL_BIN) ./files/lib/netifd/proto/sstp.sh $(1)/lib/netifd/proto
endef
$(eval $(call BuildPackage,sstp-client))
--- /dev/null
+#!/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
+}