320-gluon-mesh-batman-adv-core-wireless 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #!/usr/bin/lua
  2. local site = require 'gluon.site_config'
  3. local util = require 'gluon.util'
  4. local uci = require('luci.model.uci').cursor()
  5. local function configure_radio(radio, index, config)
  6. uci:delete('wireless', radio, 'disabled')
  7. uci:set('wireless', radio, 'channel', config.channel)
  8. uci:set('wireless', radio, 'htmode', config.htmode)
  9. uci:set('wireless', radio, 'country', site.regdom)
  10. local client = 'client_' .. radio
  11. uci:delete('wireless', client)
  12. uci:section('wireless', 'wifi-iface', client,
  13. {
  14. device = radio,
  15. network = 'client',
  16. mode = 'ap',
  17. ssid = config.ssid,
  18. macaddr = util.generate_mac(2, index),
  19. }
  20. )
  21. local mesh = 'mesh_' .. radio
  22. uci:delete('network', mesh)
  23. uci:delete('network', mesh .. '_vlan')
  24. if config.mesh_vlan then
  25. uci:section('network', 'interface', mesh,
  26. {
  27. proto = 'none',
  28. mtu = '1532',
  29. }
  30. )
  31. uci:section('network', 'interface', mesh .. '_vlan',
  32. {
  33. ifname = '@' .. mesh .. '.' .. config.mesh_vlan,
  34. proto = 'batadv',
  35. mtu = '1528',
  36. mesh = 'bat0',
  37. }
  38. )
  39. else
  40. uci:section('network', 'interface', mesh,
  41. {
  42. proto = 'batadv',
  43. mtu = '1528',
  44. mesh = 'bat0',
  45. }
  46. )
  47. end
  48. uci:delete('wireless', mesh)
  49. uci:section('wireless', 'wifi-iface', mesh,
  50. {
  51. device = radio,
  52. network = mesh,
  53. mode = 'adhoc',
  54. ssid = config.mesh_ssid,
  55. bssid = config.mesh_bssid,
  56. macaddr = util.generate_mac(3, index),
  57. mcast_rate = config.mesh_mcast_rate,
  58. }
  59. )
  60. end
  61. local radios = {}
  62. uci:foreach('wireless', 'wifi-device',
  63. function(s)
  64. table.insert(radios, s['.name'])
  65. end
  66. )
  67. for index, radio in ipairs(radios) do
  68. local hwmode = uci:get('wireless', radio, 'hwmode')
  69. local config
  70. if hwmode == '11g' or hwmode == '11ng' then
  71. configure_radio(radio, index, site.wifi24)
  72. elseif hwmode == '11a' or hwmode == '11na' then
  73. configure_radio(radio, index, site.wifi5)
  74. end
  75. end
  76. uci:save('wireless')
  77. uci:save('network')
  78. uci:commit('wireless')
  79. uci:commit('network')