diff --git a/applications/luci-olsr/htdocs/cgi-bin-nodes.html b/applications/luci-olsr/htdocs/cgi-bin-nodes.html
new file mode 120000
index 0000000000..80d235f15b
--- /dev/null
+++ b/applications/luci-olsr/htdocs/cgi-bin-nodes.html
@@ -0,0 +1 @@
+cgi-bin-status.html
\ No newline at end of file
diff --git a/applications/luci-olsr/htdocs/cgi-bin-status.html b/applications/luci-olsr/htdocs/cgi-bin-status.html
new file mode 100644
index 0000000000..0270f4a66b
--- /dev/null
+++ b/applications/luci-olsr/htdocs/cgi-bin-status.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+LuCI - Lua Configuration Interface
+
+
diff --git a/applications/luci-olsr/luasrc/controller/olsr.lua b/applications/luci-olsr/luasrc/controller/olsr.lua
index 9866060fc9..d5a212ccc3 100644
--- a/applications/luci-olsr/luasrc/controller/olsr.lua
+++ b/applications/luci-olsr/luasrc/controller/olsr.lua
@@ -9,11 +9,17 @@ function index()
local i18n = luci.i18n.translate
local page = node("admin", "status", "olsr")
- page.target = call("action_index")
+ page.target = template("status-olsr/overview")
page.title = "OLSR"
page.i18n = "olsr"
page.subindex = true
+ local page = node("admin", "status", "olsr", "neighbors")
+ page.target = call("action_neigh")
+ page.title = i18n("Neighbors")
+ page.subindex = true
+ page.order = 5
+
local page = node("admin", "status", "olsr", "routes")
page.target = call("action_routes")
page.title = i18n("Routen")
@@ -39,6 +45,11 @@ function index()
page.title = "SmartGW"
page.order = 60
+ local page = node("admin", "status", "olsr", "interfaces")
+ page.target = call("action_interfaces")
+ page.title = i18n("Interfaces")
+ page.order = 70
+
local ol = entry(
{"admin", "services", "olsrd"},
cbi("olsr/olsrd"), "OLSR"
@@ -77,7 +88,7 @@ function index()
)
end
-function action_index()
+function action_neigh()
local data = fetch_txtinfo("links")
if not data or not data.Links then
@@ -102,7 +113,7 @@ function action_index()
table.sort(data.Links, compare)
- luci.template.render("status-olsr/index", {links=data.Links})
+ luci.template.render("status-olsr/neighbors", {links=data.Links})
end
function action_routes()
@@ -201,7 +212,16 @@ function action_smartgw()
luci.template.render("status-olsr/smartgw", {gws=data.Gateways})
end
+function action_interfaces()
+ local data = fetch_txtinfo("interfaces")
+ if not data or not data.Interfaces then
+ luci.template.render("status-olsr/error_olsr")
+ return nil
+ end
+
+ luci.template.render("status-olsr/interfaces", {iface=data.Interfaces})
+end
-- Internal
function fetch_txtinfo(otable)
diff --git a/applications/luci-olsr/luasrc/view/status-olsr/interfaces.htm b/applications/luci-olsr/luasrc/view/status-olsr/interfaces.htm
new file mode 100644
index 0000000000..b409fede91
--- /dev/null
+++ b/applications/luci-olsr/luasrc/view/status-olsr/interfaces.htm
@@ -0,0 +1,45 @@
+<%#
+LuCI - Lua Configuration Interface
+Copyright 2008 Steven Barth
+Copyright 2008 Jo-Philipp Wich
+Copyright 2010 Manuel Munz
+
+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: mid.htm 5448 2009-10-31 15:54:11Z jow $
+
+-%>
+<%+header%>
+
+<%:Overview of interfaces where OLSR is running%>
+
+
+
+<%:Interface%>
+<%:State%>
+<%:MTU%>
+<%:WLAN%>
+<%:Source address%>
+<%:Netmask%>
+<%:Broadcast address%>
+
+
+<% for k, i in ipairs(iface) do %>
+
+<%=i.Name%>
+<%=i.State%>
+<%=i.MTU%>
+<%=i.WLAN%>
+<%=i["Src-Adress"]%>
+<%=i.Mask%>
+<%=i["Dst-Adress"]%>
+
+<% end %>
+
+
+
+<%+footer%>
diff --git a/applications/luci-olsr/luasrc/view/status-olsr/index.htm b/applications/luci-olsr/luasrc/view/status-olsr/neighbors.htm
similarity index 97%
rename from applications/luci-olsr/luasrc/view/status-olsr/index.htm
rename to applications/luci-olsr/luasrc/view/status-olsr/neighbors.htm
index 786c859545..60afdc37dd 100644
--- a/applications/luci-olsr/luasrc/view/status-olsr/index.htm
+++ b/applications/luci-olsr/luasrc/view/status-olsr/neighbors.htm
@@ -9,7 +9,7 @@ You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
-$Id$
+$Id: index.htm 6619 2010-12-05 15:02:44Z soma $
-%>
<%+header%>
diff --git a/applications/luci-olsr/luasrc/view/status-olsr/overview.htm b/applications/luci-olsr/luasrc/view/status-olsr/overview.htm
new file mode 100644
index 0000000000..673938c570
--- /dev/null
+++ b/applications/luci-olsr/luasrc/view/status-olsr/overview.htm
@@ -0,0 +1,178 @@
+<%#
+LuCI - Lua Configuration Interface
+Copyright 2008 Steven Barth
+Copyright 2008 Jo-Philipp Wich
+Copyright 2010 Manuel Munz
+
+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
+-%>
+
+<%
+local sys = require "luci.sys"
+local utl = require "luci.util"
+local fs = require "luci.fs"
+
+function get_version()
+ local data = utl.split((utl.trim(sys.exec("/rom/usr/sbin/olsrd -v"))))
+ local buildfull = utl.trim(utl.split(data[2],": ")[2])
+ local ver = {
+ version = utl.trim(utl.split(data[1]," - ")[2]),
+ date = utl.trim(utl.split(buildfull, " ")[1]),
+ time = utl.trim(utl.split(buildfull, " ")[2]),
+ host = utl.trim(utl.split(buildfull, " ")[4])
+ }
+ return ver
+end
+local ver = get_version()
+
+local ifaces = fetch_txtinfo("int")
+if not ifaces or not ifaces.Interfaces then
+ luci.template.render("status-olsr/error_olsr")
+ return nil
+end
+local interfaces = ""
+for k,v in pairs(ifaces.Interfaces) do
+ interfaces = utl.trim(interfaces.." "..v.Name)
+end
+interfaces = string.gsub(interfaces, " ", ", ")
+local nr_ifaces = #ifaces.Interfaces
+
+local links = fetch_txtinfo("links")
+local nr_neigh = #links.Links
+local neighbors = ""
+for k,v in pairs(links.Links) do
+ local link
+ if v.Hostname then
+ link = v.Hostname
+ else
+ link = v["Remote IP"]
+ end
+ neighbors = utl.trim(""..link.." "..neighbors)
+end
+
+local data = fetch_txtinfo("topology")
+local nr_topo = #data.Topology
+local utable = {}
+for k,v in pairs(data.Topology) do
+ if utl.contains(utable, v["Dest. IP"]) == false then
+ table.insert(utable, v["Dest. IP"])
+ end
+end
+local nr_nodes = #utable
+
+local data = fetch_txtinfo("hna")
+local nr_hna = #data.HNA
+
+local meshfactor = string.format("%.2f", nr_topo / nr_nodes)
+
+local ipv = luci.model.uci.cursor():get_first("olsrd", "olsrd", "IpVersion", "4")
+
+function write_conf(conf, file)
+ if fs.access(conf) then
+ luci.http.header("Content-Disposition", "attachment; filename="..file)
+ luci.http.prepare_content("text/plain")
+ luci.http.write(fs.readfile(conf))
+ end
+end
+
+conf = luci.http.formvalue()
+
+if conf.openwrt then
+ write_conf("/etc/config/olsrd", "olsrd")
+ return false
+end
+
+if conf.conf_v4 then
+ write_conf("/var/etc/olsrd.conf.ipv4", "olsrd.conf.ipv4")
+ return false
+end
+
+if conf.conf_v6 then
+ write_conf("/var/etc/olsrd.conf.ipv6", "olsrd.conf.ipv6")
+ return false
+end
+
+if conf.conf then
+ write_conf("/var/etc/olsrd.conf", "olsrd.conf")
+ return false
+end
+
+%>
+
+<%+header%>
+
+
+
+
+
<%:Interfaces%>
+
+
+
+ <%=interfaces%>
+
+
+
+
+
+
+
+
+
+
+
+
+
<%:Links per node (average)%>
+
<%=meshfactor%>
+
+
+
+
+
+
+
+
+
+
<%:Version%>
+
<%=ver.version%> (built <%=ver.date%> on <%=ver.host%>)
+
+
+
+
+
+
+
+<%+footer%>
diff --git a/applications/luci-olsr/luasrc/view/status-olsr/smartgw.htm b/applications/luci-olsr/luasrc/view/status-olsr/smartgw.htm
index a64c7bffdf..10d516cd35 100644
--- a/applications/luci-olsr/luasrc/view/status-olsr/smartgw.htm
+++ b/applications/luci-olsr/luasrc/view/status-olsr/smartgw.htm
@@ -2,16 +2,15 @@
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth
Copyright 2008 Jo-Philipp Wich
+Copyright 2010 Manuel Munz
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: mid.htm 5448 2009-10-31 15:54:11Z jow $
-
-%>
+
<%
require("luci.model.uci")
local uci = luci.model.uci.cursor_state()