config_mesh_interface 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/lua
  2. local util = require 'gluon.util'
  3. local fs = require 'nixio.fs'
  4. local ifname = os.getenv('IFNAME')
  5. local cmd = arg[1]
  6. if cmd == 'setup' then
  7. local fixed_mtu = tonumber(os.getenv('FIXED_MTU')) or 0
  8. local transitive = tonumber(os.getenv('TRANSITIVE')) or 0
  9. local mtu = tonumber(arg[2])
  10. if os.execute('ip link show primary0 >/dev/null 2>&1') ~= 0 then
  11. os.execute([[
  12. ip link add primary0 type dummy
  13. echo 1 > /proc/sys/net/ipv6/conf/primary0/disable_ipv6
  14. ip link set primary0 address ]] .. util.generate_mac(3) .. [[ mtu ]] .. mtu .. [[ up
  15. echo 'bat0' > /sys/class/net/primary0/batman_adv/mesh_iface
  16. ]])
  17. end
  18. if fixed_mtu == 0 then
  19. local lower = fs.glob('/sys/class/net/' .. ifname .. '/lower_*/wireless')()
  20. if lower then
  21. lower = lower:match('/lower_([^/]+)/wireless$')
  22. util.exec('ip', 'link', 'set', 'dev', lower, 'mtu', tostring(mtu+4))
  23. end
  24. util.exec('ip', 'link', 'set', 'dev', ifname, 'mtu', tostring(mtu))
  25. end
  26. local file = assert(io.open('/sys/class/net/' .. ifname .. '/batman_adv/mesh_iface', 'w'))
  27. file:write('bat0')
  28. file:close()
  29. file = assert(io.open('/sys/class/net/' .. ifname .. '/batman_adv/no_rebroadcast', 'w'))
  30. file:write(tostring(transitive))
  31. file:close()
  32. elseif cmd == 'teardown' then
  33. local file = io.open('/sys/class/net/' .. ifname .. '/batman_adv/mesh_iface', 'w')
  34. if file then
  35. file:write('none')
  36. file:close()
  37. end
  38. local other = false
  39. for lower in fs.glob('/sys/class/net/bat0/lower_*') do
  40. if lower ~= '/sys/class/net/bat0/lower_primary0' then
  41. other = true
  42. break
  43. end
  44. end
  45. if not other then
  46. os.execute('ip link del primary0')
  47. end
  48. end