tunneldigger: add package for establishing L2TPv3 tunnels over UDP
In the previous commit we already added tunneldigger-broker. Add the corresponding client. This PR is just a refactoring of the already existing opkg package from wlanslovenija [0]. [0] - https://github.com/wlanslovenija/firmware-packages-opkg/tree/master/net/tunneldigger Signed-off-by: Nick Hainke <vincent@systemli.org>
This commit is contained in:
parent
8298ce8234
commit
bd2b4f311a
3 changed files with 132 additions and 0 deletions
57
net/tunneldigger/Makefile
Normal file
57
net/tunneldigger/Makefile
Normal file
|
@ -0,0 +1,57 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=tunneldigger
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/wlanslovenija/tunneldigger.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=4f72b30578ac3dbc5482f4a54054bf870355bdf5
|
||||
PKG_MIRROR_HASH:=babc71c757b757026f63e298bd4bd0edceae220827fff5cfad0af3f04ed529c7
|
||||
|
||||
PKG_MAINTAINER:=Nick Hainke <vincent@systemli.org>
|
||||
PKG_LICENSE:=AGPL-3.0
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
CMAKE_SOURCE_SUBDIR:=client
|
||||
|
||||
define Package/tunneldigger
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:= \
|
||||
+kmod-l2tp \
|
||||
+kmod-l2tp-ip \
|
||||
+kmod-l2tp-eth \
|
||||
+libnl-tiny \
|
||||
+libpthread \
|
||||
+librt
|
||||
TITLE:=L2TPv3 tunneling via UDP
|
||||
URL:=https://github.com/wlanslovenija/tunneldigger
|
||||
endef
|
||||
|
||||
TARGET_CFLAGS += \
|
||||
-I$(STAGING_DIR)/usr/include/libnl-tiny \
|
||||
-I$(STAGING_DIR)/usr/include \
|
||||
-DLIBNL_TINY
|
||||
|
||||
define Package/tunneldigger/description
|
||||
Tunneldigger is a simple VPN tunneling solution based on the Linux kernel
|
||||
support for L2TPv3 tunnels over UDP.
|
||||
endef
|
||||
|
||||
define Package/tunneldigger/conffiles
|
||||
/etc/config/tunneldigger
|
||||
endef
|
||||
|
||||
define Package/tunneldigger/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tunneldigger $(1)/usr/bin/tunneldigger
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/tunneldigger.init $(1)/etc/init.d/tunneldigger
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/config.default $(1)/etc/config/tunneldigger
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,tunneldigger))
|
8
net/tunneldigger/files/config.default
Normal file
8
net/tunneldigger/files/config.default
Normal file
|
@ -0,0 +1,8 @@
|
|||
config broker
|
||||
list address 'x.y.z.w:8942'
|
||||
list address 'x.y.z.w:53'
|
||||
list address 'x.y.z.w:123'
|
||||
option uuid 'abcd'
|
||||
option interface 'l2tp0'
|
||||
option limit_bw_down '1024'
|
||||
option enabled '0'
|
67
net/tunneldigger/files/tunneldigger.init
Normal file
67
net/tunneldigger/files/tunneldigger.init
Normal file
|
@ -0,0 +1,67 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
|
||||
. $IPKG_INSTROOT/lib/functions/network.sh
|
||||
|
||||
USE_PROCD=1
|
||||
START=90
|
||||
|
||||
tunnel_id=1
|
||||
|
||||
missing() {
|
||||
echo "Not starting tunneldigger - missing $1" >&2
|
||||
}
|
||||
|
||||
parse_broker() {
|
||||
local section="$1"
|
||||
|
||||
config_get_bool enabled "$section" enabled 1
|
||||
config_get addresses "$section" address
|
||||
config_get uuid "$section" uuid
|
||||
config_get interface "$section" interface
|
||||
config_get limit_bw_down "$section" limit_bw_down
|
||||
config_get hook_script "$section" hook_script
|
||||
config_get bind_interface "$section" bind_interface
|
||||
|
||||
[ $enabled -eq 0 ] && return
|
||||
|
||||
local broker_opts=""
|
||||
for address in $addresses; do
|
||||
append broker_opts "-b ${address}"
|
||||
done
|
||||
|
||||
[ ! -z "${limit_bw_down}" ] && append broker_opts "-L ${limit_bw_down}"
|
||||
[ ! -z "${hook_script}" ] && append broker_opts "-s ${hook_script}"
|
||||
[ ! -z "${bind_interface}" ] && {
|
||||
# Resolve logical interface name.
|
||||
unset _bind_interface
|
||||
network_get_device _bind_interface "${bind_interface}" || _bind_interface="${bind_interface}"
|
||||
append broker_opts "-I ${_bind_interface}"
|
||||
}
|
||||
|
||||
if [ -z "$uuid" ]; then
|
||||
missing uuid
|
||||
return
|
||||
elif [ -z "$interface" ]; then
|
||||
missing interface
|
||||
return
|
||||
fi
|
||||
|
||||
procd_open_instance "tunneldigger_${tunnel_id}"
|
||||
procd_set_param command "/usr/bin/tunneldigger"
|
||||
procd_append_param command -f
|
||||
procd_append_param command -u "${uuid}"
|
||||
procd_append_param command -i "${interface}"
|
||||
procd_append_param command -t "${tunnel_id}"
|
||||
procd_append_param command ${broker_opts}
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
|
||||
let tunnel_id++
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load tunneldigger
|
||||
config_foreach parse_broker broker
|
||||
}
|
Loading…
Reference in a new issue