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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. }
  29. )
  30. uci:section('network', 'interface', mesh .. '_vlan',
  31. {
  32. ifname = '@' .. mesh .. '.' .. config.mesh_vlan,
  33. proto = 'batadv',
  34. mesh = 'bat0',
  35. }
  36. )
  37. else
  38. uci:section('network', 'interface', mesh,
  39. {
  40. proto = 'batadv',
  41. mesh = 'bat0',
  42. }
  43. )
  44. end
  45. uci:delete('wireless', mesh)
  46. uci:section('wireless', 'wifi-iface', mesh,
  47. {
  48. device = radio,
  49. network = mesh,
  50. mode = 'adhoc',
  51. ssid = config.mesh_ssid,
  52. bssid = config.mesh_bssid,
  53. macaddr = util.generate_mac(3, index),
  54. mcast_rate = config.mesh_mcast_rate,
  55. }
  56. )
  57. end
  58. local radios = {}
  59. uci:foreach('wireless', 'wifi-device',
  60. function(s)
  61. table.insert(radios, s['.name'])
  62. end
  63. )
  64. for index, radio in ipairs(radios) do
  65. local hwmode = uci:get('wireless', radio, 'hwmode')
  66. local config
  67. if hwmode == '11g' or hwmode == '11ng' then
  68. configure_radio(radio, index, site.wifi24)
  69. elseif hwmode == '11a' or hwmode == '11na' then
  70. configure_radio(radio, index, site.wifi5)
  71. end
  72. end
  73. uci:save('wireless')
  74. uci:save('network')
  75. uci:commit('wireless')
  76. uci:commit('network')