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
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=modemmanager
|
PKG_NAME:=modemmanager
|
||||||
PKG_SOURCE_VERSION:=1.23.11-dev
|
PKG_SOURCE_VERSION:=1.23.12-dev
|
||||||
#PKG_SOURCE_VERSION:=df8287bf6c2febd068d06f0f45194bc622118bd4
|
#PKG_SOURCE_VERSION:=df8287bf6c2febd068d06f0f45194bc622118bd4
|
||||||
PKG_RELEASE:=20
|
PKG_RELEASE:=21
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/ModemManager.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() {
|
modemmanager_check_state() {
|
||||||
local device="$1"
|
local device="$1"
|
||||||
local modemstatus="$2"
|
local interface="$2"
|
||||||
local pincode="$3"
|
local modemstatus="$3"
|
||||||
|
local pincode="$4"
|
||||||
|
|
||||||
local state reason
|
local state
|
||||||
|
|
||||||
state="$(modemmanager_get_field "${modemstatus}" "state")"
|
state="$(modemmanager_get_field "${modemstatus}" "modem.generic.state")"
|
||||||
state="${state%% *}"
|
|
||||||
reason="$(modemmanager_get_field "${modemstatus}" "state-failed-reason")"
|
|
||||||
|
|
||||||
case "$state" in
|
case "$state" in
|
||||||
"failed")
|
"failed")
|
||||||
case "$reason" in
|
modemmanager_check_state_failed "$device" \
|
||||||
"sim-missing")
|
"$interface" \
|
||||||
echo "SIM missing"
|
"$modemstatus"
|
||||||
proto_notify_error "${interface}" MM_FAILED_REASON_SIM_MISSING
|
[ "$?" -ne "0" ] && return 1
|
||||||
proto_block_restart "${interface}"
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
proto_notify_error "${interface}" MM_FAILED_REASON_UNKNOWN
|
|
||||||
proto_block_restart "${interface}"
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
;;
|
||||||
"locked")
|
"locked")
|
||||||
if [ -n "$pincode" ]; then
|
modemmanager_check_state_locked "$device" \
|
||||||
mmcli --modem="${device}" -i any --pin=${pincode} || {
|
"$interface" \
|
||||||
proto_notify_error "${interface}" MM_PINCODE_WRONG
|
"$modemstatus" \
|
||||||
proto_block_restart "${interface}"
|
"$pincode"
|
||||||
return 1
|
[ "$?" -ne "0" ] && return 1
|
||||||
}
|
|
||||||
else
|
|
||||||
echo "PIN required"
|
|
||||||
proto_notify_error "${interface}" MM_PINCODE_REQUIRED
|
|
||||||
proto_block_restart "${interface}"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
@ -459,7 +573,7 @@ proto_modemmanager_setup() {
|
||||||
}
|
}
|
||||||
echo "modem available at ${modempath}"
|
echo "modem available at ${modempath}"
|
||||||
|
|
||||||
modemmanager_check_state "$device" "${modemstatus}" "$pincode"
|
modemmanager_check_state "$device" "$interface" "${modemstatus}" "$pincode"
|
||||||
[ "$?" -ne "0" ] && return 1
|
[ "$?" -ne "0" ] && return 1
|
||||||
|
|
||||||
# always cleanup before attempting a new connection, just in case
|
# always cleanup before attempting a new connection, just in case
|
||||||
|
|
|
@ -127,7 +127,7 @@ main() {
|
||||||
mm_log "info" "Checking if ModemManager is available..."
|
mm_log "info" "Checking if ModemManager is available..."
|
||||||
|
|
||||||
if ! /usr/bin/mmcli -L >/dev/null 2>&1; then
|
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
|
else
|
||||||
mmrunning=1
|
mmrunning=1
|
||||||
break
|
break
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue