#!/bin/sh [ -n "$INCLUDE_ONLY" ] || { NOT_INCLUDED=1 INCLUDE_ONLY=1 . ../netifd-proto.sh . ./ppp.sh init_proto "$@" } proto_3g_init_config() { no_device=1 available=1 ppp_generic_init_config proto_config_add_string "device:device" proto_config_add_string "apn" proto_config_add_string "service" proto_config_add_string "pincode" proto_config_add_string "delay" proto_config_add_string "dialnumber" } proto_3g_setup() { local interface="$1" local chat json_get_var device device json_get_var apn apn json_get_var service service json_get_var pincode pincode json_get_var dialnumber dialnumber json_get_var delay delay [ -n "$dat_device" ] && device=$dat_device device="$(readlink -f $device)" [ -e "$device" ] || { proto_set_available "$interface" 0 return 1 } [ -n "$delay" ] && sleep "$delay" case "$service" in cdma|evdo) chat="/etc/chatscripts/evdo.chat" ;; *) chat="/etc/chatscripts/3g.chat" cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom) if echo "$cardinfo" | grep -q Novatel; then case "$service" in umts_only) CODE=2;; gprs_only) CODE=1;; *) CODE=0;; esac export MODE="AT\$NWRAT=${CODE},2" elif echo "$cardinfo" | grep -q Option; then case "$service" in umts_only) CODE=1;; gprs_only) CODE=0;; *) CODE=3;; esac export MODE="AT_OPSYS=${CODE}" elif echo "$cardinfo" | grep -q "Sierra Wireless"; then SIERRA=1 elif echo "$cardinfo" | grep -qi huawei; then case "$service" in umts_only) CODE="14,2";; gprs_only) CODE="13,1";; *) CODE="2,2";; esac export MODE="AT^SYSCFG=${CODE},3FFFFFFF,2,4" elif echo "$cardinfo" | grep -q "MikroTik"; then COMMAND="AT+CFUN=1" gcom -d "$device" -s /etc/gcom/runcommand.gcom || return 1 fi if [ -n "$pincode" ]; then PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || { proto_notify_error "$interface" PIN_FAILED proto_block_restart "$interface" return 1 } fi [ -n "$MODE" ] && gcom -d "$device" -s /etc/gcom/setmode.gcom # wait for carrier to avoid firmware stability bugs [ -n "$SIERRA" ] && { gcom -d "$device" -s /etc/gcom/getcarrier.gcom || return 1 } if [ -z "$dialnumber" ]; then dialnumber="*99***1#" fi ;; esac connect="${apn:+USE_APN=$apn }DIALNUMBER=$dialnumber /usr/sbin/chat -t5 -v -E -f $chat" ppp_generic_setup "$interface" \ noaccomp \ nopcomp \ novj \ nobsdcomp \ noauth \ set EXTENDPREFIX=1 \ lock \ crtscts \ 115200 "$device" return 0 } proto_3g_teardown() { proto_kill_command "$interface" } [ -z "$NOT_INCLUDED" ] || add_protocol 3g