Browse Source

Add netifd script to control sstp connections.

lilik-openwrt-22.03
Harvey Hu 10 years ago
committed by Robert Koszewski
parent
commit
f15e39134e
3 changed files with 135 additions and 7 deletions
  1. +5
    -3
      net/sstp-client/Makefile
  2. +0
    -4
      net/sstp-client/files/etc/ppp/chap-secrets
  3. +130
    -0
      net/sstp-client/files/lib/netifd/proto/sstp.sh

+ 5
- 3
net/sstp-client/Makefile View File

@ -8,7 +8,7 @@
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
@ -24,7 +24,7 @@ define Package/sstp-client
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>
@ -53,9 +53,11 @@ define Package/sstp-client/install
$(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))

+ 0
- 4
net/sstp-client/files/etc/ppp/chap-secrets View File

@ -1,4 +0,0 @@
# Secrets for authentication using CHAP
# client (domain\\username) server secret (password) acceptable local IP addresses
# SSTP-TEST\\JonDoe sstp-test 'testme1234!' *

+ 130
- 0
net/sstp-client/files/lib/netifd/proto/sstp.sh View File

@ -0,0 +1,130 @@
#!/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
}

Loading…
Cancel
Save