All protos for wwan (ncm,qmi,mbim) do have a delay option. To standardize that add also the missing delay option to the 3g proto. Signed-off-by: Florian Eckert <fe@dev.tdt.de>
		
			
				
	
	
		
			117 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/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"
 | 
						|
			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
 |