batadv 1.1 KB

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