kcptun: add new package 9660/head
authorDengfeng Liu <liudf0716@gmail.com>
Mon, 5 Aug 2019 12:10:04 +0000 (20:10 +0800)
committerDengfeng Liu <liudf0716@gmail.com>
Thu, 8 Aug 2019 01:19:08 +0000 (09:19 +0800)
kcptun is a stable & secure tunnel based on kcp with N:M multiplexing.
https://github.com/xtaci/kcptun

Signed-off-by: Dengfeng Liu <liudf0716@gmail.com>
net/kcptun/Makefile [new file with mode: 0644]
net/kcptun/files/kcptun-c.conf [new file with mode: 0644]
net/kcptun/files/kcptun-c.init [new file with mode: 0644]
net/kcptun/files/kcptun-s.conf [new file with mode: 0644]
net/kcptun/files/kcptun-s.init [new file with mode: 0644]

diff --git a/net/kcptun/Makefile b/net/kcptun/Makefile
new file mode 100644 (file)
index 0000000..b39a112
--- /dev/null
@@ -0,0 +1,74 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=kcptun
+PKG_VERSION:=20190725
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/xtaci/kcptun/tar.gz/v${PKG_VERSION}?
+PKG_HASH:=65c0d0d4f7e3bb3c3b91e23ff2eb6621455d6d376a4f17e6fb2017337ce711c1
+
+PKG_MAINTAINER:=Dengfeng Liu <liudf0716@gmail.com>
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_DEPENDS:=golang/host
+PKG_BUILD_PARALLEL:=1
+PKG_USE_MIPS16:=0
+
+GO_PKG:=github.com/xtaci/kcptun
+
+include $(INCLUDE_DIR)/package.mk
+include ../../lang/golang/golang-package.mk
+
+define Package/kcptun/template
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Web Servers/Proxies
+  TITLE:=KCP-based Secure Tunnel 
+  URL:=https://github.com/xtaci/kcptun
+  DEPENDS:=$(GO_ARCH_DEPENDS)
+endef
+
+define Package/kcptun-c
+  $(call Package/kcptun/template)
+  TITLE+= (client)
+endef
+
+define Package/kcptun-s
+  $(call Package/kcptun/template)
+  TITLE+= (server)
+endef
+
+define Package/kcptun/description
+  kcptun is a Stable & Secure Tunnel Based On KCP with N:M Multiplexing
+endef
+Package/kcptun-c/description = $(Package/kcptun/description)
+Package/kcptun-s/description = $(Package/kcptun/description)
+
+GO_PKG_LDFLAGS_X:=main.VERSION=$(PKG_VERSION)
+GO_PKG_LDFLAGS:=-s -w
+
+define Package/kcptun/install
+       $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
+
+       $(INSTALL_DIR) $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(2) $(1)/usr/bin/$(3)
+       $(INSTALL_DIR) $(1)/etc/config/
+       $(INSTALL_CONF) ./files/$(3).conf $(1)/etc/config/$(3)
+       $(INSTALL_DIR) $(1)/etc/init.d/
+       $(INSTALL_BIN) ./files/$(3).init $(1)/etc/init.d/$(3)
+endef
+
+define Package/kcptun-c/install
+  $(call Package/kcptun/install,$(1),client,kcptun-c)
+endef
+
+define Package/kcptun-s/install
+  $(call Package/kcptun/install,$(1),server,kcptun-s)
+endef
+
+$(eval $(call GoBinPackage,kcptun-c))
+$(eval $(call BuildPackage,kcptun-c))
+$(eval $(call GoBinPackage,kcptun-s))
+$(eval $(call BuildPackage,kcptun-s))
diff --git a/net/kcptun/files/kcptun-c.conf b/net/kcptun/files/kcptun-c.conf
new file mode 100644 (file)
index 0000000..adef9e3
--- /dev/null
@@ -0,0 +1,9 @@
+config kcptun
+       option local_port 12948 # this port should be your service port
+       option remote_ip 'your vps ip'
+       option remote_port 29900 
+       option mode 'fast'
+       option nocomp 1
+       option sndwnd 128
+       option rcvwnd 512
+       option disabled 1 # set 0 to enable it
diff --git a/net/kcptun/files/kcptun-c.init b/net/kcptun/files/kcptun-c.init
new file mode 100644 (file)
index 0000000..653d8d8
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2019 Dengfeng Liu
+
+START=99
+
+USE_PROCD=1
+NAME=kcptun-c
+PROG=/usr/bin/${NAME}
+
+validate_section_kcptun() 
+{
+       uci_load_validate "${NAME}" kcptun "$1" "$2" \
+               'local_port:port' \
+               'remote_ip:string' \
+               'remote_port:port' \
+               'mode:string' \
+               'nocomp:bool' \
+               'sndwnd:uinteger' \
+               'rcvwnd:uinteger' \
+               'disabled:bool'
+}
+
+kcptun_instance() 
+{
+       [ "$2" = 0 ] || {
+               echo "validation failed"
+               return 1
+       }
+
+       [ "${disabled}" = "1" ] && return 1
+
+       [ "${local_port}" -gt 0 ] && [ "${local_port}" -lt 65536 ] || return 1
+
+       [ "${remote_port}" -gt 0 ] && [ "${remote_port}" -lt 65536 ] || return 1
+
+       [ -n "${remote_ip}" ] || {
+               return 1
+       }
+
+       procd_open_instance
+       procd_set_param command "${PROG}"
+       procd_append_param command --localaddr ":${local_port}"
+       procd_append_param command --remoteaddr "${remote_ip}:${remote_port}"
+       [ -n "${mode}" ] && procd_append_param command --mode "${mode}"
+       [ "${nocomp}" -eq 1 ] && procd_append_param command --nocomp
+       [ "${sndwnd}" -gt 0 ] && procd_append_param command --sndwnd "${sndwnd}"
+       [ "${rcvwnd}" -gt 0 ] && procd_append_param command --rcvwnd "${rcvwnd}"
+       procd_set_param respawn
+       procd_close_instance
+}
+
+start_service() 
+{
+       config_load "${NAME}"
+       config_foreach validate_section_kcptun kcptun kcptun_instance
+}
diff --git a/net/kcptun/files/kcptun-s.conf b/net/kcptun/files/kcptun-s.conf
new file mode 100644 (file)
index 0000000..3537f64
--- /dev/null
@@ -0,0 +1,9 @@
+config kcptun
+       option local_port 29900
+       option target_ip '127.0.0.1'
+       option target_port 12948 # this port should be your service port
+       option mode 'fast'
+       option nocomp 1
+       option sndwnd 1024
+       option rcvwnd 1024
+       option disabled 1 # set 0 to enable it
diff --git a/net/kcptun/files/kcptun-s.init b/net/kcptun/files/kcptun-s.init
new file mode 100644 (file)
index 0000000..cfcb81a
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2019 Dengfeng Liu
+
+START=99
+
+USE_PROCD=1
+NAME=kcptun-s
+PROG=/usr/bin/${NAME}
+
+validate_section_kcptun() 
+{
+       uci_load_validate "${NAME}" kcptun "$1" "$2" \
+               'local_port:port' \
+               'target_ip:string' \
+               'target_port:port' \
+               'mode:string' \
+               'nocomp:bool' \
+               'sndwnd:uinteger' \
+               'rcvwnd:uinteger' \
+               'disabled:bool'
+}
+
+kcptun_instance() 
+{
+       [ "$2" = 0 ] || {
+               echo "validation failed"
+               return 1
+       }
+
+       [ "${disabled}" = "1" ] && return 1
+
+       [ "${local_port}" -gt 0 ] && [ "${local_port}" -lt 65536 ] || return 1
+
+       [ "${target_port}" -gt 0 ] && [ "${target_port}" -lt 65536 ] || return 1
+       
+       [ -n "${target_ip}" ] || {
+               return 1
+       }
+
+       procd_open_instance
+       procd_set_param command "${PROG}"
+       procd_append_param command --listen ":${local_port}"
+       procd_append_param command --target "${target_ip}:${target_port}"
+       [ -n "${mode}" ] && procd_append_param command --mode "${mode}"
+       [ "${nocomp}" -eq 1 ] && procd_append_param command --nocomp
+       [ "${sndwnd}" -gt 0 ] && procd_append_param command --sndwnd "${sndwnd}"
+       [ "${rcvwnd}" -gt 0 ] && procd_append_param command --rcvwnd "${rcvwnd}"
+       procd_set_param respawn
+       procd_close_instance
+}
+
+start_service() 
+{
+       config_load "${NAME}"
+       config_foreach validate_section_kcptun kcptun kcptun_instance
+}