umbim: Allow roaming and partner connections
authorJulio Gonzalez Gil <git@juliogonzalez.es>
Sun, 14 Aug 2022 21:06:31 +0000 (23:06 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 11 Dec 2022 02:24:45 +0000 (03:24 +0100)
Allow registration if the SIM is roaming or partner mode, by adding two
new options to the protocol.

Until now, such registration failed because umbim returns exit codes 4 and
5 for such situations.

Signed-off-by: Julio Gonzalez Gil <git@juliogonzalez.es>
package/network/utils/umbim/files/lib/netifd/proto/mbim.sh

index 3fa411c6c6d676399bf62fd1cd002ad1a5adf950..64bb8176a043eed20b0b9b18dfbe06fa9bf0ba96 100755 (executable)
@@ -14,6 +14,8 @@ proto_mbim_init_config() {
        proto_config_add_string apn
        proto_config_add_string pincode
        proto_config_add_string delay
+       proto_config_add_boolean allow_roaming
+       proto_config_add_boolean allow_partner
        proto_config_add_string auth
        proto_config_add_string username
        proto_config_add_string password
@@ -25,8 +27,8 @@ _proto_mbim_setup() {
        local tid=2
        local ret
 
-       local device apn pincode delay $PROTO_DEFAULT_OPTIONS
-       json_get_vars device apn pincode delay auth username password $PROTO_DEFAULT_OPTIONS
+       local device apn pincode delay allow_roaming allow_partner $PROTO_DEFAULT_OPTIONS
+       json_get_vars device apn pincode delay auth username password allow_roaming allow_partner $PROTO_DEFAULT_OPTIONS
 
        [ -n "$ctl_device" ] && device=$ctl_device
 
@@ -108,14 +110,31 @@ _proto_mbim_setup() {
        tid=$((tid + 1))
 
        echo "mbim[$$]" "Register with network"
-       umbim $DBG -n -t $tid -d $device registration || {
-               echo "mbim[$$]" "Subscriber registration failed"
+       connected=0
+       umbim $DBG -n -t $tid -d $device registration
+       reg_status=$?
+       case $reg_status in
+               0)      echo "mbim[$$]" "Registered in home mode"
+                       tid=$((tid + 1))
+                       connected=1;;
+               4)      if [ "$allow_roaming" = "1" ]; then
+                               echo "mbim[$$]" "Registered in roaming mode"
+                               tid=$((tid + 1))
+                               connected=1
+                       fi;;
+               5)      if [ "$allow_partner" = "1" ]; then
+                               echo "mbim[$$]" "Registered in partner mode"
+                               tid=$((tid + 1))
+                               connected=1
+                       fi;;
+       esac
+       if [ $connected -ne 1 ]; then
+               echo "mbim[$$]" "Subscriber registration failed (code $reg_status)"
                tid=$((tid + 1))
                umbim $DBG -t $tid -d "$device" disconnect
                proto_notify_error "$interface" NO_REGISTRATION
                return 1
-       }
-       tid=$((tid + 1))
+       fi
 
        echo "mbim[$$]" "Attach to network"
        umbim $DBG -n -t $tid -d $device attach || {