addresses 621 B

123456789101112131415
  1. local ip = require 'luci.ip'
  2. local bit = require 'nixio'.bit
  3. local addresses = {}
  4. for line in io.lines('/proc/net/if_inet6') do
  5. local matches = { line:match('^' .. string.rep('(%x%x%x%x)', 8) .. string.rep(' %x%x', 3) .. ' (%x%x)%s+([^%s]+)$') }
  6. -- exclude wrong interfaces and deprecated as well as tentative addresses
  7. -- (see /include/uapi/linux/if_addr.h in linux source for flags)
  8. if matches[10] == 'br-client' and bit.band(tonumber(matches[9], 16), 0x60) == 0 then
  9. table.insert(addresses, ip.IPv6(string.format('%s:%s:%s:%s:%s:%s:%s:%s', unpack(matches))):string():lower())
  10. end
  11. end
  12. return addresses