jow 4ba15eae89 net/xl2tpd: fix ppp options keep-alive and ipv6 in xl2tpd netifd script.
Fix ipv6 and keepalive ppp options in netifd proto_l2tp_setup script.

git-svn-id: svn://svn.openwrt.org/openwrt/packages@32575 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-07-02 11:59:28 +00:00

116 lines
3.0 KiB
Bash

#!/bin/sh
[ -x /usr/sbin/xl2tpd ] || exit 0
[ -n "$INCLUDE_ONLY" ] || {
. /lib/functions.sh
. ../netifd-proto.sh
init_proto "$@"
}
proto_l2tp_init_config() {
proto_config_add_string "username"
proto_config_add_string "password"
proto_config_add_string "keepalive"
proto_config_add_string "pppd_options"
proto_config_add_boolean "defaultroute"
proto_config_add_boolean "peerdns"
proto_config_add_boolean "ipv6"
proto_config_add_int "mtu"
proto_config_add_string "server"
available=1
no_device=1
}
proto_l2tp_setup() {
local config="$1"
local iface="$2"
local optfile="/tmp/l2tp/options.${config}"
local ip serv_addr server
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
}
if [ ! -p /var/run/xl2tpd/l2tp-control ]; then
/etc/init.d/xl2tpd start
fi
json_get_vars ipv6 peerdns defaultroute demand keepalive username password pppd_options
[ "$ipv6" = 1 ] || ipv6=""
[ "$peerdns" = 0 ] && peerdns="" || peerdns="1"
if [ "$defaultroute" = 1 ]; then
defaultroute="defaultroute replacedefaultroute";
else
defaultroute="nodefaultroute"
fi
if [ "${demand:-0}" -gt 0 ]; then
demand="precompiled-active-filter /etc/ppp/filter demand idle $demand"
else
demand="persist"
fi
[ -n "$mtu" ] || json_get_var mtu mtu
local interval="${keepalive##*[, ]}"
[ "$interval" != "$keepalive" ] || interval=5
mkdir -p /tmp/l2tp
echo "${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}}" > "${optfile}"
echo "${peerdns:+usepeerdns}" >> "${optfile}"
echo "$defaultroute" >> "${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}
}
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}
# 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" ] || {
add_protocol l2tp
}