3g.sh 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. set_3g_led() {
  2. grep WRT54G3G /proc/diag/model >/dev/null || return 0
  3. echo "$1" > /proc/diag/led/3g_green
  4. echo "$2" > /proc/diag/led/3g_blue
  5. echo "$3" > /proc/diag/led/3g_blink
  6. }
  7. scan_3g() {
  8. local device
  9. scan_ppp "$@"
  10. config_get device "$1" device
  11. # try to figure out the device if it's invalid
  12. [ -n "$device" -a -e "$device" ] || {
  13. for device in /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/tts/2 /dev/usb/tts/0 /dev/noz0; do
  14. [ -e "$device" ] && {
  15. config_set "$1" device "$device"
  16. break
  17. }
  18. done
  19. }
  20. # enable 3G with the 3G button by default
  21. config_get button "$1" button
  22. [ -z "$button" ] && {
  23. config_set "$1" button 1
  24. }
  25. }
  26. stop_interface_3g() {
  27. set_3g_led 0 0 0
  28. killall gcom >/dev/null 2>/dev/null
  29. }
  30. setup_interface_3g() {
  31. local iface="$1"
  32. local config="$2"
  33. local chat="/etc/chatscripts/3g.chat"
  34. config_get device "$config" device
  35. for module in slhc ppp_generic ppp_async; do
  36. /sbin/insmod $module 2>&- >&-
  37. done
  38. config_get apn "$cfg" apn
  39. config_get service "$cfg" service
  40. config_get pincode "$cfg" pincode
  41. config_get mtu "$cfg" mtu
  42. set_3g_led 1 0 1
  43. # figure out hardware specific commands for the card
  44. case "$service" in
  45. cdma|evdo) chat="/etc/chatscripts/evdo.chat";;
  46. *)
  47. cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
  48. if echo "$cardinfo" | grep Novatel; then
  49. case "$service" in
  50. umts_only) CODE=2;;
  51. gprs_only) CODE=1;;
  52. *) CODE=0;;
  53. esac
  54. mode="AT\$NWRAT=${CODE},2"
  55. elif echo "$cardinfo" | grep Option; then
  56. case "$service" in
  57. umts_only) CODE=1;;
  58. gprs_only) CODE=0;;
  59. *) CODE=3;;
  60. esac
  61. mode="AT_OPSYS=${CODE}"
  62. fi
  63. # Don't assume Option to be default as it breaks with Huawei Cards/Sticks
  64. PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
  65. echo "$cfg(3g): Failed to set the PIN code."
  66. set_3g_led 0 0 0
  67. return 1
  68. }
  69. test -z "$mode" || {
  70. MODE="$mode" gcom -d "$device" -s /etc/gcom/setmode.gcom
  71. }
  72. esac
  73. set_3g_led 1 0 0
  74. config_set "$config" "connect" "${apn:+USE_APN=$apn }/usr/sbin/chat -t5 -v -E -f $chat"
  75. start_pppd "$config" \
  76. noaccomp \
  77. nopcomp \
  78. novj \
  79. nobsdcomp \
  80. noauth \
  81. lock \
  82. crtscts \
  83. ${mtu:+mtu $mtu mru $mtu} \
  84. 115200 "$device"
  85. }