-- Copyright 2017 Yousong Zhou -- Licensed to the public under the Apache License 2.0. local ss = require("luci.model.shadowsocks-libev") local m, s, o m = Map("shadowsocks-libev", translate("Redir Rules"), translate("On this page you can configure how traffics are to be \ forwarded to ss-redir instances. \ If enabled, packets will first have their source ip addresses checked \ against Src ip bypass, Src ip forward, \ Src ip checkdst and if none matches Src default \ will give the default action to be taken. \ If the prior check results in action checkdst, packets will continue \ to have their destination addresses checked.")) local sdata = m:get('ss_rules') if not sdata then m:set('ss_rules', nil, 'ss_rules') m:set('ss_rules', 'disabled', true) end s = m:section(NamedSection, "ss_rules", "ss_rules") s:tab("general", translate("General Settings")) s:tab("srcip", translate("Source Settings")) s:tab("dstip", translate("Destination Settings")) s:taboption('general', Flag, "disabled", translate("Disable")) ss.option_install_package(s, 'general') o = s:taboption('general', ListValue, "redir_tcp", translate("ss-redir for TCP")) ss.values_redir(o, 'tcp') o = s:taboption('general', ListValue, "redir_udp", translate("ss-redir for UDP")) ss.values_redir(o, 'udp') o = s:taboption('general', ListValue, "local_default", translate("Local-out default"), 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!")) s:taboption('srcip', DynamicList, "src_ips_bypass", translate("Src ip bypass"), translate("Bypass redir action for packets with source addresses in this list")) s:taboption('srcip', DynamicList, "src_ips_forward", translate("Src ip forward"), translate("Go through redir action for packets with source addresses in this list")) s:taboption('srcip', DynamicList, "src_ips_checkdst", translate("Src ip checkdst"), translate("Continue to have dst address checked for packets with source addresses in this list")) o = s:taboption('srcip', ListValue, "src_default", translate("Src default"), translate("Default action for packets whose source addresses do not match any of the source ip list")) ss.values_actions(o) s:taboption('dstip', DynamicList, "dst_ips_bypass", translate("Dst ip bypass"), translate("Bypass redir action for packets with destination addresses in this list")) s:taboption('dstip', DynamicList, "dst_ips_forward", translate("Dst ip forward"), translate("Go through redir action for packets with destination addresses in this list")) o = s:taboption('dstip', FileBrowser, "dst_ips_bypass_file", translate("Dst ip bypass file"), translate("File containing ip addresses for the purposes as with Dst ip bypass")) o.datatype = "file" s:taboption('dstip', FileBrowser, "dst_ips_forward_file", translate("Dst ip forward file"), translate("File containing ip addresses for the purposes as with Dst ip forward")) 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