Revert "l2tpv3tun: moved to github"
Revert "l2tpv3tun: moved to github"

This reverts commit 34f180ea2463ec69af975faa8bcf9d011cf42c6a.

git-svn-id: svn://svn.openwrt.org/openwrt/packages@41785 3c298f89-4303-0410-b956-a3cf2f4a3e73

--- /dev/null
+++ b/net/l2tpv3tun/Makefile
@@ -1,1 +1,51 @@
+#
+# Copyright (C) 2009-2010 Thomas Heil <heil@terminal-consulting.de>
+# Copyright (C) 2010-2011 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
 
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=l2tpv3tun
+PKG_VERSION:=0.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=ftp://www.openl2tp.org/releases
+PKG_MD5SUM:=d3b4a9af652cca9f34d3eea4a7ff6041
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/kernel.mk
+include $(INCLUDE_DIR)/package.mk
+
+define Package/l2tpv3tun
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libnl-tiny +ip +kmod-l2tp +kmod-l2tp-ip +kmod-l2tp-eth
+  TITLE:=Control utility for static L2TP v3 (Pseudowire) tunnels
+  MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
+  URL:=http://www.openl2tp.org
+endef
+
+define Package/l2tpv3tun/description
+  The l2tpv3tun utility is a command line frontend for configuring static
+  L2TP v3 pseudowire tunnels.
+endef
+
+MAKE_FLAGS += \
+	CC="$(TARGET_CC)" \
+	CFLAGS="$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/usr/include/libnl-tiny/" \
+	LD="$(TARGET_CC)" \
+	LDFLAGS="$(TARGET_LDFLAGS) -L$(STAGING_DIR)/usr/lib/ -lnl-tiny"
+
+define Package/l2tpv3tun/install
+	$(INSTALL_DIR) $(1)/usr/bin
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/l2tpv3tun $(1)/usr/bin/
+	$(INSTALL_DIR) $(1)/lib/network
+	$(INSTALL_BIN) ./files/l2tp.sh $(1)/lib/network/
+endef
+
+$(eval $(call BuildPackage,l2tpv3tun))
+

--- /dev/null
+++ b/net/l2tpv3tun/files/l2tp.sh
@@ -1,1 +1,214 @@
-
+# l2tp.sh - L2TPv3 tunnel backend
+# Copyright (c) 2010 OpenWrt.org
+
+l2tp_next_tunnel_id() {
+	local max=0
+	local val
+	for val in $(
+		local l
+		l2tpv3tun show tunnel | while read l; do
+			case "$l" in
+				Tunnel*,*encap*) l="${l#Tunnel }"; echo "${l%%,*}";;
+			esac
+		done
+	); do
+		[ "$val" -gt "$max" ] && max="$val"
+	done
+	echo $((max + 1))
+}
+
+l2tp_next_session_id() {
+	local tunnel="$1"
+	local max=0
+	local val
+	for val in $(
+		local l
+		l2tpv3tun show session${tunnel:+ tunnel_id "$tunnel"} | while read l; do
+			case "$l" in
+				Session*in*) l="${l#Session }"; echo "${l%% *}";;
+			esac
+		done
+	); do
+		[ "$val" -gt "$max" ] && max="$val"
+	done
+	echo $((max + 1))
+}
+
+l2tp_tunnel_exists() {
+	test -n "$(l2tpv3tun show tunnel tunnel_id "$1" 2>/dev/null)"
+}
+
+l2tp_session_exists() {
+	test -n "$(l2tpv3tun show session tunnel_id "$1" session_id "$2" 2>/dev/null)"
+}
+
+l2tp_ifname() {
+	l2tpv3tun show session tunnel_id "$1" session_id "$2" 2>/dev/null | \
+		sed -ne 's/^.*interface name: //p'
+}
+
+l2tp_lock() {
+	lock /var/lock/l2tp-setup
+}
+
+l2tp_unlock() {
+	lock -u /var/lock/l2tp-setup
+}
+
+l2tp_log() {
+	logger -t "ifup-l2tp" "$@"
+}
+
+
+# Hook into scan_interfaces() to synthesize a .device option
+# This is needed for /sbin/ifup to properly dispatch control
+# to setup_interface_l2tp() even if no .ifname is set in
+# the configuration.
+scan_l2tp() {
+	local dev
+	config_get dev "$1" device
+	config_set "$1" device "${dev:+$dev }l2tp-$1"
+}
+
+coldplug_interface_l2tp() {
+	setup_interface_l2tp "l2tp-$1" "$1"
+}
+
+setup_interface_l2tp() {
+	local iface="$1"
+	local cfg="$2"
+	local link="l2tp-$cfg"
+
+	l2tp_lock
+
+	# prevent recursion
+	local up="$(uci_get_state network "$cfg" up 0)"
+	[ "$up" = 0 ] || {
+		l2tp_unlock
+		return 0
+	}
+
+	local tunnel_id
+	config_get tunnel_id "$cfg" tunnel_id
+	[ -n "$tunnel_id" ] || {
+		tunnel_id="$(l2tp_next_tunnel_id)"
+		uci_set_state network "$cfg" tunnel_id "$tunnel_id"
+		l2tp_log "No tunnel ID specified, assuming $tunnel_id"
+	}
+
+	local peer_tunnel_id
+	config_get peer_tunnel_id "$cfg" peer_tunnel_id
+	[ -n "$peer_tunnel_id" ] || {
+		peer_tunnel_id="$tunnel_id"
+		uci_set_state network "$cfg" peer_tunnel_id "$peer_tunnel_id"
+		l2tp_log "No peer tunnel ID specified, assuming $peer_tunnel_id"
+	}
+
+	local encap
+	config_get encap "$cfg" encap udp
+
+	local sport dport
+	[ "$encap" = udp ] && {
+		config_get sport "$cfg" sport 1701
+		config_get dport "$cfg" dport 1701
+	}
+
+	local peeraddr
+	config_get peeraddr "$cfg" peeraddr
+	[ -z "$peeraddr" ] && config_get peeraddr "$cfg" peer6addr
+
+	local localaddr
+	case "$peeraddr" in
+		*:*) config_get localaddr "$cfg" local6addr ;;
+		*)   config_get localaddr "$cfg" localaddr  ;;
+	esac
+
+	[ -n "$localaddr" -a -n "$peeraddr" ] || {
+		l2tp_log "Missing local or peer address for tunnel $cfg - skipping"
+		return 1
+	}
+
+	(
+		while ! l2tp_tunnel_exists "$tunnel_id"; do
+			[ -n "$sport" ] && l2tpv3tun show tunnel 2>/dev/null | grep -q "ports: $sport/" && {
+				l2tp_log "There already is a tunnel with src port $sport - skipping"
+				l2tp_unlock
+				return 1
+			}
+
+			l2tpv3tun add tunnel tunnel_id "$tunnel_id" peer_tunnel_id "$peer_tunnel_id" \
+				encap "$encap" local "$localaddr" remote "$peeraddr" \
+				${sport:+udp_sport "$sport"} ${dport:+udp_dport "$dport"}
+
+			# Wait for tunnel
+			sleep 1
+		done
+
+
+		local session_id
+		config_get session_id "$cfg" session_id
+		[ -n "$session_id" ] || {
+			session_id="$(l2tp_next_session_id "$tunnel_id")"
+			uci_set_state network "$cfg" session_id "$session_id"
+			l2tp_log "No session ID specified, assuming $session_id"
+		}
+
+		local peer_session_id
+		config_get peer_session_id "$cfg" peer_session_id
+		[ -n "$peer_session_id" ] || {
+			peer_session_id="$session_id"
+			uci_set_state network "$cfg" peer_session_id "$peer_session_id"
+			l2tp_log "No peer session ID specified, assuming $peer_session_id"
+		}
+
+
+		while ! l2tp_session_exists "$tunnel_id" "$session_id"; do
+			l2tpv3tun add session ifname "$link" tunnel_id "$tunnel_id" \
+				session_id "$session_id" peer_session_id "$peer_session_id"
+
+			# Wait for session
+			sleep 1
+		done
+
+
+		local dev
+		config_get dev "$cfg" device
+
+		local ifn
+		config_get ifn "$cfg" ifname
+
+		uci_set_state network "$cfg" ifname "${ifn:-$dev}"
+		uci_set_state network "$cfg" device "$dev"
+
+		local mtu
+		config_get mtu "$cfg" mtu 1462
+
+		local ttl
+		config_get ttl "$cfg" ttl
+
+		ip link set mtu "$mtu" ${ttl:+ ttl "$ttl"} dev "$link"
+
+		# IP setup inherited from proto static
+		prepare_interface "$link" "$cfg"
+		setup_interface_static "${ifn:-$dev}" "$cfg"
+
+		ip link set up dev "$link"
+
+		uci_set_state network "$cfg" up 1
+		l2tp_unlock
+	) &
+}
+
+stop_interface_l2tp() {
+	local cfg="$1"
+	local link="l2tp-$cfg"
+
+	local tunnel=$(uci_get_state network "$cfg" tunnel_id)
+	local session=$(uci_get_state network "$cfg" session_id)
+
+	[ -n "$tunnel" ] && [ -n "$session" ] && {
+		l2tpv3tun del session tunnel_id "$tunnel" session_id "$session"
+		l2tpv3tun del tunnel tunnel_id "$tunnel"
+	}
+}
+

--- /dev/null
+++ b/net/l2tpv3tun/patches/010-custom_ifname.patch
@@ -1,1 +1,21 @@
+--- a/main.c
++++ b/main.c
+@@ -560,6 +560,7 @@ static void usage(void)
+ 	fprintf(stderr, "          session_id ID peer_session_id ID\n");
+ 	fprintf(stderr, "          [ cookie HEXSTR ] [ peer_cookie HEXSTR ]\n");
+ 	fprintf(stderr, "          [ offset OFFSET ] [ peer_offset OFFSET ]\n");
++	fprintf(stderr, "          [ ifname IFNAME ]\n");
+ 	fprintf(stderr, "       %s del tunnel tunnel_id ID\n", L2TP_CMD_ROOT);
+ 	fprintf(stderr, "       %s del session tunnel_id ID session_id ID\n", L2TP_CMD_ROOT);
+ 	fprintf(stderr, "       %s show tunnel [ tunnel_id ID ]\n", L2TP_CMD_ROOT);
+@@ -671,6 +672,9 @@ static int parse_args(int argc, char **a
+ 			p->peer_cookie_len = slen / 2;
+ 			if (hex2mem(*argv, p->peer_cookie, p->peer_cookie_len) < 0)
+ 				invarg("cookie must be a hex string\n", *argv);
++		} else if (strcmp(*argv, "ifname") == 0) {
++			NEXT_ARG();
++			p->ifname = *argv;
+ 		} else if (strcmp(*argv, "tunnel") == 0) {
+ 			p->tunnel = 1;
+ 		} else if (strcmp(*argv, "session") == 0) {
 

--- /dev/null
+++ b/net/l2tpv3tun/patches/100-nl_handle_alloc.patch
@@ -1,1 +1,24 @@
+--- a/main.c
++++ b/main.c
+@@ -100,7 +100,7 @@ struct l2tp_data {
+ };
+ 
+ /* netlink socket */
+-static struct nl_handle *nl_sock;
++static struct nl_sock *nl_sock;
+ static int nl_family;
+ 
+ /*****************************************************************************
+@@ -788,9 +788,9 @@ static int do_show(int argc, char **argv
+ 
+ int do_ipl2tp(int argc, char **argv)
+ {
+-	nl_sock = nl_handle_alloc();
++	nl_sock = nl_socket_alloc();
+ 	if (!nl_sock) {
+-		perror("nl_handle_alloc");
++		perror("nl_socket_alloc");
+ 		return 1;
+ 	}
+ 
 

file:a/utils/ccrypt/Makefile (deleted)
--- a/utils/ccrypt/Makefile
+++ /dev/null
@@ -1,38 +1,1 @@
-#
-# Copyright (C) 2009-2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
 
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=ccrypt
-PKG_VERSION:=1.10
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@SF/ccrypt
-PKG_MD5SUM:=44ddd763465c254df83f5d38851d04d7
-
-PKG_FIXUP:=autoreconf
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/ccrypt
-  SECTION:=utils
-  CATEGORY:=Utilities
-  TITLE:=ccrypt is a utility for encrypting and decrypting files and streams
-  URL:=http://ccrypt.sourceforge.net/
-endef
-
-define Package/ccrypt/install
-	$(INSTALL_DIR) $(1)/usr/bin
-	$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ccrypt $(1)/usr/bin/
-	ln -s ccrypt $(1)/usr/bin/ccencrypt
-	ln -s ccrypt $(1)/usr/bin/ccdecrypt
-	ln -s ccrypt $(1)/usr/bin/ccat
-endef
-
-$(eval $(call BuildPackage,ccrypt))
-

--- a/utils/ccrypt/patches/001-no-intl.patch
+++ /dev/null
@@ -1,90 +1,1 @@
---- a/configure.ac
-+++ b/configure.ac
-@@ -123,17 +123,6 @@ AC_MSG_RESULT($UINT32_TYPE)
- AC_DEFINE_UNQUOTED(UINT32_TYPE,$UINT32_TYPE,unsigned 32 bit integer type)
- 
- dnl ----------------------------------------------------------------------
--dnl Internationalization
--
--GETTEXT_PACKAGE=ccrypt
--AC_SUBST(GETTEXT_PACKAGE)
--AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Package name for gettext])
--
--AM_GNU_GETTEXT
--AM_GNU_GETTEXT_VERSION([0.14.3])
--IT_PO_SUBDIR(po)
--
--dnl ----------------------------------------------------------------------
- dnl Libtool (needed by intl/)
- 
- LT_INIT
-@@ -153,9 +142,7 @@ AC_SUBST(TAR)
- dnl ----------------------------------------------------------------------
- AC_CONFIG_FILES([doc/ccrypt.1
- 	   doc/ccguess.1
--	   po/Makefile.in 
- 	   m4/Makefile 
--	   intl/Makefile 
- 	   Makefile 
- 	   src/Makefile 
- 	   emacs/Makefile
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -4,7 +4,7 @@
- 
- ## Process this file with automake to produce Makefile.in
- 
--SUBDIRS = m4 po intl src emacs doc check
-+SUBDIRS = m4 src emacs doc check
- 
- EXTRA_DIST = m4/ChangeLog config.rpath README-WIN
- 
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -36,7 +36,7 @@ host_triplet = @host@
- subdir = .
- DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
- 	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
--	$(top_srcdir)/configure $(top_srcdir)/intl/Makefile.in \
-+	$(top_srcdir)/configure \
- 	ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS config.guess \
- 	config.rpath config.sub depcomp elisp-comp install-sh \
- 	ltmain.sh missing mkinstalldirs
-@@ -66,7 +66,7 @@ am__CONFIG_DISTCLEAN_FILES = config.stat
-  configure.lineno config.status.lineno
- mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
- CONFIG_HEADER = config.h
--CONFIG_CLEAN_FILES = intl/Makefile
-+CONFIG_CLEAN_FILES =
- CONFIG_CLEAN_VPATH_FILES =
- SOURCES =
- DIST_SOURCES =
-@@ -277,7 +277,7 @@ target_alias = @target_alias@
- top_build_prefix = @top_build_prefix@
- top_builddir = @top_builddir@
- top_srcdir = @top_srcdir@
--SUBDIRS = m4 po intl src emacs doc check
-+SUBDIRS = m4 src emacs doc check
- EXTRA_DIST = m4/ChangeLog config.rpath README-WIN
- ACLOCAL_AMFLAGS = -I m4
- all: config.h
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -56,4 +56,4 @@ uninstall-local:
- # internationalization stuff
- localedir = $(datadir)/locale
- INCLUDES = -I../intl -I$(top_srcdir)/intl -DLOCALEDIR=\"$(localedir)\"
--LIBS = @LIBINTL@ @LIBS@
-+LIBS = @LIBS@
---- a/src/Makefile.in
-+++ b/src/Makefile.in
-@@ -159,7 +159,7 @@ LDFLAGS = @LDFLAGS@
- LIBICONV = @LIBICONV@
- LIBINTL = @LIBINTL@
- LIBOBJS = @LIBOBJS@
--LIBS = @LIBINTL@ @LIBS@
-+LIBS = @LIBS@
- LIBTOOL = @LIBTOOL@
- LIPO = @LIPO@
- LN_S = @LN_S@
 

comments