luci-app-shadowsocks-libev: support ss_rules options: dst_default, ifnames 1315/head
authorYousong Zhou <yszhou4tech@gmail.com>
Sat, 19 Aug 2017 18:19:02 +0000 (02:19 +0800)
committerYousong Zhou <yszhou4tech@gmail.com>
Sat, 19 Aug 2017 18:27:45 +0000 (02:27 +0800)
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua
applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua

index 1a3dcb88381c45546414a9e9e98319980f084f17..998579017412d56dfa289bcfa439819e5b220a6b 100644 (file)
@@ -39,8 +39,12 @@ ss.values_redir(o, 'udp')
 
 o = s:taboption('general', ListValue, "local_default",
        translate("Local-out default"),
-       translate("Default action for locally generated packets"))
+       translate("Default action for locally generated TCP packets"))
 ss.values_actions(o)
+o = s:taboption('general', DynamicList, "ifnames",
+       translate("Ingress interfaces"),
+       translate("Only apply rules on packets from these network interfaces"))
+ss.values_ifnames(o)
 s:taboption('general', Value, "ipt_args",
        translate("Extra arguments"),
        translate("Passes additional arguments to iptables. Use with care!"))
@@ -74,5 +78,9 @@ s:taboption('dstip', FileBrowser, "dst_ips_forward_file",
        translate("Dst ip forward file"),
        translate("File containing ip addresses for the purposes as with <em>Dst ip forward</em>"))
 o.datatype = "file"
+o = s:taboption('dstip', ListValue, "dst_default",
+       translate("Dst default"),
+       translate("Default action for packets whose destination addresses do not match any of the destination ip list"))
+ss.values_actions(o)
 
 return m
index e1bde6008c7e8594314e7440e8dac12c00869f54..650ff6356e457a79a2abbf10a2155ad69dca3b41 100644 (file)
@@ -14,8 +14,10 @@ module("luci.model.shadowsocks-libev", function(m)
 end)
 
 function values_actions(o)
-       for _, a in ipairs(actions) do
-               o:value(a)
+       o:value("bypass")
+       o:value("forward")
+       if o.option ~= "dst_default" then
+               o:value("checkdst")
        end
 end
 
@@ -43,7 +45,6 @@ function values_serverlist(o)
 end
 
 function values_ipaddr(o)
-       local keys, vals = {}, {}
        for _, v in ipairs(nw:get_interfaces()) do
                for _, a in ipairs(v:ipaddrs()) do
                        o:value(a:host():string(), '%s (%s)' %{ a:host(), v:shortname() })
@@ -51,6 +52,14 @@ function values_ipaddr(o)
        end
 end
 
+function values_ifnames(o)
+       for _, v in ipairs(nw:get_interfaces()) do
+               if v.dev then
+                       o:value(v.dev.name)
+               end
+       end
+end
+
 function options_client(s, tab)
        local o
 
@@ -226,12 +235,6 @@ modes = {
        "udp_only",
 }
 
-actions = {
-       "bypass",
-       "forward",
-       "checkdst",
-}
-
 methods = {
        -- aead
        "aes-128-gcm",