X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=applications%2Fluci-olsr%2Fluasrc%2Fmodel%2Fcbi%2Folsr%2Folsrdiface6.lua;fp=applications%2Fluci-olsr%2Fluasrc%2Fmodel%2Fcbi%2Folsr%2Folsrdiface6.lua;h=85818acb3a4623933cb7c1bd6705aba3664b4732;hp=0000000000000000000000000000000000000000;hb=2332a0692c7c9f1bcbc1d48fe20192ceaed6b6e4;hpb=33d88f9b54efe40ddecbef0d594ec90662efdc36 diff --git a/applications/luci-olsr/luasrc/model/cbi/olsr/olsrdiface6.lua b/applications/luci-olsr/luasrc/model/cbi/olsr/olsrdiface6.lua new file mode 100644 index 000000000..85818acb3 --- /dev/null +++ b/applications/luci-olsr/luasrc/model/cbi/olsr/olsrdiface6.lua @@ -0,0 +1,176 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2010 Jo-Philipp Wich + +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 util = require "luci.util" +local ip = require "luci.ip" + +function write_float(self, section, value) + local n = tonumber(value) + if n ~= nil then + return Value.write(self, section, "%.1f" % n) + end +end + +m = Map("olsrd6", translate("OLSR Daemon - Interface"), + translate("The OLSR daemon is an implementation of the Optimized Link State Routing protocol. ".. + "As such it allows mesh routing for any network equipment. ".. + "It runs on any wifi card that supports ad-hoc mode and of course on any ethernet device. ".. + "Visit olsrd.org for help and documentation.")) + +m.redirect = luci.dispatcher.build_url("admin/services/olsrd6") + +if not arg[1] or m.uci:get("olsrd6", arg[1]) ~= "Interface" then + luci.http.redirect(m.redirect) + return +end + +i = m:section(NamedSection, arg[1], "Interface", translate("Interface")) +i.anonymous = true +i.addremove = false + +i:tab("general", translate("General Settings")) +i:tab("addrs", translate("IP Addresses")) +i:tab("timing", translate("Timing and Validity")) + +ign = i:taboption("general", Flag, "ignore", translate("Enable"), + translate("Enable this interface.")) +ign.enabled = "0" +ign.disabled = "1" +ign.rmempty = false +function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" +end + +network = i:taboption("general", Value, "interface", translate("Network"), + translate("The interface OLSRd should serve.")) + +network.template = "cbi/network_netlist" +network.widget = "radio" +network.nocreate = true + +mode = i:taboption("general", ListValue, "Mode", translate("Mode"), + translate("Interface Mode is used to prevent unnecessary packet forwarding on switched ethernet interfaces. ".. + "valid Modes are \"mesh\" and \"ether\". Default is \"mesh\".")) +mode:value("mesh") +mode:value("ether") +mode.optional = true +mode.rmempty = true + + +weight = i:taboption("general", Value, "Weight", translate("Weight"), + translate("When multiple links exist between hosts the weight of interface is used to determine the link to use. ".. + "Normally the weight is automatically calculated by olsrd based on the characteristics of the interface, ".. + "but here you can specify a fixed value. Olsrd will choose links with the lowest value.
".. + "Note: Interface weight is used only when LinkQualityLevel is set to 0. ".. + "For any other value of LinkQualityLevel, the interface ETX value is used instead.")) +weight.optional = true +weight.datatype = "uinteger" +weight.placeholder = "0" + +lqmult = i:taboption("general", DynamicList, "LinkQualityMult", translate("LinkQuality Multiplicator"), + translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1.0. ".. + "It is only used when LQ-Level is greater than 0. Examples:
".. + "reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
".. + "reduce LQ to all nodes on this interface by 20%: default 0.8")) +lqmult.optional = true +lqmult.rmempty = true +lqmult.cast = "table" +lqmult.placeholder = "default 1.0" + +function lqmult.validate(self, value) + for _, v in pairs(value) do + if v ~= "" then + local val = util.split(v, " ") + local host = val[1] + local mult = val[2] + if not host or not mult then + return nil, translate("LQMult requires two values (IP address or 'default' and multiplicator) seperated by space.") + end + if not (host == "default" or ip.IPv6(host)) then + return nil, translate("Can only be a valid IPv6 address or 'default'") + end + if not tonumber(mult) or tonumber(mult) > 1 or tonumber(mult) < 0.01 then + return nil, translate("Invalid Value for LQMult-Value. Must be between 0.01 and 1.0.") + end + if not mult:match("[0-1]%.[0-9]+") then + return nil, translate("Invalid Value for LQMult-Value. You must use a decimal number between 0.01 and 1.0 here.") + end + end + end + return value +end + +ip6m = i:taboption("addrs", Value, "IPv6Multicast", translate("IPv6 multicast"), + translate("IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal multicast.")) +ip6m.optional = true +ip6m.datatype = "ip6addr" +ip6m.placeholder = "FF02::6D" + +ip6s = i:taboption("addrs", Value, "IPv6Src", translate("IPv6 source"), + translate("IPv6 src prefix. OLSRd will choose one of the interface IPs which matches the prefix of this parameter. ".. + "Default is \"0::/0\", which triggers the usage of a not-linklocal interface IP.")) +ip6s.optional = true +ip6s.datatype = "ip6addr" +ip6s.placeholder = "0::/0" + +hi = i:taboption("timing", Value, "HelloInterval", translate("Hello interval")) +hi.optional = true +hi.datatype = "ufloat" +hi.placeholder = "5.0" +hi.write = write_float + +hv = i:taboption("timing", Value, "HelloValidityTime", translate("Hello validity time")) +hv.optional = true +hv.datatype = "ufloat" +hv.placeholder = "40.0" +hv.write = write_float + +ti = i:taboption("timing", Value, "TcInterval", translate("TC interval")) +ti.optional = true +ti.datatype = "ufloat" +ti.placeholder = "2.0" +ti.write = write_float + +tv = i:taboption("timing", Value, "TcValidityTime", translate("TC validity time")) +tv.optional = true +tv.datatype = "ufloat" +tv.placeholder = "256.0" +tv.write = write_float + +mi = i:taboption("timing", Value, "MidInterval", translate("MID interval")) +mi.optional = true +mi.datatype = "ufloat" +mi.placeholder = "18.0" +mi.write = write_float + +mv = i:taboption("timing", Value, "MidValidityTime", translate("MID validity time")) +mv.optional = true +mv.datatype = "ufloat" +mv.placeholder = "324.0" +mv.write = write_float + +ai = i:taboption("timing", Value, "HnaInterval", translate("HNA interval")) +ai.optional = true +ai.datatype = "ufloat" +ai.placeholder = "18.0" +ai.write = write_float + +av = i:taboption("timing", Value, "HnaValidityTime", translate("HNA validity time")) +av.optional = true +av.datatype = "ufloat" +av.placeholder = "108.0" +av.write = write_float + +return m