04-wireless 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/bin/sh
  2. set -e
  3. [ "${IFACE%%[0-9]*}" = "wlan" ] || exit 0
  4. [ "$IF_WIRELESS_SSID" ] || exit 1
  5. [ "$IF_WIRELESS_HWMODE" ] || IF_WIRELESS_HWMODE=g
  6. [ "$IF_WIRELESS_EXTENSION" ] || IF_WIRELESS_EXTENSION=0
  7. [ -x /usr/sbin/rfkill ] && rfkill unblock wlan 2>/dev/null
  8. wpa=0
  9. wpa1=0
  10. wpa2=0
  11. pairwise=""
  12. case "$IF_WIRELESS_SECURITY" in
  13. none)
  14. sec=1
  15. ;;
  16. wep)
  17. sec=2
  18. ;;
  19. wpa)
  20. sec=1
  21. wpa1=1
  22. pairwise=TKIP
  23. ;;
  24. wpa2)
  25. sec=1
  26. wpa2=1
  27. pairwise=CCMP
  28. ;;
  29. wpa+wpa2)
  30. sec=1
  31. wpa=1
  32. ;;
  33. *)
  34. sec=1
  35. ;;
  36. esac
  37. [ "$IF_WIRELESS_PAIRWISE" ] || IF_WIRELESS_PAIRWISE=$pairwise
  38. case "$IF_WIRELESS_MODE" in
  39. ap)
  40. logger -t hostap "Creating hostapd configuration"
  41. cat /etc/hostapd.conf > /tmp/hostapd.conf
  42. chmod 600 /tmp/hostapd.conf
  43. echo "interface=${IFACE}" >> /tmp/hostapd.conf
  44. echo "ssid=$IF_WIRELESS_SSID" >> /tmp/hostapd.conf
  45. echo "channel=$IF_WIRELESS_CHANNEL" >> /tmp/hostapd.conf
  46. echo "hw_mode=$IF_WIRELESS_HWMODE" >> /tmp/hostapd.conf
  47. echo "auth_algs=$sec" >> /tmp/hostapd.conf
  48. [ $wpa -eq 0 ] && [ $wpa1 -eq 0 ] && [ $wpa2 -eq 0 ] && {
  49. logger -t hostap "using no security mechanism"
  50. echo "wpa=0" >> /tmp/hostapd.conf
  51. }
  52. [ $wpa1 -eq 1 ] && {
  53. logger -t hostap "using WPA for security"
  54. echo "wpa=1" >> /tmp/hostapd.conf
  55. echo "wpa_key_mgmt=WPA-PSK" >> /tmp/hostapd.conf
  56. echo "wpa_pairwise=$IF_WIRELESS_PAIRWISE" >> /tmp/hostapd.conf
  57. echo "wpa_passphrase=$IF_WIRELESS_PASSPHRASE" >> /tmp/hostapd.conf
  58. }
  59. [ $wpa2 -eq 1 ] && {
  60. logger -t hostap "using WPA2 for security"
  61. echo "wpa=2" >> /tmp/hostapd.conf
  62. echo "wpa_key_mgmt=WPA-PSK" >> /tmp/hostapd.conf
  63. echo "rsn_pairwise=$IF_WIRELESS_PAIRWISE" >> /tmp/hostapd.conf
  64. echo "wpa_passphrase=$IF_WIRELESS_PASSPHRASE" >> /tmp/hostapd.conf
  65. }
  66. [ $wpa -eq 1 ] && {
  67. logger -t hostap "using WPA and WPA2 for security"
  68. echo "wpa=3" >> /tmp/hostapd.conf
  69. echo "wpa_key_mgmt=WPA-PSK" >> /tmp/hostapd.conf
  70. echo "wpa_pairwise=TKIP" >> /tmp/hostapd.conf
  71. echo "rsn_pairwise=CCMP" >> /tmp/hostapd.conf
  72. echo "wpa_passphrase=$IF_WIRELESS_PASSPHRASE" >> /tmp/hostapd.conf
  73. }
  74. [ -f /etc/hostapd.conf.post ] && \
  75. cat /etc/hostapd.conf.post >> /tmp/hostapd.conf
  76. ;;
  77. sta)
  78. ip link set up dev ${IFACE}
  79. [ $IF_WIRELESS_EXTENSION -eq 1 ] && {
  80. [ -x /usr/sbin/iwconfig ] || {
  81. logger -t wireless "No wireless-tools found"
  82. exit 1
  83. }
  84. driver=wext
  85. iwconfig ${IFACE} essid $IF_WIRELESS_SSID
  86. } || {
  87. [ -x /usr/sbin/iw ] || {
  88. logger -t wireless "No iw utility found"
  89. exit 1
  90. }
  91. driver=nl80211
  92. [ $sec -eq 2 ] && {
  93. iw dev ${IFACE} connect $IF_WIRELESS_SSID key d:0:$IF_WIRELESS_PASSPHRASE
  94. } || {
  95. iw dev ${IFACE} connect $IF_WIRELESS_SSID
  96. }
  97. }
  98. [ $wpa2 -eq 1 ] && {
  99. [ -x /usr/sbin/wpa_supplicant ] || {
  100. logger -t wireless "No wpa_supplicant found"
  101. exit 1
  102. }
  103. touch /tmp/wpa_supplicant.conf
  104. chmod 600 /tmp/wpa_supplicant.conf
  105. echo "network={" > /tmp/wpa_supplicant.conf
  106. echo " ssid=\"$IF_WIRELESS_SSID\"" >> /tmp/wpa_supplicant.conf
  107. echo " psk=\"$IF_WIRELESS_PASSPHRASE\"" >> /tmp/wpa_supplicant.conf
  108. echo " priority=5" >> /tmp/wpa_supplicant.conf
  109. echo "}" >> /tmp/wpa_supplicant.conf
  110. wpa_supplicant -B -D${driver} -i${IFACE} -P/var/run/wpa_supplicant.pid -c/tmp/wpa_supplicant.conf
  111. }
  112. ;;
  113. *)
  114. echo "Unknown operation mode $IF_WIRELESS_MODE given!"
  115. exit 1
  116. ;;
  117. esac
  118. exit 0