libs/sys: implement luci.sys.wifi.channels()
[project/luci.git] / modules / admin-full / luasrc / model / cbi / admin_network / routes.lua
index 15f994c..4767e07 100644 (file)
@@ -11,20 +11,85 @@ You may obtain a copy of the License at
 
 $Id$
 ]]--
+require("luci.tools.webadmin")
 m = Map("network", translate("a_n_routes"), translate("a_n_routes1"))
 
-s = m:section(TypedSection, "route", "")
+local routes6 = luci.sys.net.routes6()
+local bit = require "bit"
+
+if not arg or not arg[1] then
+       local routes = luci.sys.net.routes()
+
+       v = m:section(Table, routes, translate("a_n_routes_kernel4"))
+
+       net = v:option(DummyValue, "iface", translate("network"))
+       function net.cfgvalue(self, section)
+               return luci.tools.webadmin.iface_get_network(routes[section].device)
+                or routes[section].device
+       end
+
+       target  = v:option(DummyValue, "target", translate("target"))
+       function target.cfgvalue(self, section)
+               return routes[section].dest:network():string()
+       end
+
+       netmask = v:option(DummyValue, "netmask", translate("netmask"))
+       function netmask.cfgvalue(self, section)
+               return routes[section].dest:mask():string()
+       end
+
+       gateway = v:option(DummyValue, "gateway", translate("gateway"))
+       function gateway.cfgvalue(self, section)
+               return routes[section].gateway:string()
+       end
+
+       metric = v:option(DummyValue, "metric", translate("metric"))
+       function metric.cfgvalue(self, section)
+               return routes[section].metric
+       end
+
+       if routes6 then
+               v = m:section(Table, routes6, translate("a_n_routes_kernel6"))
+
+               net = v:option(DummyValue, "iface", translate("network"))
+               function net.cfgvalue(self, section)
+                       return luci.tools.webadmin.iface_get_network(routes6[section].device)
+                        or routes6[section].device
+               end
+
+               target  = v:option(DummyValue, "target", translate("target"))
+               function target.cfgvalue(self, section)
+                       return routes6[section].dest:string()
+               end
+
+               gateway = v:option(DummyValue, "gateway", translate("gateway6"))
+               function gateway.cfgvalue(self, section)
+                       return routes6[section].source:string()
+               end
+
+               metric = v:option(DummyValue, "metric", translate("metric"))
+               function metric.cfgvalue(self, section)
+                       local metr = routes6[section].metric
+                       local lower = bit.band(metr, 0xffff)
+                       local higher = bit.rshift(bit.band(metr, 0xffff0000), 16)
+                       return "%04X%04X" % {higher, lower}
+               end
+       end
+end
+
+
+s = m:section(TypedSection, "route", translate("a_n_routes_static4"))
 s.addremove = true
 s.anonymous = true
+
 s.template  = "cbi/tblsection"
 
 iface = s:option(ListValue, "interface", translate("interface"))
-luci.model.uci.foreach("network", "interface",
-       function (section)
-               if section[".name"] ~= "loopback" then
-                       iface:value(section[".name"])
-               end
-       end)
+luci.tools.webadmin.cbi_add_networks(iface)
+
+if not arg or not arg[1] then
+       net.titleref = iface.titleref
+end
 
 s:option(Value, "target", translate("target"), translate("a_n_r_target1"))
 
@@ -32,4 +97,24 @@ s:option(Value, "netmask", translate("netmask"), translate("a_n_r_netmask1")).rm
 
 s:option(Value, "gateway", translate("gateway"))
 
-return m
\ No newline at end of file
+if routes6 then
+       s = m:section(TypedSection, "route6", translate("a_n_routes_static6"))
+       s.addremove = true
+       s.anonymous = true
+
+       s.template  = "cbi/tblsection"
+
+       iface = s:option(ListValue, "interface", translate("interface"))
+       luci.tools.webadmin.cbi_add_networks(iface)
+
+       if not arg or not arg[1] then
+               net.titleref = iface.titleref
+       end
+
+       s:option(Value, "target", translate("target"), translate("a_n_r_target6"))
+
+       s:option(Value, "gateway", translate("gateway6")).rmempty = true
+end
+
+
+return m