mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +00:00 
			
		
		
		
	Update ModemManager
This commit is contained in:
		
							parent
							
								
									7cdfa10a74
								
							
						
					
					
						commit
						3cf3663892
					
				
					 3 changed files with 149 additions and 35 deletions
				
			
		| 
						 | 
				
			
			@ -8,9 +8,9 @@
 | 
			
		|||
include $(TOPDIR)/rules.mk
 | 
			
		||||
 | 
			
		||||
PKG_NAME:=modemmanager
 | 
			
		||||
PKG_SOURCE_VERSION:=1.23.11-dev
 | 
			
		||||
PKG_SOURCE_VERSION:=1.23.12-dev
 | 
			
		||||
#PKG_SOURCE_VERSION:=df8287bf6c2febd068d06f0f45194bc622118bd4
 | 
			
		||||
PKG_RELEASE:=20
 | 
			
		||||
PKG_RELEASE:=21
 | 
			
		||||
 | 
			
		||||
PKG_SOURCE_PROTO:=git
 | 
			
		||||
PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/ModemManager.git
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -308,46 +308,160 @@ modemmanager_set_allowed_mode() {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
modemmanager_check_state_failed() {
 | 
			
		||||
	local device="$1"
 | 
			
		||||
	local interface="$2"
 | 
			
		||||
	local modemstatus="$3"
 | 
			
		||||
 | 
			
		||||
	local reason
 | 
			
		||||
 | 
			
		||||
	reason="$(modemmanager_get_field "${modemstatus}" "modem.generic.state-failed-reason")"
 | 
			
		||||
 | 
			
		||||
	case "$reason" in
 | 
			
		||||
		"sim-missing")
 | 
			
		||||
		    echo "SIM missing"
 | 
			
		||||
		    proto_notify_error "${interface}" MM_FAILED_REASON_SIM_MISSING
 | 
			
		||||
		    proto_block_restart "${interface}"
 | 
			
		||||
		    return 1
 | 
			
		||||
		    ;;
 | 
			
		||||
		*)
 | 
			
		||||
		    proto_notify_error "${interface}" MM_FAILED_REASON_UNKNOWN
 | 
			
		||||
		    proto_block_restart "${interface}"
 | 
			
		||||
		    return 1
 | 
			
		||||
		    ;;
 | 
			
		||||
	esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
modemmanager_check_state_lock_simpin() {
 | 
			
		||||
	local interface="$1"
 | 
			
		||||
	local unlock_value="$2"
 | 
			
		||||
 | 
			
		||||
	[ $unlock_value -ge 2 ] && return 0
 | 
			
		||||
 | 
			
		||||
	echo "please check PIN (remaining attempts: ${unlock_value})"
 | 
			
		||||
	proto_notify_error "${interface}" MM_CHECK_UNLOCK_PIN
 | 
			
		||||
	proto_block_restart "${interface}"
 | 
			
		||||
	return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
modemmanager_check_state_lock_simpuk() {
 | 
			
		||||
	local interface="$1"
 | 
			
		||||
	local unlock_value="$2"
 | 
			
		||||
 | 
			
		||||
	echo "unlock with PUK required (remaining attempts: ${unlock_value})"
 | 
			
		||||
	proto_notify_error "${interface}" MM_CHECK_UNLOCK_PIN
 | 
			
		||||
	proto_block_restart "${interface}"
 | 
			
		||||
	return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
modemmanager_check_state_lock_sim() {
 | 
			
		||||
	local interface="$1"
 | 
			
		||||
	local unlock_lock="$2"
 | 
			
		||||
	local unlock_value="$3"
 | 
			
		||||
 | 
			
		||||
	case "$unlock_lock" in
 | 
			
		||||
		"sim-pin")
 | 
			
		||||
			modemmanager_check_state_lock_simpin \
 | 
			
		||||
				"$interface" \
 | 
			
		||||
				"$unlock_value"
 | 
			
		||||
			[ "$?" -ne "0" ] && return 1
 | 
			
		||||
			;;
 | 
			
		||||
		"sim-puk")
 | 
			
		||||
			modemmanager_check_state_lock_simpuk \
 | 
			
		||||
				"$interface" \
 | 
			
		||||
				"$unlock_value"
 | 
			
		||||
			[ "$?" -ne "0" ] && return 1
 | 
			
		||||
			;;
 | 
			
		||||
		*)
 | 
			
		||||
			echo "PIN/PUK check '$unlock_lock' not implemented"
 | 
			
		||||
			;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
modemmanager_check_state_locked() {
 | 
			
		||||
	local device="$1"
 | 
			
		||||
	local interface="$2"
 | 
			
		||||
	local modemstatus="$3"
 | 
			
		||||
	local pincode="$4"
 | 
			
		||||
 | 
			
		||||
	local unlock_required unlock_retries unlock_retry unlock_lock
 | 
			
		||||
	local unlock_value unlock_match
 | 
			
		||||
 | 
			
		||||
	if [ -z "$pincode" ]; then
 | 
			
		||||
		echo "PIN required"
 | 
			
		||||
		proto_notify_error "${interface}" MM_PINCODE_REQUIRED
 | 
			
		||||
		proto_block_restart "${interface}"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	unlock_required="$(modemmanager_get_field "${modemstatus}" "modem.generic.unlock-required")"
 | 
			
		||||
	unlock_retries="$(modemmanager_get_multivalue_field "${modemstatus}" "modem.generic.unlock-retries")"
 | 
			
		||||
 | 
			
		||||
	# Output of unlock-retries:
 | 
			
		||||
	#   'sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)'
 | 
			
		||||
	# Replace alle '<spaces>' of unlock-retures with '', so we could
 | 
			
		||||
	# iterate in the for loop. Replace result is:
 | 
			
		||||
	#   'sim-pin(3),sim-puk(10),sim-pin2(3),sim-puk2(10)'
 | 
			
		||||
	unlock_match=0
 | 
			
		||||
	for unlock_retry in $(echo "${unlock_retries// /}" | tr "," "\n"); do
 | 
			
		||||
		unlock_lock="${unlock_retry%%(*}"
 | 
			
		||||
 | 
			
		||||
		# extract x value from 'sim-puk(x)' || 'sim-pin(x)'
 | 
			
		||||
		unlock_value="${unlock_retry##*(}"
 | 
			
		||||
		unlock_value="${unlock_value:0:-1}"
 | 
			
		||||
 | 
			
		||||
		[ "$unlock_lock" = "$unlock_required" ] && {
 | 
			
		||||
			unlock_match=1
 | 
			
		||||
			modemmanager_check_state_lock_sim \
 | 
			
		||||
				"$interface" \
 | 
			
		||||
				"$unlock_lock" \
 | 
			
		||||
				"$unlock_value"
 | 
			
		||||
			[ "$?" -ne "0" ] && return 1
 | 
			
		||||
		}
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	if [ "$unlock_match" = "0" ]; then
 | 
			
		||||
		echo "unable to check PIN/PUK attempts"
 | 
			
		||||
		proto_notify_error "${interface}" MM_CHECK_UNLOCK_UNKNOWN
 | 
			
		||||
		proto_block_restart "${interface}"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	mmcli --modem="${device}" -i any --pin=${pincode} || {
 | 
			
		||||
	    proto_notify_error "${interface}" MM_PINCODE_WRONG
 | 
			
		||||
	    proto_block_restart "${interface}"
 | 
			
		||||
	    return 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
modemmanager_check_state() {
 | 
			
		||||
	local device="$1"
 | 
			
		||||
	local modemstatus="$2"
 | 
			
		||||
	local pincode="$3"
 | 
			
		||||
	local interface="$2"
 | 
			
		||||
	local modemstatus="$3"
 | 
			
		||||
	local pincode="$4"
 | 
			
		||||
 | 
			
		||||
	local state reason
 | 
			
		||||
	local state
 | 
			
		||||
 | 
			
		||||
	state="$(modemmanager_get_field "${modemstatus}" "state")"
 | 
			
		||||
	state="${state%% *}"
 | 
			
		||||
	reason="$(modemmanager_get_field "${modemstatus}" "state-failed-reason")"
 | 
			
		||||
	state="$(modemmanager_get_field "${modemstatus}" "modem.generic.state")"
 | 
			
		||||
 | 
			
		||||
	case "$state" in
 | 
			
		||||
		"failed")
 | 
			
		||||
			case "$reason" in
 | 
			
		||||
				"sim-missing")
 | 
			
		||||
					echo "SIM missing"
 | 
			
		||||
					proto_notify_error "${interface}" MM_FAILED_REASON_SIM_MISSING
 | 
			
		||||
					proto_block_restart "${interface}"
 | 
			
		||||
					return 1
 | 
			
		||||
					;;
 | 
			
		||||
				*)
 | 
			
		||||
					proto_notify_error "${interface}" MM_FAILED_REASON_UNKNOWN
 | 
			
		||||
					proto_block_restart "${interface}"
 | 
			
		||||
					return 1
 | 
			
		||||
					;;
 | 
			
		||||
			esac
 | 
			
		||||
			modemmanager_check_state_failed "$device" \
 | 
			
		||||
				"$interface" \
 | 
			
		||||
				"$modemstatus"
 | 
			
		||||
			[ "$?" -ne "0" ] && return 1
 | 
			
		||||
			;;
 | 
			
		||||
		"locked")
 | 
			
		||||
			if [ -n "$pincode" ]; then
 | 
			
		||||
				mmcli --modem="${device}" -i any --pin=${pincode} || {
 | 
			
		||||
					proto_notify_error "${interface}" MM_PINCODE_WRONG
 | 
			
		||||
					proto_block_restart "${interface}"
 | 
			
		||||
					return 1
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				echo "PIN required"
 | 
			
		||||
				proto_notify_error "${interface}" MM_PINCODE_REQUIRED
 | 
			
		||||
				proto_block_restart "${interface}"
 | 
			
		||||
				return 1
 | 
			
		||||
			fi
 | 
			
		||||
			modemmanager_check_state_locked "$device" \
 | 
			
		||||
				"$interface" \
 | 
			
		||||
				"$modemstatus" \
 | 
			
		||||
				"$pincode"
 | 
			
		||||
			[ "$?" -ne "0" ] && return 1
 | 
			
		||||
			;;
 | 
			
		||||
	esac
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -459,7 +573,7 @@ proto_modemmanager_setup() {
 | 
			
		|||
	}
 | 
			
		||||
	echo "modem available at ${modempath}"
 | 
			
		||||
 | 
			
		||||
	modemmanager_check_state "$device" "${modemstatus}" "$pincode"
 | 
			
		||||
	modemmanager_check_state "$device" "$interface" "${modemstatus}" "$pincode"
 | 
			
		||||
	[ "$?" -ne "0" ] && return 1
 | 
			
		||||
 | 
			
		||||
	# always cleanup before attempting a new connection, just in case
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,7 +127,7 @@ main() {
 | 
			
		|||
		mm_log "info" "Checking if ModemManager is available..."
 | 
			
		||||
 | 
			
		||||
		if ! /usr/bin/mmcli -L >/dev/null 2>&1; then
 | 
			
		||||
			mm_log "info" "ModemManager not yet available"
 | 
			
		||||
			mm_log "info" "ModemManager not yet available (count=${n})"
 | 
			
		||||
		else
 | 
			
		||||
			mmrunning=1
 | 
			
		||||
			break
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue