123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- -- Copyright 2011 Jo-Philipp Wich <jow@openwrt.org>
- -- Licensed to the public under the Apache License 2.0.
- 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("/etc/init.d/relayd")
- 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
|