diff options
Diffstat (limited to 'protocols/relay/luasrc')
-rw-r--r-- | protocols/relay/luasrc/model/cbi/admin_network/proto_relay.lua | 77 | ||||
-rw-r--r-- | protocols/relay/luasrc/model/network/proto_relay.lua | 165 |
2 files changed, 242 insertions, 0 deletions
diff --git a/protocols/relay/luasrc/model/cbi/admin_network/proto_relay.lua b/protocols/relay/luasrc/model/cbi/admin_network/proto_relay.lua new file mode 100644 index 0000000000..017bb9bfa6 --- /dev/null +++ b/protocols/relay/luasrc/model/cbi/admin_network/proto_relay.lua @@ -0,0 +1,77 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2011 Jo-Philipp Wich <xm@subsignal.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 +]]-- + +local map, section, net = ... + +local ipaddr, network +local forward_bcast, forward_dhcp, gateway, expiry, retry, table + + +ipaddr = section:taboption("general", Value, "ipaddr", + translate("Local IPv4 address"), + translate("Address to access local relay bridge")) + +ipaddr.datatype = "ip4addr" + + +network = s:taboption("general", DynamicList, "network", translate("Relay between networks")) +network.widget = "checkbox" +network.exclude = arg[1] +network.template = "cbi/network_netlist" +network.nocreate = true +network.nobridges = true +network.novirtual = true +network:depends("proto", "relay") + + +forward_bcast = section:taboption("advanced", Flag, "forward_bcast", + translate("Forward broadcast traffic")) + +forward_bcast.default = forward_bcast.enabled + + +forward_dhcp = section:taboption("advanced", Flag, "forward_dhcp", + translate("Forward DHCP traffic")) + +forward_dhcp.default = forward_dhcp.enabled + + +gateway = section:taboption("advanced", Value, "gateway", + translate("Use DHCP gateway"), + translate("Override the gateway in DHCP responses")) + +gateway.datatype = "ip4addr" +gateway:depends("forward_dhcp", forward_dhcp.enabled) + + +expiry = section:taboption("advanced", Value, "expiry", + translate("Host expiry timeout"), + translate("Specifies the maximum amount of seconds after which hosts are presumed to be dead")) + +expiry.placeholder = "30" +expiry.datatype = "min(1)" + + +retry = section:taboption("advanced", Value, "retry", + translate("ARP retry threshold"), + translate("Specifies the maximum amount of failed ARP requests until hosts are presumed to be dead")) + +retry.placeholder = "5" +retry.datatype = "min(1)" + + +table = section:taboption("advanced", Value, "table", + translate("Use routing table"), + translate("Override the table used for internal routes")) + +table.placeholder = "16800" +table.datatype = "range(0,65535)" diff --git a/protocols/relay/luasrc/model/network/proto_relay.lua b/protocols/relay/luasrc/model/network/proto_relay.lua new file mode 100644 index 0000000000..03f6d6abf0 --- /dev/null +++ b/protocols/relay/luasrc/model/network/proto_relay.lua @@ -0,0 +1,165 @@ +--[[ +LuCI - Network model - relay protocol extension + +Copyright 2011 Jo-Philipp Wich <xm@subsignal.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 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +]]-- + +local netmod = luci.model.network +local device = luci.util.class(netmod.interface) + +netmod:register_pattern_virtual("^relay-%w") + +local proto = netmod:register_protocol("relay") + +function proto.get_i18n(self) + return luci.i18n.translate("Relay bridge") +end + +function proto.ifname(self) + return "relay-" .. self.sid +end + +function proto.opkg_package(self) + return "relayd" +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/network/relay.sh") +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interface(self) + return device(self.sid, self) +end + +function proto.get_interfaces(self) + if not self.ifaces then + local ifs = { } + local _, net, dev + + for net in luci.util.imatch(self:_get("network")) do + net = netmod:get_network(net) + if net then + dev = net:get_interface() + if dev then + ifs[dev:name()] = dev + end + end + end + + for dev in luci.util.imatch(self:_get("ifname")) do + dev = netmod:get_interface(dev) + if dev then + ifs[dev:name()] = dev + end + end + + self.ifaces = { } + + for _, dev in luci.util.kspairs(ifs) do + self.ifaces[#self.ifaces+1] = dev + end + end + + return self.ifaces +end + +function proto.uptime(self) + local net + local upt = 0 + for net in luci.util.imatch(self:_get("network")) do + net = netmod:get_network(net) + if net then + upt = math.max(upt, net:uptime()) + end + end + return upt +end + + +function device.__init__(self, ifname, network) + self.ifname = ifname + self.network = network +end + +function device.type(self) + return "tunnel" +end + +function device.is_up(self) + if self.network then + local _, dev + for _, dev in ipairs(self.network:get_interfaces()) do + if not dev:is_up() then + return false + end + end + return true + end + return false +end + +function device._stat(self, what) + local v = 0 + if self.network then + local _, dev + for _, dev in ipairs(self.network:get_interfaces()) do + v = v + dev[what](dev) + end + end + return v +end + +function device.rx_bytes(self) return self:_stat("rx_bytes") end +function device.tx_bytes(self) return self:_stat("tx_bytes") end +function device.rx_packets(self) return self:_stat("rx_packets") end +function device.tx_packets(self) return self:_stat("tx_packets") end + +function device.mac(self) + if self.network then + local _, dev + for _, dev in ipairs(self.network:get_interfaces()) do + return dev:mac() + end + end +end + +function device.ipaddrs(self) + local addrs = { } + if self.network then + addrs[1] = luci.ip.IPv4(self.network:_get("ipaddr")) + end + return addrs +end + +function device.ip6addrs(self) + return { } +end + +function device.shortname(self) + return "%s %q" % { luci.i18n.translate("Relay"), self.ifname } +end + +function device.get_type_i18n(self) + return luci.i18n.translate("Relay Bridge") +end |