NIU:
+PortFw +QoS Reorganize Network
This commit is contained in:
parent
efe5fc77f9
commit
2176dae3a0
14 changed files with 327 additions and 36 deletions
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
|
@ -32,22 +32,12 @@ function index()
|
|||
uci.inst_state:foreach("dhcp", "dhcp", function(s)
|
||||
if s.interface == "lan" and s.ignore ~= "1" then
|
||||
entry({"niu", "network", "assign"}, cbi("niu/network/assign",
|
||||
toniu), "Display and Customize Address Assignment", 30)
|
||||
toniu), "Manage Address Assignment", 30)
|
||||
end
|
||||
end)
|
||||
|
||||
entry({"niu", "network", "routes"}, cbi("niu/network/routes",
|
||||
toniu), "Display and Customize Routing", 40)
|
||||
|
||||
entry({"niu", "network", "conntrack"}, call("cnntrck"),
|
||||
"Display Local Network Activity", 50)
|
||||
|
||||
if fs.access("/etc/config/ddns") then
|
||||
entry({"niu", "network", "ddns"}, cbi("niu/network/ddns", toniu),
|
||||
"Configure Dynamic-DNS names", 60)
|
||||
end
|
||||
end
|
||||
|
||||
function cnntrck()
|
||||
require "luci.template".render("niu/network/conntrack")
|
||||
end
|
||||
|
|
|
@ -18,7 +18,7 @@ module "luci.controller.niu.system"
|
|||
function index()
|
||||
local toniu = {on_success_to={"niu"}}
|
||||
|
||||
local e = entry({"niu", "system"}, alias("niu"), "System", 30)
|
||||
local e = entry({"niu", "system"}, alias("niu"), "System", 40)
|
||||
e.niu_dbtemplate = "niu/system"
|
||||
e.niu_dbtasks = true
|
||||
e.niu_dbicon = "icons32/preferences-system.png"
|
||||
|
|
45
modules/niu/luasrc/controller/niu/traffic.lua
Normal file
45
modules/niu/luasrc/controller/niu/traffic.lua
Normal file
|
@ -0,0 +1,45 @@
|
|||
--[[
|
||||
LuCI - Lua Development Framework
|
||||
|
||||
Copyright 2009 Steven Barth <steven@midlink.org>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
local require = require
|
||||
module "luci.controller.niu.traffic"
|
||||
|
||||
function index()
|
||||
local toniu = {on_success_to={"niu"}}
|
||||
|
||||
local e = entry({"niu", "traffic"}, alias("niu"), "Network Traffic", 30)
|
||||
e.niu_dbtemplate = "niu/traffic"
|
||||
e.niu_dbtasks = true
|
||||
e.niu_dbicon = "icons32/preferences-system-network.png"
|
||||
|
||||
if fs.access("/etc/config/firewall") then
|
||||
entry({"niu", "traffic", "portfw"}, cbi("niu/traffic/portfw",
|
||||
toniu), "Manage Port Forwarding", 1)
|
||||
end
|
||||
|
||||
if fs.access("/etc/config/qos") then
|
||||
entry({"niu", "traffic", "qos"}, cbi("niu/traffic/qos",
|
||||
toniu), "Manage Prioritization (QoS)", 2)
|
||||
end
|
||||
|
||||
entry({"niu", "traffic", "routes"}, cbi("niu/traffic/routes",
|
||||
toniu), "Manage Traffic Routing", 30)
|
||||
|
||||
entry({"niu", "traffic", "conntrack"}, call("cnntrck"),
|
||||
"Display Local Network Activity", 50)
|
||||
end
|
||||
|
||||
function cnntrck()
|
||||
require "luci.template".render("niu/traffic/conntrack")
|
||||
end
|
20
modules/niu/luasrc/model/cbi/niu/traffic/portfw.lua
Normal file
20
modules/niu/luasrc/model/cbi/niu/traffic/portfw.lua
Normal file
|
@ -0,0 +1,20 @@
|
|||
local uci = require "luci.model.uci"
|
||||
local cursor = uci.cursor()
|
||||
local d = Delegator()
|
||||
d.allow_finish = true
|
||||
d.allow_back = true
|
||||
d.allow_cancel = true
|
||||
|
||||
d:add("portfw1", load("niu/traffic/portfw1"))
|
||||
|
||||
function d.on_cancel()
|
||||
cursor:revert("firewall")
|
||||
cursor:revert("upnpd")
|
||||
end
|
||||
|
||||
function d.on_done()
|
||||
cursor:commit("firewall")
|
||||
cursor:commit("upnpd")
|
||||
end
|
||||
|
||||
return d
|
65
modules/niu/luasrc/model/cbi/niu/traffic/portfw1.lua
Normal file
65
modules/niu/luasrc/model/cbi/niu/traffic/portfw1.lua
Normal file
|
@ -0,0 +1,65 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
local fs = require "nixio.fs"
|
||||
local sys = require "luci.sys"
|
||||
|
||||
m = Map("firewall", translate("Manage Port Forwarding"))
|
||||
|
||||
s = m:section(TypedSection, "redirect", translate("Manual Port Forwarding"),
|
||||
translate([[To manually define a forwarding rule you have to specify at least
|
||||
the internal IP-address and port of the service that should be forwarded.
|
||||
If you ommit the external port it will be the same as the internal port.
|
||||
You also can forward a range of ports by using the syntax first-last Port
|
||||
(e.g. 1024-1030) in the port field.]]))
|
||||
s.template = "cbi/tblsection"
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
|
||||
name = s:option(Value, "_name", translate("Name"), translate("optional"))
|
||||
name.size = 10
|
||||
|
||||
iface = s:option(ListValue, "src", translate("Zone"))
|
||||
iface:value("wan", "Internet")
|
||||
iface.default = "wan"
|
||||
|
||||
proto = s:option(ListValue, "proto", translate("Protocol"))
|
||||
proto:value("tcp", "TCP")
|
||||
proto:value("udp", "UDP")
|
||||
proto:value("tcpudp", "TCP+UDP")
|
||||
|
||||
dport = s:option(Value, "src_dport", translate("Internal Port"))
|
||||
dport.size = 5
|
||||
|
||||
to = s:option(Value, "dest_ip", translate("Internal Address"), translate("Device running the service"))
|
||||
for i, dataset in ipairs(sys.net.arptable()) do
|
||||
to:value(dataset["IP address"])
|
||||
end
|
||||
|
||||
toport = s:option(Value, "dest_port", translate("External Port"), translate("optional"));
|
||||
toport.size = 5
|
||||
|
||||
local m2
|
||||
if fs.access("/etc/config/upnpd") then
|
||||
m2 = Map("upnpd")
|
||||
s = m2:section(NamedSection, "config", "upnpd", translate("Automatic Port Forwarding (UPnP IGD)"),
|
||||
translate([[Allows UPnP-capable applications to automatically forward ports on the router to their IP-Address.
|
||||
Be aware that this is a potential security risk as applications are not authenticated.]]))
|
||||
s.addremove = false
|
||||
|
||||
on = s:option(ListValue, "external_iface", translate("Port Forwarding Restrictions"))
|
||||
on:value("none", translate("Manual Forwarding Only"))
|
||||
on:value("wan", translate("Automatic and Manual Forwarding"))
|
||||
end
|
||||
|
||||
return m, m2
|
36
modules/niu/luasrc/model/cbi/niu/traffic/qos.lua
Normal file
36
modules/niu/luasrc/model/cbi/niu/traffic/qos.lua
Normal file
|
@ -0,0 +1,36 @@
|
|||
local uci = require "luci.model.uci"
|
||||
local cursor = uci.cursor()
|
||||
|
||||
if not cursor:get("qos", "wan", "_niuinit") then
|
||||
-- Load some more sensible default classifications
|
||||
cursor:delete_all("qos", "classify")
|
||||
cursor:section("qos", "classify", "dns",
|
||||
{target = "Priority", ports = "53", _name = "DNS"}
|
||||
)
|
||||
cursor:section("qos", "classify", "inet1",
|
||||
{target = "Normal", ports = "20,21,22,80,443", _name = "WWW, SSH, FTP"}
|
||||
)
|
||||
cursor:section("qos", "classify", "inet2",
|
||||
{target = "Normal", ports = "25,110,119,143", _name = "E-Mail, News"}
|
||||
)
|
||||
|
||||
cursor:set("qos", "wan", "_niuinit", "1")
|
||||
cursor:save("qos")
|
||||
end
|
||||
|
||||
local d = Delegator()
|
||||
d.allow_finish = true
|
||||
d.allow_back = true
|
||||
d.allow_cancel = true
|
||||
|
||||
d:add("qos1", load("niu/traffic/qos1"))
|
||||
|
||||
function d.on_cancel()
|
||||
cursor:revert("qos")
|
||||
end
|
||||
|
||||
function d.on_done()
|
||||
cursor:commit("qos")
|
||||
end
|
||||
|
||||
return d
|
89
modules/niu/luasrc/model/cbi/niu/traffic/qos1.lua
Normal file
89
modules/niu/luasrc/model/cbi/niu/traffic/qos1.lua
Normal file
|
@ -0,0 +1,89 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
local sys = require "luci.sys"
|
||||
local fs = require "nixio.fs"
|
||||
|
||||
m = Map("qos", translate("Manage Prioritization (QoS)"), translate([[Different
|
||||
kinds of network traffic usually have different transmission requirements.
|
||||
For example the important factor for a large HTTP-download is bandwith whereas
|
||||
VoIP has a large focus on low packet latency. Prioritization takes these quality
|
||||
of service factors into account and optimizes priorities to allow reasonable
|
||||
performance for time critical services.]]))
|
||||
|
||||
s = m:section(NamedSection, "wan", "interface", translate("General Settings"),
|
||||
translate([[For QoS to work correctly you need to provide the upload and
|
||||
download speed of your internet connection. Values are in kilobits per second.
|
||||
For comparison a standard consumer ADSL connection has between 1000 and 25000
|
||||
kbps as donwload speed and between 128 and 1000 kbps upload speed.]]))
|
||||
s.addremove = false
|
||||
|
||||
local en = s:option(ListValue, "enabled", translate("Prioritization"))
|
||||
en:value("1", "Enable Quality of Service")
|
||||
en:value("0", "Disable")
|
||||
|
||||
local dl = s:option(Value, "download", translate("Maximum Download Speed"), "kbps")
|
||||
dl:depends("enabled", "1")
|
||||
|
||||
local ul = s:option(Value, "upload", translate("Maximum Upload Speed"), "kbps")
|
||||
ul:depends("enabled", "1")
|
||||
|
||||
s = m:section(TypedSection, "classify", translate("Finetuning"), translate([[
|
||||
The QoS application provides different useful default prioritization rules not
|
||||
listed here that cover many common use-cases. You however can add custom rules
|
||||
to finetune the prioritization process.]]))
|
||||
s.template = "cbi/tblsection"
|
||||
|
||||
s.anonymous = true
|
||||
s.addremove = true
|
||||
|
||||
n = s:option(Value, "_name", translate("Name"), translate("optional"))
|
||||
|
||||
srch = s:option(Value, "srchost", translate("Local IP-Address"))
|
||||
srch.rmempty = true
|
||||
srch:value("", translate("all"))
|
||||
for i, dataset in ipairs(sys.net.arptable()) do
|
||||
srch:value(dataset["IP address"])
|
||||
end
|
||||
|
||||
p = s:option(ListValue, "proto", translate("Protocol"))
|
||||
p:value("", translate("all"))
|
||||
p:value("tcp", "TCP")
|
||||
p:value("udp", "UDP")
|
||||
p.rmempty = true
|
||||
|
||||
ports = s:option(Value, "ports", translate("Ports"))
|
||||
ports.rmempty = true
|
||||
ports:value("", translate("any"))
|
||||
|
||||
if fs.access("/etc/l7-protocols") then
|
||||
l7 = s:option(ListValue, "layer7", translate("Service"))
|
||||
l7.rmempty = true
|
||||
l7:value("", translate("all"))
|
||||
for f in fs.glob("/etc/l7-protocols/*.pat") do
|
||||
l7:value(f:sub(19, #f-4))
|
||||
end
|
||||
end
|
||||
|
||||
s:option(Value, "connbytes", translate("Bytes sent"), translate("from[-to]"))
|
||||
|
||||
t = s:option(ListValue, "target", translate("Priority"))
|
||||
t:value("Priority", translate("Highest"))
|
||||
t:value("Express", translate("High"))
|
||||
t:value("Normal", translate("Normal"))
|
||||
t:value("Bulk", translate("Low"))
|
||||
t.default = "Normal"
|
||||
|
||||
return m
|
|
@ -4,7 +4,7 @@ d.allow_finish = true
|
|||
d.allow_back = true
|
||||
d.allow_cancel = true
|
||||
|
||||
d:add("routes1", load("niu/network/routes1"))
|
||||
d:add("routes1", load("niu/traffic/routes1"))
|
||||
|
||||
function d.on_cancel()
|
||||
cursor:revert("network")
|
|
@ -15,17 +15,6 @@ end
|
|||
local wanon = uci.inst_state:get("network", "wan", "proto")
|
||||
local wanup = uci.inst_state:get("network", "wan", "up")
|
||||
local wanip = uci.inst_state:get("network", "wan", "ipaddr")
|
||||
local wanif = uci.inst_state:get("network", "wan", "ifname")
|
||||
local wanul, wandl
|
||||
|
||||
if wanif then
|
||||
local devstats = fs.readfile("/proc/net/dev")
|
||||
local rx, tx = devstats:match("%s*"..wanif..
|
||||
":%s*([0-9]+)%s+[0-9]+%s+[0-9]+%s+[0-9]+%s+"..
|
||||
"[0-9]+%s+[0-9]+%s+[0-9]+%s+[0-9]+%s+([0-9]+)")
|
||||
wanul = tx and (tonumber(tx) / 1000000000)
|
||||
wandl = rx and (tonumber(rx) / 1000000000)
|
||||
end
|
||||
|
||||
local leasefn
|
||||
uci.inst:foreach("dhcp", "dnsmasq",
|
||||
|
@ -57,10 +46,10 @@ end
|
|||
<% if wanon and wanon ~= "none" then %>
|
||||
<tr>
|
||||
<% if wanup then %>
|
||||
<th>Uplink Address</th>
|
||||
<th>Uplink Address:</th>
|
||||
<td><%=wanip%></td>
|
||||
<% else %>
|
||||
<th>Uplink</th>
|
||||
<th>Uplink:</th>
|
||||
<td><span style="color: darkred"><em>offline</em></span>
|
||||
</td>
|
||||
<% end %>
|
||||
|
@ -68,23 +57,15 @@ end
|
|||
</tr>
|
||||
<% end %>
|
||||
|
||||
<% if wanul and wandl then %>
|
||||
<tr>
|
||||
<th>Uplink Traffic</th><td>
|
||||
<%=("%.2f"):format(wandl)%> GB⇓ <%=("%.2f"):format(wanul)%> GB⇑
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<tr>
|
||||
<th>Local Address</th><td>
|
||||
<th>Local Address:</th><td>
|
||||
<%=uci.inst_state:get("network", "lan", "ipaddr")%>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<% if arps then %>
|
||||
<tr>
|
||||
<th>Active IP-Devices</th><td><%=arps%><% if leasefn then %>
|
||||
<th>Active IP-Devices:</th><td><%=arps%><% if leasefn then %>
|
||||
(<%=leasefn%> assigned)
|
||||
<% end %></td>
|
||||
</tr>
|
||||
|
|
58
modules/niu/luasrc/view/niu/traffic.htm
Normal file
58
modules/niu/luasrc/view/niu/traffic.htm
Normal file
|
@ -0,0 +1,58 @@
|
|||
<%
|
||||
local uci = require "luci.model.uci"
|
||||
local fs = require "nixio.fs"
|
||||
|
||||
local wanon = uci.inst_state:get("network", "wan", "up") == "1"
|
||||
local wanif = wanon and uci.inst_state:get("network", "wan", "ifname")
|
||||
local lanif = uci.inst_state:get("network", "lan", "ifname")
|
||||
local wanul, wandl, lanul, landl
|
||||
local devstats = fs.readfile("/proc/net/dev")
|
||||
|
||||
local fwav = fs.access("/etc/config/firewall", "r")
|
||||
local fwon = uci.inst_state:get("firewall", "core", "loaded") == "1"
|
||||
|
||||
if lanif then
|
||||
local rx, tx = devstats:match("%s*"..lanif..
|
||||
":%s*([0-9]+)%s+[0-9]+%s+[0-9]+%s+[0-9]+%s+"..
|
||||
"[0-9]+%s+[0-9]+%s+[0-9]+%s+[0-9]+%s+([0-9]+)")
|
||||
lanul = tx and (tonumber(tx) / 1000000000)
|
||||
landl = rx and (tonumber(rx) / 1000000000)
|
||||
end
|
||||
|
||||
if wanif then
|
||||
local rx, tx = devstats:match("%s*"..wanif..
|
||||
":%s*([0-9]+)%s+[0-9]+%s+[0-9]+%s+[0-9]+%s+"..
|
||||
"[0-9]+%s+[0-9]+%s+[0-9]+%s+[0-9]+%s+([0-9]+)")
|
||||
wanul = tx and (tonumber(tx) / 1000000000)
|
||||
wandl = rx and (tonumber(rx) / 1000000000)
|
||||
end
|
||||
|
||||
%>
|
||||
|
||||
<table class="dbstattbl">
|
||||
<% if wanul and wandl then %>
|
||||
<tr>
|
||||
<th>Uplink Traffic: </th><td>
|
||||
<%=("%.2f"):format(wandl)%> GB⇓ <%=("%.2f"):format(wanul)%> GB⇑
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<% if lanul and landl then %>
|
||||
<tr>
|
||||
<th>Local Traffic: </th><td>
|
||||
<%=("%.2f"):format(landl)%> GB⇓ <%=("%.2f"):format(lanul)%> GB⇑
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<% if fwav then %>
|
||||
<tr>
|
||||
<th>Firewall: </th><td>
|
||||
<%=fwon and translate("active") or translate("inactive")%>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
</table>
|
||||
<br />
|
7
modules/niu/root/etc/uci-defaults/luci-niu-firstrun
Normal file
7
modules/niu/root/etc/uci-defaults/luci-niu-firstrun
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
# Disable some services by default
|
||||
|
||||
uci get luci.main._niuinit && exit 0
|
||||
uci set qos.wan.enabled=0
|
||||
uci set upnpd.config.external_iface=none
|
||||
uci set luci.main._niuinit=1
|
Loading…
Reference in a new issue