diff --git a/net/shadowsocks/Makefile b/net/shadowsocks/Makefile
index f9df9fb16..058651e22 100644
--- a/net/shadowsocks/Makefile
+++ b/net/shadowsocks/Makefile
@@ -1,5 +1,5 @@
PLUGIN_NAME= shadowsocks
-PLUGIN_VERSION= 0.1
+PLUGIN_VERSION= 0.2
PLUGIN_COMMENT= Secure socks5 proxy
PLUGIN_DEPENDS= shadowsocks-libev
PLUGIN_MAINTAINER= m.muenz@gmail.com
diff --git a/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc b/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc
index 29e537173..7ec60468e 100644
--- a/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc
+++ b/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc
@@ -45,5 +45,18 @@ function shadowsocks_services()
);
}
+ if (isset($config['OPNsense']['shadowsocks']['local']['enabled']) && $config['OPNsense']['shadowsocks']['local']['enabled'] == 1) {
+ $services[] = array(
+ 'description' => gettext('shadowsockslocal daemon'),
+ 'configd' => array(
+ 'restart' => array('shadowsockslocal restart'),
+ 'start' => array('shadowsockslocal start'),
+ 'stop' => array('shadowsockslocal stop'),
+ ),
+ 'name' => 'shadowsockslocal',
+ 'pidfile' => '/var/run/ss-local.pid'
+ );
+ }
+
return $services;
}
diff --git a/net/shadowsocks/src/etc/rc.d/opnsense-ss-local b/net/shadowsocks/src/etc/rc.d/opnsense-ss-local
new file mode 100644
index 000000000..c68761d69
--- /dev/null
+++ b/net/shadowsocks/src/etc/rc.d/opnsense-ss-local
@@ -0,0 +1,32 @@
+#!/bin/sh
+# $FreeBSD$
+
+# PROVIDE: ss-local
+# REQUIRE: LOGIN cleanvar
+# KEYWORD: shutdown
+
+# Add the following lines to /etc/rc.conf to enable shadowsocks-libev:
+# ss_local_enable (bool): Set to "NO" by default.
+# Set to "YES" to enable ss-local.
+# ss_local_config (path): Shadowsocks config file.
+# Defaults to "/usr/local/etc/shadowsocks-libev/local.json"
+
+
+. /etc/rc.subr
+
+name="ss_local"
+rcvar=ss_local_enable
+
+
+load_rc_config $name
+
+: ${ss_local_enable:="NO"}
+: ${ss_local_config="/usr/local/etc/shadowsocks-libev/local.json"}
+
+command="/usr/local/bin/ss-local"
+pidfile="/var/run/ss-local.pid"
+required_files="${ss_local_config}"
+
+command_args="-f $pidfile -c $ss_local_config"
+
+run_rc_command "$1"
diff --git a/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/LocalController.php b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/LocalController.php
new file mode 100644
index 000000000..1e65ab4ee
--- /dev/null
+++ b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/LocalController.php
@@ -0,0 +1,37 @@
+view->localForm = $this->getForm("local");
+ $this->view->pick('OPNsense/Shadowsocks/local');
+ }
+}
diff --git a/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/local.xml b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/local.xml
new file mode 100644
index 000000000..853ea86b7
--- /dev/null
+++ b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/local.xml
@@ -0,0 +1,38 @@
+
+ {{ partial("layout_partials/base_form",['fields':localForm,'id':'frm_local_settings'])}}
+
+
+
+
+
+
+
diff --git a/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf
index 9037b971c..825825bf1 100644
--- a/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf
+++ b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf
@@ -21,3 +21,27 @@ command:/usr/local/etc/rc.d/shadowsocks_libev status;exit 0
parameters:
type:script_output
message:request Shadowsocks status
+
+[start-local]
+command:/usr/local/etc/rc.d/opnsense-ss-local start
+parameters:
+type:script
+message:starting Shadowsocks Local
+
+[stop-local]
+command:/usr/local/etc/rc.d/opnsense-ss-local stop
+parameters:
+type:script
+message:stopping Shadowsocks Local
+
+[restart-local]
+command:/usr/local/etc/rc.d/opnsense-ss-local restart
+parameters:
+type:script
+message:restarting Shadowsocks Local
+
+[status-local]
+command:/usr/local/etc/rc.d/opnsense-ss-local status;exit 0
+parameters:
+type:script_output
+message:request Shadowsocks Local status
diff --git a/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsockslocal.conf b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsockslocal.conf
new file mode 100644
index 000000000..a1c540495
--- /dev/null
+++ b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsockslocal.conf
@@ -0,0 +1,23 @@
+[start]
+command:/usr/local/etc/rc.d/opnsense-ss-local start
+parameters:
+type:script
+message:starting Shadowsocks Local
+
+[stop]
+command:/usr/local/etc/rc.d/opnsense-ss-local stop
+parameters:
+type:script
+message:stopping Shadowsocks Local
+
+[restart]
+command:/usr/local/etc/rc.d/opnsense-ss-local restart
+parameters:
+type:script
+message:restarting Shadowsocks Local
+
+[status]
+command:/usr/local/etc/rc.d/opnsense-ss-local status;exit 0
+parameters:
+type:script_output
+message:request Shadowsocks Local status
diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS
index b1f7754b5..bb1dc94e9 100644
--- a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS
+++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS
@@ -1,2 +1,4 @@
shadowsocks_libev:/etc/rc.conf.d/shadowsocks_libev
shadowsocks.conf:/usr/local/etc/shadowsocks-libev/config.json
+ss_local:/etc/rc.conf.d/ss_local
+ss_local.conf:/usr/local/etc/shadowsocks-libev/local.json
diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local
new file mode 100644
index 000000000..258b305d0
--- /dev/null
+++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local
@@ -0,0 +1,6 @@
+{% if helpers.exists('OPNsense.shadowsocks.local.enabled') and OPNsense.shadowsocks.local.enabled == '1' %}
+ss_local_enable="YES"
+ss_local_flags=""
+{% else %}
+ss_local_enable="NO"
+{% endif %}
diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local.conf b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local.conf
new file mode 100644
index 000000000..1da2ac526
--- /dev/null
+++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local.conf
@@ -0,0 +1,10 @@
+{% if helpers.exists('OPNsense.shadowsocks.local.enabled') and OPNsense.shadowsocks.local.enabled == '1' %}
+{
+ "server":"{{ OPNsense.shadowsocks.local.serveraddress }}",
+ "server_port":{{ OPNsense.shadowsocks.local.serverport }},
+ "local_port":{{ OPNsense.shadowsocks.local.localport }},
+ "password":"{{ OPNsense.shadowsocks.local.password }}",
+ "timeout":60,
+ "method":"{{ OPNsense.shadowsocks.local.cipher }}"
+}
+{% endif %}