1234567891011121314151617181920212223242526272829303132333435363738394041 |
- local json = require 'luci.json'
- local util = require 'luci.util'
- local fs = require 'nixio.fs'
- local ifname_address_cache = {}
- function ifname2address(ifname)
- local ifaddress
- if ifname_address_cache[ifname] ~= nil then
- ifaddress = ifname_address_cache[ifname]
- else
- ifaddress = util.trim(fs.readfile("/sys/class/net/" .. ifname .. "/address"))
- ifname_address_cache[ifname] = ifaddress
- end
- return ifaddress
- end
- function batadv()
- local interfaces = {}
- local list = io.lines("/sys/kernel/debug/batman_adv/bat0/originators")
- for line in list do
- local mac1, lastseen, tq, mac2, ifname =
- line:match("^([0-9a-f:]+) +(%d+%.%d+)s +%( *(%d+)%) +([0-9a-f:]+) +%[ *(.-)%]")
- if mac1 ~= nil and mac1 == mac2 then
- ifaddress = ifname2address(ifname)
- if interfaces[ifaddress] == nil then
- interfaces[ifaddress] = { neighbours = {} }
- end
- interfaces[ifaddress].neighbours[mac1] = { tq = tonumber(tq)
- , lastseen = tonumber(lastseen)
- }
- end
- end
- return interfaces
- end
- return batadv()
|