From 77e4444a275dddd3034eac06f9049a43b9f1ba5d Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Thu, 17 Sep 2015 17:40:59 +0800 Subject: [PATCH] xl2tpd: fix by backporting the version from master branch Signed-off-by: Yousong Zhou --- net/xl2tpd/Makefile | 37 +++++-- net/xl2tpd/files/l2tp.sh | 104 ++++++++++-------- net/xl2tpd/files/xl2tpd.init | 26 +++-- .../patches/100-makefile_opt_flags.patch | 2 +- .../patches/110-makefile_dont_build_pfc.patch | 6 +- .../patches/120-no-bsd-signal-in-musl.patch | 6 +- 6 files changed, 110 insertions(+), 71 deletions(-) diff --git a/net/xl2tpd/Makefile b/net/xl2tpd/Makefile index 2a1c4a5df..f46cec615 100644 --- a/net/xl2tpd/Makefile +++ b/net/xl2tpd/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006-2014 OpenWrt.org +# Copyright (C) 2006-2015 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -8,18 +8,16 @@ include $(TOPDIR)/rules.mk PKG_NAME:=xl2tpd -PKG_VERSION:=1.3.6 +PKG_VERSION:=devel-20150812 PKG_RELEASE:=1 -PKG_MAINTAINER:=Daniel Golle +PKG_MAINTAINER:=Yousong Zhou PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=LICENSE -PKG_RELEASE=$(PKG_SOURCE_VERSION) - PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/xelerance/xl2tpd.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=5619e1771048e74b729804e8602f409af0f3faea +PKG_SOURCE_VERSION:=5674a5835e9b89b7438917a380f3a6d68528fa3e PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_INSTALL:=1 @@ -32,7 +30,7 @@ define Package/xl2tpd TITLE:=An L2TP (Layer 2 Tunneling Protocol) daemon URL:=http://www.xelerance.com/software/xl2tpd/ SUBMENU:=VPN - DEPENDS:=+ppp-mod-pppol2tp +ip +resolveip + DEPENDS:=+ppp-mod-pppol2tp +resolveip endef define Package/xl2tpd/description @@ -41,9 +39,28 @@ It does implement both LAC and LNS role in a L2TP networking architecture. The main goal of this protocol is to tunnel PPP frame trough an IP network. endef -# XXX: CFLAGS are already set by Build/Compile/Default -MAKE_FLAGS+= \ - OFLAGS="" +# Use optimization options from OpenWrt build system +MAKE_FLAGS += OFLAGS="" + +ifneq (0,0) + # debugging options from Makefile of xl2tpd package + EXTRA_CFLAGS += \ + -DDEBUG_ZLB \ + -DDEBUG_HELLO \ + -DDEBUG_CLOSE \ + -DDEBUG_FLOW \ + -DDEBUG_FILE \ + -DDEBUG_AAA \ + -DDEBUG_PAYLOAD \ + -DDEBUG_CONTROL \ + -DDEBUG_PPPD \ + -DDEBUG_HIDDEN \ + -DDEBUG_ENTROPY \ + -DDEBUG_CONTROL_XMIT \ + -DDEBUG_MAGIC \ + -DDEBUG_FLOW_MORE \ + -DDEBUG_AUTH +endif define Package/xl2tpd/conffiles /etc/xl2tpd/xl2tpd.conf diff --git a/net/xl2tpd/files/l2tp.sh b/net/xl2tpd/files/l2tp.sh index 867234dbe..8a931adf9 100644 --- a/net/xl2tpd/files/l2tp.sh +++ b/net/xl2tpd/files/l2tp.sh @@ -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 <"$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" ] || { diff --git a/net/xl2tpd/files/xl2tpd.init b/net/xl2tpd/files/xl2tpd.init index 22e845901..7d2e9ea30 100644 --- a/net/xl2tpd/files/xl2tpd.init +++ b/net/xl2tpd/files/xl2tpd.init @@ -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" } diff --git a/net/xl2tpd/patches/100-makefile_opt_flags.patch b/net/xl2tpd/patches/100-makefile_opt_flags.patch index 82e875d70..1af416f96 100644 --- a/net/xl2tpd/patches/100-makefile_opt_flags.patch +++ b/net/xl2tpd/patches/100-makefile_opt_flags.patch @@ -1,6 +1,6 @@ --- a/Makefile +++ b/Makefile -@@ -91,7 +91,8 @@ OSFLAGS+= -DUSE_KERNEL +@@ -97,7 +97,8 @@ OSFLAGS+= -DUSE_KERNEL IPFLAGS?= -DIP_ALLOCATION diff --git a/net/xl2tpd/patches/110-makefile_dont_build_pfc.patch b/net/xl2tpd/patches/110-makefile_dont_build_pfc.patch index 460a0f15d..f76364fa8 100644 --- a/net/xl2tpd/patches/110-makefile_dont_build_pfc.patch +++ b/net/xl2tpd/patches/110-makefile_dont_build_pfc.patch @@ -1,6 +1,6 @@ --- a/Makefile +++ b/Makefile -@@ -107,10 +107,10 @@ BINDIR?=$(DESTDIR)${PREFIX}/bin +@@ -113,10 +113,10 @@ BINDIR?=$(DESTDIR)${PREFIX}/bin MANDIR?=$(DESTDIR)${PREFIX}/share/man @@ -13,7 +13,7 @@ $(EXEC): $(OBJS) $(HDRS) $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS) -@@ -118,14 +118,10 @@ $(EXEC): $(OBJS) $(HDRS) +@@ -124,14 +124,10 @@ $(EXEC): $(OBJS) $(HDRS) $(CONTROL_EXEC): $(CONTROL_SRCS) $(CC) $(CFLAGS) $(LDFLAGS) $(CONTROL_SRCS) -o $@ @@ -29,7 +29,7 @@ install -d -m 0755 ${SBINDIR} install -m 0755 $(EXEC) ${SBINDIR}/$(EXEC) install -d -m 0755 ${MANDIR}/man5 -@@ -133,11 +129,6 @@ install: ${EXEC} pfc ${CONTROL_EXEC} +@@ -139,11 +135,6 @@ install: ${EXEC} pfc ${CONTROL_EXEC} install -m 0644 doc/xl2tpd.8 ${MANDIR}/man8/ install -m 0644 doc/xl2tpd.conf.5 doc/l2tp-secrets.5 \ ${MANDIR}/man5/ diff --git a/net/xl2tpd/patches/120-no-bsd-signal-in-musl.patch b/net/xl2tpd/patches/120-no-bsd-signal-in-musl.patch index dba544c0e..c8c4a7dd6 100644 --- a/net/xl2tpd/patches/120-no-bsd-signal-in-musl.patch +++ b/net/xl2tpd/patches/120-no-bsd-signal-in-musl.patch @@ -1,7 +1,5 @@ -Index: xl2tpd-1.3.6/xl2tpd.c -=================================================================== ---- xl2tpd-1.3.6.orig/xl2tpd.c -+++ xl2tpd-1.3.6/xl2tpd.c +--- a/xl2tpd.c ++++ b/xl2tpd.c @@ -30,7 +30,7 @@ #include #include