<%# LuCI - Lua Configuration Interface Copyright 2008 Steven Barth <steven@midlink.org> Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net> Copyright 2011 Manuel Munz <freifunk at somakoma dot de> 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("/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("<a href=http://"..link.."/cgi-bin-status.html>"..link.."</a> "..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) if luci.http.formvalue("status") == "1" then rv = { nr_neighbors = nr_neigbors, neighbors = neighbors, interfaces = interfaces, nr_ifaces = nr_ifaces, nr_links = nr_links, nr_topo = nr_topo, nr_nodes = nr_nodes, meshfactor = meshfactor } luci.http.prepare_content("application/json") luci.http.write_json(rv) return end 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%> <script type="text/javascript" src="<%=resource%>/cbi.js"></script> <script type="text/javascript">//<![CDATA[ XHR.poll(30, '<%=REQUEST_URI%>', { status: 1 }, function(x, info) { var e; if (e = document.getElementById('nr_neighbors')) e.innerHTML = info.nr_neighbors; if (e = document.getElementById('neighbors')) e.innerHTML = info.neighbors; if (e = document.getElementById('nr_ifaces')) e.innerHTML = info.nr_ifaces; if (e = document.getElementById('interfaces')) e.innerHTML = info.interfaces; if (e = document.getElementById('nr_links')) e.innerHTML = info.nr_links; if (e = document.getElementById('nr_topo')) e.innerHTML = info.nr_topo; if (e = document.getElementById('nr_nodes')) e.innerHTML = info.nr_nodes; if (e = document.getElementById('meshfactor')) e.innerHTML = info.meshfactor; } ); //]]></script> <h2><a id="content" name="content">OLSR <%:Overview%></a></h2> <div class="cbi-map"> <div class="cbi-section-node"> <div class="cbi-value"> <div style="width: 15em; float:left;"> <label class="cbi-value-title"><%:Interfaces%></label> </div> <div class="cbi-value-field"> <div style="width: 6em; float:left;"> <a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "interfaces")%>"> <span id="nr_ifaces"> <%=nr_ifaces%> <span> </a> </div> <div style="padding-left: 21em;"> <span id="interfaces"> <%=interfaces%> </span> </div> </div> <br/> </div> <div class="cbi-value"> <div style="width: 15em; float:left;"> <%:Neighbors%> </div> <div class="cbi-value-field"> <div style="width: 6em; float:left;"> <a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "neighbors")%>"> <span id="nr_neigh"> <%=nr_neigh%> </span> </a> </div> <div style="padding-left: 21em;"> <span id="neighbors"> <%=neighbors%> </span> </div> </div> <br/> </div> <div class="cbi-value"> <div style="width: 15em; float:left;"> <%:Nodes%> </div> <div class="cbi-value-field"> <div style="width: 6em; float:left;"> <a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "topology")%>"> <span id="nr_nodes"> <%=nr_nodes%> </span> </a> </div> </div> <br/> </div> <div class="cbi-value"> <div style="width: 15em; float:left;"> <%:HNA%> </div> <div class="cbi-value-field"> <div style="width: 6em; float:left;"> <a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "hna")%>"> <span id="nr_hna"> <%=nr_hna%> </span> </a> </div> </div> <br/> </div> <div class="cbi-value"> <div style="width: 15em; float:left;"> <%:Links total%> </div> <div class="cbi-value-field"> <div style="width: 6em; float:left;"> <a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "topology")%>"> <span id="nr_topo"> <%=nr_topo%> </span> </a> </div> </div> <br/> </div> <div class="cbi-value"> <div style="width: 15em; float:left;"> <%:Links per node (average)%> </div> <div class="cbi-value-field"> <div style="width: 6em; float:left;"> <span id="meshfactor"> <%=meshfactor%> </span> </div> </div> <br/> </div> </div> </div> <br/> <h2><a id="content" name="content">OLSR <%:Configuration%></a></h2> <div class="cbi-map"> <div class="cbi-section-node"> <div class="cbi-value"> <div style="width: 15em; float:left;"> <%:Version%> </div> <div class="cbi-value-field"> <%=ver.version%> (built <%=ver.date%> on <%=ver.host%>) </div> <br/> </div> <div class="cbi-value"> <div style="width: 15em; float:left;"> <%:Download Config%> </div> <div class="cbi-value-field"> <a href="<%=REQUEST_URI%>?openwrt">OpenWrt</a>, <% if ipv == "6and4" then %> <a href="<%=REQUEST_URI%>?conf_v4">OLSRD IPv4</a>, <a href="<%=REQUEST_URI%>?conf_v6">OLSRD IPv6</a> <% else %> <a href="<%=REQUEST_URI%>?conf">OLSRD</a> <% end %> </div> <br/> </div> </div> </div> <%+footer%>