Hi, this mail gives a detailed background explanation and motivation for the patch "[PATCH] umbim: add registration set support" (the analysis is probably too lengthy to be included as a commit message).
I am using a Medion S4222 (MediaTek OEM) USB stick and it failed to connect in OpenWrt: # umbim -n -d /dev/cdc-wdm0 connect "drei.at" sending (124): 03 00 00 00 7c 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 a2 89 cc 33 bc bb 8b 4f b6 b0 13 3e c2 aa e6 df 0c 00 00 00 01 00 00 00 4c 00 00 00 00 00 00 00 01 00 00 00 3c 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 5e 2a 7e 4e 6f 72 72 73 6b 65 6e 7e 5e 2a 7e 64 00 72 00 65 00 69 00 2e 00 61 00 74 00 00 00 header_type: 0003 header_length: 007C header_transaction: 0007 reading (48): 03 00 00 80 30 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 a2 89 cc 33 bc bb 8b 4f b6 b0 13 3e c2 aa e6 df 0c 00 00 00 07 00 00 00 00 00 00 00 header_type: 80000003 header_length: 0030 header_transaction: 0007 command_id: 000C status_code: 0007 According to the MBIM specification the status code means: MBIM_STATUS_NOT_REGISTERED 7 The operation failed because the device is not registered with any network. Unfortunately, just calling the registration function in query mode before the connect attempt is not enough in my setup: # umbim -n -d /dev/cdc-wdm0 registration nwerror: 0000 - unknown registerstate: 0004 - roaming registermode: 0001 - automatic availabledataclasses: 0018 - (null) currentcellularclass: 0001 - gsm provider_id: 23205 provider_name: 23205 roamingtext: (null) With the new function the connect method succeeds and gives me a working IPv4 address. # umbim -n -d /dev/cdc-wdm0 registration automatic nwerror: 0000 - unknown registerstate: 0003 - home registermode: 0001 - automatic availabledataclasses: 0018 - (null) currentcellularclass: 0001 - gsm provider_id: 23210 provider_name: 23210 roamingtext: (null) As you see the registerstate is now "home" and there was a mobile network code change (23205 -> 23210). The MBIM specification mentions that both manual and automatic registration could be possible. I only implemented automatic; this seems to be in line with what mbimcli supports (--register-automatic); see https://manpages.debian.org/stretch/libmbim-utils/mbimcli.1.en.html. I assume that any argument (_argc > 0) triggers the setter so that the call could look like umbim ... registration automatic or umbim ... registration on and allows one to extended it later for manual setting with additional arguments for the manual registration process. As the existing call convention (i.e., no arguments) is not modified existing scripts (like /lib/netifd/proto/mbim.sh in OpenWrt) still work without adaption. Note that rs->registeraction = htole32(MBIM_REGISTER_ACTION_AUTOMATIC) is redundant as MBIM_REGISTER_ACTION_AUTOMATIC is defined as 0 (and the whole buffer is memset to zero before) but I thought it is clearer for the reader. Thanks a lot for consideration! Best regards, Ingo _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel