batadv 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. local json = require 'luci.json'
  2. local util = require 'luci.util'
  3. local fs = require 'nixio.fs'
  4. local ifname_address_cache = {}
  5. function ifname2address(ifname)
  6. local ifaddress
  7. if ifname_address_cache[ifname] ~= nil then
  8. ifaddress = ifname_address_cache[ifname]
  9. else
  10. ifaddress = util.trim(fs.readfile("/sys/class/net/" .. ifname .. "/address"))
  11. ifname_address_cache[ifname] = ifaddress
  12. end
  13. return ifaddress
  14. end
  15. function batadv()
  16. local interfaces = {}
  17. local list = io.lines("/sys/kernel/debug/batman_adv/bat0/originators")
  18. for line in list do
  19. local mac1, lastseen, tq, mac2, ifname =
  20. line:match("^([0-9a-f:]+) +(%d+%.%d+)s +%( *(%d+)%) +([0-9a-f:]+) +%[ *(.-)%]")
  21. if mac1 ~= nil and mac1 == mac2 then
  22. ifaddress = ifname2address(ifname)
  23. if interfaces[ifaddress] == nil then
  24. interfaces[ifaddress] = { neighbours = {} }
  25. end
  26. interfaces[ifaddress].neighbours[mac1] = { tq = tonumber(tq)
  27. , lastseen = tonumber(lastseen)
  28. }
  29. end
  30. end
  31. return interfaces
  32. end
  33. return batadv()