--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=shadowsocks-client
+PKG_VERSION:=0.5
+PKG_RELEASE=$(PKG_SOURCE_VERSION)
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=http://github.com/zhao-gang/shadowsocks-tiny.git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=d8ef02715f40de0fb7ba0f7267d3f8260f38ba80
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_MAINTAINER:=Zhao, Gang <gang.zhao.42@gmail.com>
+
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=COPYING
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/shadowsocks-client
+ SECTION:=net
+ CATEGORY:=Network
+ SUBMENU:=Web Servers/Proxies
+ TITLE:=shadowsocks client for router
+ URL:=https://github.com/zhao-gang/shadowsocks-tiny
+ DEPENDS:=+libopenssl
+endef
+
+define Package/shadowsocks-client/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/sslocal $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_DATA) ./files/sslocal.config $(1)/etc/config/sslocal
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/sslocal.init $(1)/etc/init.d/sslocal
+endef
+
+$(eval $(call BuildPackage,shadowsocks-client))
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2012 OpenWrt.org
+# Copyright (C) 2014 Zhao, Gang <gang.zhao.42@gmail.com>
+
+START=99
+
+USE_PROCD=1
+PROG=/usr/bin/sslocal
+
+validate_section_sslocal() {
+ uci_validate_section sslocal sslocal "${1}" \
+ 'server_addr:host' \
+ 'server_port:port' \
+ 'local_addr:host' \
+ 'local_port:port' \
+ 'password:string' \
+ 'method:string' \
+ 'log_level:range(0,7):5'
+
+ return $?
+}
+
+sslocal_instance() {
+ local server_addr server_port local_addr local_port
+ local password method log_level
+
+ validate_section_sslocal "${1}" || {
+ echo "validation failed"
+ return 1
+ }
+
+ procd_open_instance
+ procd_set_param command "$PROG"
+ procd_append_param command -s "${server_addr}" -p "${server_port}"
+ procd_append_param command -u "${local_addr}" -b "${local_port}"
+ procd_append_param command -k "${password}" -m "${method}"
+ procd_append_param command -l "${log_level}"
+ procd_set_param respawn
+ procd_close_instance
+}
+
+start_service() {
+ config_load sslocal
+
+ config_foreach sslocal_instance sslocal
+}
+
+service_triggers()
+{
+ procd_add_reload_trigger "sslocal"
+ procd_add_validation validate_section_sslocal
+}