mirror of
https://github.com/novatiq/packages.git
synced 2026-04-30 15:38:40 +01:00
xl2tpd: fix by backporting the version from master branch
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
This commit is contained in:
+61
-43
@@ -15,35 +15,49 @@ proto_l2tp_init_config() {
|
||||
proto_config_add_string "pppd_options"
|
||||
proto_config_add_boolean "ipv6"
|
||||
proto_config_add_int "mtu"
|
||||
proto_config_add_int "checkup_interval"
|
||||
proto_config_add_string "server"
|
||||
available=1
|
||||
no_device=1
|
||||
no_proto_task=1
|
||||
}
|
||||
|
||||
proto_l2tp_setup() {
|
||||
local config="$1"
|
||||
local iface="$2"
|
||||
local optfile="/tmp/l2tp/options.${config}"
|
||||
local interface="$1"
|
||||
local optfile="/tmp/l2tp/options.${interface}"
|
||||
|
||||
local ip serv_addr server
|
||||
json_get_var server server && {
|
||||
for ip in $(resolveip -t 5 "$server"); do
|
||||
( proto_add_host_dependency "$config" "$ip" )
|
||||
( proto_add_host_dependency "$interface" "$ip" )
|
||||
serv_addr=1
|
||||
done
|
||||
}
|
||||
[ -n "$serv_addr" ] || {
|
||||
echo "Could not resolve server address"
|
||||
echo "Could not resolve server address" >&2
|
||||
sleep 5
|
||||
proto_setup_failed "$config"
|
||||
proto_setup_failed "$interface"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ ! -p /var/run/xl2tpd/l2tp-control ]; then
|
||||
/etc/init.d/xl2tpd start
|
||||
# Start and wait for xl2tpd
|
||||
if [ ! -p /var/run/xl2tpd/l2tp-control -o -z "$(pidof xl2tpd)" ]; then
|
||||
/etc/init.d/xl2tpd restart
|
||||
|
||||
local wait_timeout=0
|
||||
while [ ! -p /var/run/xl2tpd/l2tp-control ]; do
|
||||
wait_timeout=$(($wait_timeout + 1))
|
||||
[ "$wait_timeout" -gt 5 ] && {
|
||||
echo "Cannot find xl2tpd control file." >&2
|
||||
proto_setup_failed "$interface"
|
||||
exit 1
|
||||
}
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
|
||||
json_get_vars ipv6 demand keepalive username password pppd_options
|
||||
local ipv6 demand keepalive username password pppd_options mtu
|
||||
json_get_vars ipv6 demand keepalive username password pppd_options mtu
|
||||
[ "$ipv6" = 1 ] || ipv6=""
|
||||
if [ "${demand:-0}" -gt 0 ]; then
|
||||
demand="precompiled-active-filter /etc/ppp/filter demand idle $demand"
|
||||
@@ -51,55 +65,59 @@ proto_l2tp_setup() {
|
||||
demand="persist"
|
||||
fi
|
||||
|
||||
[ -n "$mtu" ] || json_get_var mtu mtu
|
||||
|
||||
local interval="${keepalive##*[, ]}"
|
||||
[ "$interval" != "$keepalive" ] || interval=5
|
||||
|
||||
keepalive="${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}}"
|
||||
username="${username:+user \"$username\" password \"$password\"}"
|
||||
ipv6="${ipv6:++ipv6}"
|
||||
mtu="${mtu:+mtu $mtu mru $mtu}"
|
||||
|
||||
mkdir -p /tmp/l2tp
|
||||
cat <<EOF >"$optfile"
|
||||
usepeerdns
|
||||
nodefaultroute
|
||||
ipparam "$interface"
|
||||
ifname "l2tp-$interface"
|
||||
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
|
||||
# Don't wait for LCP term responses; exit immediately when killed.
|
||||
lcp-max-terminate 0
|
||||
$keepalive
|
||||
$username
|
||||
$ipv6
|
||||
$mtu
|
||||
$pppd_options
|
||||
EOF
|
||||
|
||||
echo "${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}}" > "${optfile}"
|
||||
echo "usepeerdns" >> "${optfile}"
|
||||
echo "nodefaultroute" >> "${optfile}"
|
||||
echo "${username:+user \"$username\" password \"$password\"}" >> "${optfile}"
|
||||
echo "ipparam \"$config\"" >> "${optfile}"
|
||||
echo "ifname \"l2tp-$config\"" >> "${optfile}"
|
||||
echo "ip-up-script /lib/netifd/ppp-up" >> "${optfile}"
|
||||
echo "ipv6-up-script /lib/netifd/ppp-up" >> "${optfile}"
|
||||
echo "ip-down-script /lib/netifd/ppp-down" >> "${optfile}"
|
||||
echo "ipv6-down-script /lib/netifd/ppp-down" >> "${optfile}"
|
||||
# Don't wait for LCP term responses; exit immediately when killed.
|
||||
echo "lcp-max-terminate 0" >> "${optfile}"
|
||||
echo "${ipv6:++ipv6} ${pppd_options}" >> "${optfile}"
|
||||
echo "${mtu:+mtu $mtu mru $mtu}" >> "${optfile}"
|
||||
|
||||
xl2tpd-control add l2tp-${config} pppoptfile=${optfile} lns=${server} redial=yes redial timeout=20
|
||||
xl2tpd-control connect l2tp-${config}
|
||||
xl2tpd-control add l2tp-${interface} pppoptfile=${optfile} lns=${server} || {
|
||||
echo "xl2tpd-control: Add l2tp-$interface failed" >&2
|
||||
proto_setup_failed "$interface"
|
||||
exit 1
|
||||
}
|
||||
xl2tpd-control connect l2tp-${interface} || {
|
||||
echo "xl2tpd-control: Connect l2tp-$interface failed" >&2
|
||||
proto_setup_failed "$interface"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
proto_l2tp_teardown() {
|
||||
local interface="$1"
|
||||
local optfile="/tmp/l2tp/options.${interface}"
|
||||
|
||||
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
|
||||
|
||||
xl2tpd-control disconnect l2tp-${interface}
|
||||
rm -f ${optfile}
|
||||
if [ -p /var/run/xl2tpd/l2tp-control ]; then
|
||||
xl2tpd-control remove l2tp-${interface} || {
|
||||
echo "xl2tpd-control: Remove l2tp-$interface failed" >&2
|
||||
}
|
||||
fi
|
||||
# Wait for interface to go down
|
||||
while [ -d /sys/class/net/l2tp-${interface} ]; do
|
||||
sleep 1
|
||||
done
|
||||
|
||||
xl2tpd-control remove l2tp-${interface}
|
||||
rm -f ${optfile}
|
||||
}
|
||||
|
||||
[ -n "$INCLUDE_ONLY" ] || {
|
||||
|
||||
@@ -1,18 +1,24 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006-2010 OpenWrt.org
|
||||
# Copyright (C) 2006-2015 OpenWrt.org
|
||||
|
||||
START=60
|
||||
USE_PROCD=1
|
||||
|
||||
BIN=xl2tpd
|
||||
DEFAULT=/etc/default/$BIN
|
||||
RUN_D=/var/run
|
||||
PID_F=$RUN_D/$BIN.pid
|
||||
RUN_D="/var/run/xl2tpd"
|
||||
PID_F="/var/run/xl2tpd.pid"
|
||||
|
||||
start() {
|
||||
mkdir -p $RUN_D/$BIN
|
||||
[ -f $DEFAULT ] && . $DEFAULT
|
||||
$BIN $OPTIONS
|
||||
start_service() {
|
||||
rm -rf "$RUN_D"
|
||||
mkdir -p "$RUN_D"
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command $BIN -D -l -p "$PID_F"
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
stop() {
|
||||
[ -f $PID_F ] && kill $(cat $PID_F)
|
||||
stop_service() {
|
||||
rm -rf "$RUN_D"
|
||||
rm -rf "$PID_F"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user