Update to Ofono 1.31#26
Open
piggz wants to merge 215 commits intosailfishos:masterfrom
Open
Conversation
Adding SIM PIN caching feature to oFono. oFono now caches the SIM PIN1 type against the ICCID throughout its lifetime in a link list and enters implicitly upon modem reset/crash. Note, that this behavior can violate 3GPP spec 21.111, section 5.3 - User Data stored in ME if that section is interpreted very strictly. However, our interpretation is that firmware resets are allowed, based on historic precedent. Helps in user experience by not barring out cellular services unless pin is entered manually. Handles cases of incorrect pin and sim pin changed externally. Clear cached PIN incase modem disabled manually and selectively when sim is removed. Seperate 'pin_cache_enter_cb' added without dbus calls to handle implict entering of cached pin. For now this behavior is applicable to all modems by default. In the future it may be needed to make this behavior opt in or otherwise configurable.
If the modem is powered off via D-Bus, clear any cached PINs to make sure that automatic PIN entry behavior is not activated.
Better help text for "dial-number". Without details, user may be tempted to pass 0|1 (as send-sms uses) or true|false.
Since the commit that introduced the notification API of a SIM inserted and initialized I can not unlock the SIM card on a WP7607 modem. The previously mentioned commit: 54d56d7
Fixing a copy-paste error in SIM800 code that results in a SIM900 modem being detected as a SIM800 modem.
This patch allows a driver to set the interface only once, instead of at every context activation. The previous way was originally designed for PPP and RAW_IP based contexts which would have a (potentially) differently named interface after each context activation due to use of TUN/TAP. This also worked for static high-speed interface setups as well, since these usually had a single interface only. For devices that support multiple high-speed interfaces it would be advantageous to have each gprs_context get an interface assignment right in the modem driver and skip having to setup the interface on every activation.
Made changes in xmm7modem plugin to allow mutiple PDP context activation and to assign correct network interface to the activated PDP context.
Use card status indication to detect SIM removal and insertions
Add lte-cat-m1 and lte-cat-nb1 technology identifiers.
Added declaration of get function to get network interface for gprs-context
Added definition of get function to get interface value in gprs-context
Added the implementation required to setup data channel in ifxmodem gprs-context driver for xmm7modem vendor
The if statements were over 80 characters and breaking them up made the code look a bit uglier. So refactor the if statements to just figure out the data path 'n' parameter or return an error. On success, form the datapath string and return it. Also bump the buffer size and use snprintf to be safe(r).
While adding the sim pin cache feature, pin_name could cause issue in cases when sim pin is not there. log: ofonod[27810]: drivers/atmodem/sim.c:at_cpin_cb() crsm_pin_cb: READY ofonod[27810]: src/sim.c:sim_pin_query_cb() sim->pin_type: 0, pin_type: 0 ofonod[27810]: Aborting (signal 11) [./src/ofonod] ofonod[27810]: ++++++++ backtrace ++++++++ ofonod[27810]: #0 0x7fb7a7586cb0 in /lib/x86_64-linux-gnu/libc.so.6 ofonod[27810]: #1 0x7fb7a7693cd8 in /lib/x86_64-linux-gnu/libc.so.6 ofonod[27810]: #2 0x4d899b in sim_pin_query_cb() at src/sim.c:3174 ofonod[27810]: #3 0x4649e7 in at_cpin_cb() at drivers/atmodem/sim.c:1304 ofonod[27810]: #4 0x4a5d70 in at_chat_finish_command() at gatchat/gatchat.c:462
The 'Toby L2'-specific vendor type is used only to prevent the CMER command from attempting to set mode '3'. For all u-blox models, mode '3' is just an alias for mode '1'. As such, mode '1' can be used in place of mode '3', removing the model-specific quirk in favour of a vendor-specific quirk. With this change, the L2-specific vendor type is no longer needed.
Many ublox modems can sit on either the USB bus or talk directly to a UART. The udev plugin mostly takes care of figuring out what ports to talk to and the protocol is common for all devices after that. This patch simplifies the setup a bit: i) There must always be an aux channel for communication with the modem ii) The aux channel may be found behind the string Aux for USB modems or Device for serial modems iii) If the Modem string is set, use it; if not set, assume it's not available.
This sets up some device model data structures and adds some helpers for manipulating them. These data structures are a first step to trying to support the large number of devices that ublox produces with a common driver structure.
This patch adds a call to CGMM into the modem_enable path in order to establish the specific device model. From this device model string, a model-specific capabilities structure can be selected.
This flag should be set on devices that support multiple USB profiles and will be used to determine whether or not querying USB profiles is appropriate/necessary.
The TOBY L2 series of modems presents a number of different configurations with different throughtput characteristics. These configurations are packaged up as USB profiles; moreover, changing the profile actually changes the USB model ID so this is even more like selecting a different "device" altogether. Nonetheless, all we need to know is which profile is selected in order to set things up correctly and this can be queried directly. This patch adds a call to UUSBCONF for applicable modems in order to query the USB configuration to find out which profile is active.
Some aspects of a device are detectable at runtime, like the USB profile detection that was added in a patch preceding this one. This patch switches the driver over from creating a new "vendor id" for each profile to just setting a flag. This is more easily extensible as we detect other features of the modem.
ttyACM0 (USB interface 02) is reportedly unreliable (breaking DHCP setup) so the recommended approach is to use ttyACM2 (USB interface 06) exclusively.
Reduce code duplication by introducing send_clcc function.
Commit 1fd419e and 0167c33 introduced logic that treated ofono_gprs_cid_activated as an 'attaching' state. Since gprs_attached_update now guarantees that we will not get attached without having a context activated in LTE, this is not needed anymore. It also potentially interferes in case the driver was actually attaching.
According to the manual, when using CMUX on the UC15, it outputs unsolicited indications on port 2 (i.e. /dev/gsmtty2), so the quectel plugin must use this when registering for such.
In case a context get deactivated when a AT+CGACT=0 is not issued, indicate that to gprs core. This can happen if the device has an auto activated LTE context and modem switches over to for instance UTRAN.
Add a vendor quirk to avoid an error being returned when setting up sms notification for Quectel UC15 modems.
The quectel M95 and MC60 modems are picky about when the sim is properly initialized, so the logic to detect this needs to be in the quectel plugin. After doing basic initialization, a CPIN query is issued to detect sim state. If the sim is unlocked and ready, a timer is created to wait for the modem state (AT+QINISTAT) to complete. At this point ofono is notified about the initialized sim. If the sim is locked, a listener for "+CPIN: READY" is set up to know when a pin is entered. Once the indication is received, the timer is set up as if the sim was unlocked from the beginning. If the sim is busy/resetting, the CPIN query is issued again.
gateway was not being listed in context settings. Fixed teh bug to show correct gateway address.
Currently there is an issue if the attach state changes and there are active contexts of which the driver does not implement the detach_shutdown. In that case we just release the context (clears CID and active state), but nothing is signalled on D-Bus or towards the modem. Ofono is then out of sync with both the connection manager and the modem, this manifests itself later on if the modem changes state of the context, then ofono will not find it since the CID is cleared, and the connection manager won't be notified.
plugins/quectel.c: In function ‘quectel_pre_sim’: plugins/quectel.c:1150:20: error: unused variable ‘sim’ [-Werror=unused-variable] struct ofono_sim *sim;
Its incorrect to fiddle with the driver attach state when attaching. When attaching the state is transitioning, and the correct state will now always be assigned in the end of the attach process, regardless of result.
It seems like the CREG reporting from the L2 modems are quite buggy. An example for a L210 where CREG reports UTRAN while COPS and UREG reports LTE. A manual poll also indicates LTE. I also found that the technology mapping was incorrect, probably confused with enum packet_bearer. A commented log showing where CREG is not trustable: UREG indicates LTE 21:59:29 : < \r\n+UREG: 7\r\n 21:59:29 : < \r\n+CIEV: 9,2\r\n 21:59:29 : < \r\n+CGEV: NW MODIFY 1,0,0\r\n 21:59:31 : < \r\n+CIEV: 2,2\r\n 21:59:39 : < \r\n+CIEV: 2,3\r\n 21:59:44 : < \r\n+CIEV: 2,2\r\n 22:01:38 : < \r\n+CIEV: 2,3\r\n 22:01:43 : < \r\n+CIEV: 2,2\r\n A CREG indicating UTRAN with HSDPA and HSUPA 22:29:39 : < \r\n+CREG: 5,"0000","00000000",6\r\n 22:29:39 : > AT\r 22:29:39 : < \r\nOK\r\n 22:29:39 : > AT+COPS=3,2\r 22:29:39 : < \r\n+CIEV: 9,2\r\n 22:29:39 : < \r\nOK\r\n 22:29:39 : > AT+COPS?\r An immediate cops indicating LTE 22:29:39 : < \r\n+COPS: 0,2,"24007",7\r\n 22:29:39 : < \r\nOK\r\n 22:29:39 : > AT+CSQ\r 22:29:39 : < \r\n+CIEV: 2,4\r\n 22:29:39 : < \r\n+CSQ: 26,4\r\n 22:29:39 : < \r\nOK\r\n 22:29:39 : > AT+CGATT=1\r 22:29:39 : < \r\nOK\r\n 22:29:39 : > AT+COPS=3,0\r 22:29:39 : < \r\nOK\r\n 22:29:39 : > AT+COPS?\r Another cops also indicates LTE 22:29:39 : < \r\n+COPS: 0,0,"Tele2",7\r\n <- 7: LTE 22:29:39 : < \r\nOK\r\n 22:29:39 : > AT+CGREG?\r CGREG indicates unknown -> normal on LTE 22:29:39 : < \r\n+CGREG: 2,4\r\n 22:29:39 : < \r\nOK\r\n 22:29:44 : < \r\n+CIEV: 9,2\r\n 22:29:46 : < \r\n+CIEV: 2,2\r\n 22:56:23 : < \r\n+CIEV: 2,3\r\n 22:56:28 : < \r\n+CIEV: 2,2\r\n 22:59:40 : < \r\n+CIEV: 2,4\r\n Manual poll shows we are running LTE at+creg? +CREG: 2,5,"2AFC","01DB0206",7 OK
The code for closing all the modem devices and flagging the modem as unpowered is repeated several times in the driver... this patch puts this code into a common helper for readability.
Just reshuffling the code a bit and the 'disable' path can use the close_devices() helper to finish up. This also prevents a bug should the CFUN command fail to disable the modem whereby the 'aux' device remains open but the 'modem' device has already been closed.
uBlox devices present their USB interfaces well before those interfaces are ready to respond to any commands. The documentation says to monitor the 'greeting text' to detect readiness, but this 'greeting text' is not actually specified for any device other than the TOBY L4. What seems to work is to probe the device with 'AT' commands until the device responds, and then to wait an additional second before proceeding. The TOBY L4 reliably sends its 'greeting text' (+AT: READY) within this interval. It would be more rigorous to actually wait for the 'READY' indication for the TOBY L4, but that would require knowing the device model before the device model is actually queried. This is doable via the USB product ID, but overkill when the above heuristic seems to work reliably. Before this patch, the ublox plugin was trying to achieve something like the above with the g_at_chat_set_wakeup_command() function, but that had some issues: i) it did not work reliably, in particular failing badly on the TOBY L4 with responses getting out of sync with commands ii) it was an inappropriate use of the wakeup_command which is intended for devices that may sleep when there is no communication during some interval This patch adds an init sequence that probes the device for readiness before continuing with initialization.
The sim inserted/initialized state is handled properly in the quectel plugin now, so remove the "auto-initialized" quirk from the atmodem sim driver.
Adding support for enumerating PCIe types of modems in ofono
It turns out that both L2xx and L4xx modems are a bit buggy when it comes to send CREG URC's when the tech changes. Try to overcome this by subscribing to both UREG and CREG, and poll the other when any of the URC's are received. Protect from doing simultaneous polls though.
When closing down a cmux object, the address sanitizer detects a
use-after-free in gatmux.c (see below).
Avoid this by taking a reference to the mux object during the processing
in received_data().
ofonod[3640549]: ../git/plugins/quectel.c:cfun_disable() 0x610000000b40
ofonod[3640549]: ../git/plugins/quectel.c:close_serial() 0x610000000b40
ofonod[3640549]: ../git/plugins/quectel.c:close_mux() 0x610000000b40
ofonod[3640549]: ../git/examples/emulator.c:powered_watch() Removing modem 0x610000000b40 from the list
ofonod[3640549]: ../git/examples/emulator.c:powered_watch() Removing server watch: 106
ofonod[3640549]: ../git/src/modem.c:modem_change_state() old state: 0, new state: 0
=================================================================
==3640549==ERROR: AddressSanitizer: heap-use-after-free on address 0x62100073dd28 at pc 0x5566b6402a21 bp 0x7ffe7a2db0e0 sp 0x7ffe7a2db0d0
READ of size 8 at 0x62100073dd28 thread T0
#0 0x5566b6402a20 in debug ../git/gatchat/gatmux.c:109
#1 0x5566b6404bd7 in channel_close ../git/gatchat/gatmux.c:525
#2 0x7fa0516e44a6 in g_io_channel_shutdown (/usr/lib/libglib-2.0.so.0+0x774a6)
#3 0x7fa0516e4644 in g_io_channel_unref (/usr/lib/libglib-2.0.so.0+0x77644)
#4 0x5566b64048a4 in watch_finalize ../git/gatchat/gatmux.c:474
sailfishos#5 0x7fa0516d6f6f (/usr/lib/libglib-2.0.so.0+0x69f6f)
sailfishos#6 0x7fa0516ac6a7 in g_slist_foreach (/usr/lib/libglib-2.0.so.0+0x3f6a7)
sailfishos#7 0x7fa0516b277b in g_slist_free_full (/usr/lib/libglib-2.0.so.0+0x4577b)
sailfishos#8 0x5566b6403413 in dispatch_sources ../git/gatchat/gatmux.c:224
sailfishos#9 0x5566b64039ea in received_data ../git/gatchat/gatmux.c:268
sailfishos#10 0x7fa0516d727e in g_main_context_dispatch (/usr/lib/libglib-2.0.so.0+0x6a27e)
sailfishos#11 0x7fa0516d91c0 (/usr/lib/libglib-2.0.so.0+0x6c1c0)
sailfishos#12 0x7fa0516da0d2 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x6d0d2)
sailfishos#13 0x5566b6429b1b in main ../git/src/main.c:286
sailfishos#14 0x7fa05147fee2 in __libc_start_main (/usr/lib/libc.so.6+0x26ee2)
sailfishos#15 0x5566b62531ad in _start (/home/martin/projects/ofono/x86/src/ofonod+0xfc1ad)
0x62100073dd28 is located 40 bytes inside of 4672-byte region [0x62100073dd00,0x62100073ef40)
freed by thread T0 here:
#0 0x7fa0519256c0 in __interceptor_free /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:122
#1 0x5566b64052d7 in g_at_mux_unref ../git/gatchat/gatmux.c:645
#2 0x5566b63d6d19 in close_mux ../git/plugins/quectel.c:199
#3 0x5566b63d7047 in close_serial ../git/plugins/quectel.c:223
#4 0x5566b63db62a in cfun_disable ../git/plugins/quectel.c:1056
sailfishos#5 0x5566b63f6ae1 in at_chat_finish_command ../git/gatchat/gatchat.c:459
sailfishos#6 0x5566b63f701b in at_chat_handle_command_response ../git/gatchat/gatchat.c:521
sailfishos#7 0x5566b63f785b in have_line ../git/gatchat/gatchat.c:600
sailfishos#8 0x5566b63f87f1 in new_bytes ../git/gatchat/gatchat.c:759
sailfishos#9 0x5566b640174c in received_data ../git/gatchat/gatio.c:122
sailfishos#10 0x5566b64047b4 in watch_dispatch ../git/gatchat/gatmux.c:464
sailfishos#11 0x5566b640313b in dispatch_sources ../git/gatchat/gatmux.c:183
sailfishos#12 0x5566b64039ea in received_data ../git/gatchat/gatmux.c:268
sailfishos#13 0x7fa0516d727e in g_main_context_dispatch (/usr/lib/libglib-2.0.so.0+0x6a27e)
previously allocated by thread T0 here:
#0 0x7fa051925ce8 in __interceptor_calloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:153
#1 0x5566b6405009 in g_at_mux_new ../git/gatchat/gatmux.c:606
#2 0x5566b6407f6b in g_at_mux_new_gsm0710_basic ../git/gatchat/gatmux.c:1165
#3 0x5566b63da9ba in cmux_cb ../git/plugins/quectel.c:882
#4 0x5566b63f6ae1 in at_chat_finish_command ../git/gatchat/gatchat.c:459
sailfishos#5 0x5566b63f701b in at_chat_handle_command_response ../git/gatchat/gatchat.c:521
sailfishos#6 0x5566b63f785b in have_line ../git/gatchat/gatchat.c:600
sailfishos#7 0x5566b63f87f1 in new_bytes ../git/gatchat/gatchat.c:759
sailfishos#8 0x5566b640174c in received_data ../git/gatchat/gatio.c:122
sailfishos#9 0x7fa0516d727e in g_main_context_dispatch (/usr/lib/libglib-2.0.so.0+0x6a27e)
SUMMARY: AddressSanitizer: heap-use-after-free ../git/gatchat/gatmux.c:109 in debug
Shadow bytes around the buggy address:
0x0c42800dfb50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c42800dfb60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c42800dfb70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c42800dfb80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c42800dfb90: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c42800dfba0: fd fd fd fd fd[fd]fd fd fd fd fd fd fd fd fd fd
0x0c42800dfbb0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c42800dfbc0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c42800dfbd0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c42800dfbe0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c42800dfbf0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==3640549==ABORTING
With the reference in place in received_data(), the address sanitizer
now encounters a use-after-free when the destroy notification is
dispatched for the read watcher (see below).
Fix this by remove the destroy notification callback, as it isn't really
used except in the shutdown function.
==5797==ERROR: AddressSanitizer: heap-use-after-free on address 0x621000ac5904 at pc 0x55c1243b1f14 bp 0x7ffdef001340 sp 0x7ffdef001330
WRITE of size 4 at 0x621000ac5904 thread T0
#0 0x55c1243b1f13 in read_watcher_destroy_notify ../git/gatchat/gatmux.c:660
#1 0x7f08a8676742 (/usr/lib/libglib-2.0.so.0+0x62742)
#2 0x7f08a867e2e4 in g_main_context_dispatch (/usr/lib/libglib-2.0.so.0+0x6a2e4)
#3 0x7f08a8680210 (/usr/lib/libglib-2.0.so.0+0x6c210)
#4 0x7f08a8681122 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x6d122)
sailfishos#5 0x55c1243d6703 in main ../git/src/main.c:286
sailfishos#6 0x7f08a8423152 in __libc_start_main (/usr/lib/libc.so.6+0x27152)
sailfishos#7 0x55c1241fe1ad in _start (/home/martin/projects/ofono/x86/src/ofonod+0xfd1ad)
0x621000ac5904 is located 4 bytes inside of 4672-byte region [0x621000ac5900,0x621000ac6b40)
freed by thread T0 here:
#0 0x7f08a88cc6b0 in __interceptor_free /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:122
#1 0x55c1243b1ebf in g_at_mux_unref ../git/gatchat/gatmux.c:652
#2 0x55c1243b062c in received_data ../git/gatchat/gatmux.c:276
#3 0x7f08a867e2ce in g_main_context_dispatch (/usr/lib/libglib-2.0.so.0+0x6a2ce)
previously allocated by thread T0 here:
#0 0x7f08a88cccd8 in __interceptor_calloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:153
#1 0x55c1243b1bf1 in g_at_mux_new ../git/gatchat/gatmux.c:613
#2 0x55c1243b4b53 in g_at_mux_new_gsm0710_basic ../git/gatchat/gatmux.c:1172
#3 0x55c124386abd in cmux_gatmux ../git/plugins/quectel.c:871
#4 0x55c12438779f in cmux_cb ../git/plugins/quectel.c:1023
sailfishos#5 0x55c1243a368e in at_chat_finish_command ../git/gatchat/gatchat.c:459
sailfishos#6 0x55c1243a3bc8 in at_chat_handle_command_response ../git/gatchat/gatchat.c:521
sailfishos#7 0x55c1243a4408 in have_line ../git/gatchat/gatchat.c:600
sailfishos#8 0x55c1243a539e in new_bytes ../git/gatchat/gatchat.c:759
sailfishos#9 0x55c1243ae2f9 in received_data ../git/gatchat/gatio.c:122
sailfishos#10 0x7f08a867e2ce in g_main_context_dispatch (/usr/lib/libglib-2.0.so.0+0x6a2ce)
SUMMARY: AddressSanitizer: heap-use-after-free ../git/gatchat/gatmux.c:660 in read_watcher_destroy_notify
Shadow bytes around the buggy address:
0x0c4280150ad0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4280150ae0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4280150af0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4280150b00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4280150b10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c4280150b20:[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4280150b30: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4280150b40: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4280150b50: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4280150b60: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4280150b70: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==5797==ABORTING
Use at_util_sim_state_query_new() to query the sim inserted state. Once that returns, the locked state is queried by issuing a AT+CPIN? command. If not locked, a timer is started to query the quectel init status of the sim. Once the init status is ready, the sim atom is created, and the modem is set to powered, and the sim is signaled both inserted, and initialized. If locked, the modem is set to powered, and the sim atom is created. This allows users to enter the pin to unlock the sim. Once the sim is unlocked, a +CPIN: READY indication is caught to query the quectel init status. Once the init status is ready, the sim is signaled initialized. All the above is needed, because the modem indicated +CPIN: READY before the sim is really ready. The only way to be certain, is to wait for the quectel init status to be ready. Even signaling the sim inserted prematurely can cause to modem to hang during the initial AT+CRSM commands.
The in-kernel implementation of gsm0710 causes deadlocks in the kernel[1], so switch the default back to the user-space implementation in ofono. The change also removes the timeout-callback used to defer disabling the n_gsm line discipline, as that is no longer needed[2] To enable use of the kernel line discipline, add an udev env entry with OFONO_QUECTEL_MUX="n_gsm". [1] https://lore.kernel.org/lkml/4b2455c0-25ba-0187-6df6-c63b4ccc6a6e@geanix.com/ [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7030082a7415d18e3befdf1f9ec05b3d5de98de4
There was a race condition where a context might be registered before the netreg status updates to LTE. The code took for granted the context is activated after the technology update. With this change, any order is is accepted.
lduboeuf
pushed a commit
to lduboeuf/ofono-mer
that referenced
this pull request
Nov 21, 2022
…2gdata [ril] Remove incorrect hardcoded tech value. JB#55388
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Builds upon the 1.30 PR, cherry picking all commits up to 1.31 with the following changes:
Reworked:
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=e3d5ac1f166668e111d80f8a7fa0211978b5ad7d (ell)
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=88ee0123ab442cde27c8edbbe4b1ec471a91377e
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=f3a5016a6737b4cb40d33815e2d9aa2977380e01 (ell)
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=da871669a3c076145c31ea2bd6082b5f2674c69f
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=c96031dda5df0f541b8ab4abb2d3c33f1057ab33
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=d0398b3965105b981502fca68afe4f244bc8d443 (ell)
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=7528a6096d7afb4384193f1df737759135852f41
Skipped:
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=b50ff27d3f1469b54daddbe45606a6c7bef8ff7d (jolla ofono works differently here)
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=336a5b4274bc158cca63e1aa5942902a32db3c1e (jolla ofono works differently here)
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=b9da075d638e933721c823f62a04f35c719041b8 (ell)
https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?h=1.32&id=37be9d1026386bb60ab9654b29e7979e9ade390d (already present)