aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2017-04-06iface-modem-simple: port register_in_3gpp_or_cdma_network to use GTaskBen Chan
2017-04-06bearer-list: port mm_bearer_list_disconnect_all_bearers to use GTaskBen Chan
2017-04-06base-modem: port mm_base_modem_authorize to use GTaskBen Chan
2017-04-02mbim-modem: disable location interfaceThomas Voß
MBIM does not support 3gpp location data right now. For that, we make sure that the location interface is not reported as supported by MBIM modems.
2017-04-02broadband-modem: normalize also operator codeAleksander Morgado
The operator code (MCCMNC) may also be given encoded in the current charset (e.g. UCS2). Based on a patch from Colin Helliwell <colin.helliwell@ln-systems.com>
2017-04-02modem-helpers: if operator not in UCS2, see if already valid UTF-8Aleksander Morgado
The method doing the operator name normalization takes as input the current configured modem charset. If this is UCS2, we will now just assume this is a hint: the string may or may not come in hex/UCS2. This logic makes the custom operator name loading in Huawei unneeded, if the modem is configured in UCS2, we still properly process operator names coming in plain ASCII.
2017-03-30base-manager: fix segfault when using already disposed MMDeviceAleksander Morgado
Since commit e9d0989ed069, the MMDevice may be removed from the tracking hash table when the support check operation fails to create a modem object. If this failure happens due to the port probe cancellations requested during the udev removal event for a given device port, we would end up using an already disposed object and triggering a segfault. This fix just makes sure a full valid reference to the MMDevice object is kept around until we're done using it. [mm-base-manager.c:216] device_removed(): (usbmisc/cdc-wdm1): released by device '/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4' [mm-plugin-manager.c:1131] device_context_port_released(): [plugin manager] task 5: port released: cdc-wdm1 [mm-base-manager.c:216] device_removed(): (tty/ttyACM0): released by device '/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4' [mm-plugin-manager.c:1131] device_context_port_released(): [plugin manager] task 5: port released: ttyACM0 [mm-base-manager.c:221] device_removed(): Removing empty device '/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4' [mm-plugin-manager.c:1219] device_context_cancel(): [plugin manager) task 5: cancellation requested [mm-plugin-manager.c:979] device_context_continue(): [plugin manager] task 5: no more ports to probe [mm-plugin-manager.c:813] device_context_complete(): [plugin manager] task 5: finished in '0.090510' seconds [mm-base-manager.c:172] device_support_check_ready(): Couldn't check support for device '/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4': Operation was cancelled [mm-base-manager.c:223] device_removed(): Device support check has been cancelled Thread 1 "ModemManager" received signal SIGSEGV, Segmentation fault. 0x00007ffff6543c50 in g_str_hash () from /usr/lib/libglib-2.0.so.0 (gdb) bt #0 0x00007ffff6543c50 in g_str_hash () at /usr/lib/libglib-2.0.so.0 #1 0x00007ffff6542b2d in () at /usr/lib/libglib-2.0.so.0 #2 0x0000000000439675 in device_removed (self=0x770900, kernel_device=0x763e60) at mm-base-manager.c:225 #3 0x0000000000439e70 in handle_uevent (client=0x769c20, action=0x81d910 "remove", device=0x7fffe4001c40, user_data=0x770900) at mm-base-manager.c:415 #4 0x00007ffff54c61c8 in ffi_call_unix64 () at /usr/lib/libffi.so.6 #5 0x00007ffff54c5c2a in ffi_call () at /usr/lib/libffi.so.6 #6 0x00007ffff682d7ae in g_cclosure_marshal_generic () at /usr/lib/libgobject-2.0.so.0 #7 0x00007ffff682cf75 in g_closure_invoke () at /usr/lib/libgobject-2.0.so.0 #8 0x00007ffff683ef82 in () at /usr/lib/libgobject-2.0.so.0 #9 0x00007ffff6847bcc in g_signal_emit_valist () at /usr/lib/libgobject-2.0.so.0 #10 0x00007ffff6847faf in g_signal_emit () at /usr/lib/libgobject-2.0.so.0 #11 0x00007ffff7023c74 in () at /usr/lib/libgudev-1.0.so.0 #12 0x00007ffff655445a in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0 #13 0x00007ffff6554810 in () at /usr/lib/libglib-2.0.so.0 #14 0x00007ffff6554b32 in g_main_loop_run () at /usr/lib/libglib-2.0.so.0 #15 0x0000000000437bf5 in main (argc=2, argv=0x7fffffffeb28) at main.c:180 (gdb) fr 2 #2 0x0000000000439675 in device_removed (self=0x770900, kernel_device=0x763e60) at mm-base-manager.c:225 225 g_hash_table_remove (self->priv->devices, mm_device_get_uid (device)); (gdb) p mm_device_get_uid (device) $1 = (const gchar *) 0x0 (gdb) p *device $3 = {parent = {g_type_instance = {g_class = 0x0}, ref_count = 0, qdata = 0x0}, priv = 0x7feb20}
2017-03-29core: reset GList pointers to NULL when necessaryBen Chan
When calling g_list_free_full() to free a GList in dispose(), it is necessary to reset the GList pointer to NULL as dispose() may be called more than once.
2017-03-29core: remove explicit GDestroyNotify cast on g_free / g_object_unrefBen Chan
g_free and g_object_unref are in form of `void (*)(gpointer)`, which matches the GDestroyNotify signature. An explicit GDestroyNotify cast on g_free and g_object_unref is thus not needed.
2017-03-28base-bearer: fix typo in 'bearer-default-ip-family' property nameBen Chan
2017-03-28broadband-modem: fixed wrong MEM1 value passed to +CPMSCarlo Lobrano
In functions - mm_broadband_modem_lock_sms_storages - modem_messaging_set_default_storage return with error when using current_sms_mem1_storage as +CPMS value, but current_sms_mem1_storage value is UNKNOWN.
2017-03-24base-bearer: stop connection status monitoring if no TTY availableAleksander Morgado
On modems with a single TTY for both control and data, we cannot use the TTY to load connection status once we're in connected mode: Connection through a plain serial AT port (ttyUSB2) (ttyUSB2): --> 'ATD*99***2#<CR>' (ttyUSB2): <-- '<CR><LF>CONNECT 100000000<CR><LF>' (ttyUSB2): port now connected Connected bearer '/org/freedesktop/ModemManager1/Bearer/0' Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> connected) Simple connect state (8/8): All done checking if connected failed: Couldn't check current list of active PDP contexts: No AT port available to run command checking if connected failed: Couldn't check current list of active PDP contexts: No AT port available to run command checking if connected failed: Couldn't check current list of active PDP contexts: No AT port available to run command ... So, disable connection monitoring right away if that situation is detected: Connection through a plain serial AT port (ttyUSB2) (ttyUSB2): --> 'ATD*99***2#<CR>' (ttyUSB2): <-- '<CR><LF>CONNECT 100000000<CR><LF>' (ttyUSB2): port now connected Connected bearer '/org/freedesktop/ModemManager1/Bearer/0' Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> connected) Simple connect state (8/8): All done Connection monitoring is unsupported by the device ... https://bugs.freedesktop.org/show_bug.cgi?id=100376
2017-03-24broadband-bearer: set TTY as connected as soon as ATD repliesAleksander Morgado
When the connection request is done via ATD, flag the port as connected as soon as the successful response is received, so that we remove our polling on the device right away. https://bugs.freedesktop.org/show_bug.cgi?id=99541
2017-03-24broadband-modem: fix capabilities in 4G-only devicesAleksander Morgado
The +CGSM capability is saying that the modem is a 3GPP modem, but that doesn't necessarily mean it's a GSM/UMTS modem, it could be a LTE-only device. We did add the GSM_UMTS capability when +CGSM was found, so now we'll check if the device only reports 4G-only mode, and remove the capability if so. https://bugs.freedesktop.org/show_bug.cgi?id=100155
2017-03-24broadband-modem,helpers: implement AT+WS46=? response parserAleksander Morgado
We want a parser that returns the full list of combinations found.
2017-03-22serial: allow specifying baudrate to use via udev tagsAleksander Morgado
A new 'ID_MM_TTY_BAUDRATE' per-port udev tag is introduced, which allows specifying the baudrate that will be used when opening a specific serial port. E.g.: ACTION!="add|change|move", GOTO="mm_my_modem_end" DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.3/*", ENV{ID_MM_TTY_BAUDRATE}="115200" LABEL="mm_my_modem_end" https://bugs.freedesktop.org/show_bug.cgi?id=100158
2017-03-22kernel-device: device-specific properties in either port or physdevAleksander Morgado
There are 2 main types of udev properties: device-specific and port-specific. The port-specific properties are set independently per port (e.g. port type hints set per interface number for a given vid:pid). The device-specific properties apply to all ports in the device. Some of these properties are currently expected in the physical device (e.g. ID_MM_PLATFORM_DRIVER_PROBE) while some others are expected in each port (e.g. the plugin udev tag filters). This patch tries to simplify the logic and just assume that the device specific tags may be given in either the physical device or the port device, by providing separate APIs to retrieve port-specific or device-specific (global) properties. If the same tag is given in both the device and the port, the one in the device takes preference. For the generic backend, these new APIs are really useless, as all device-specific and port-specific properties are always stored in the port object themselves (there is no 'tree' of devices in the generic backend, no 'physdev' device). For the udev backend, though, there really is a difference, as the tags may be set in port or device. https://bugs.freedesktop.org/show_bug.cgi?id=100156
2017-03-17iface-modem-3gpp: use mm_3gpp_parse_operator_id() instead of custom codeDan Williams
2017-03-16iface-modem: improve network registration checks for LTE devicesAleksander Morgado
If a device reports "LTE" in the list of current capabilities, we'll set EPS network supported by default. This will enable CEREG registration checks for AT based devices. If a device reports only "LTE" in the list of current capabilities, we disable all the other network support flags (e.g. will disable CREG and CGREG checks among others). https://bugs.freedesktop.org/show_bug.cgi?id=100170
2017-03-11base-manager: remove MMDevice if support check failsAleksander Morgado
If the device support check fails, either with an error, or afterwards when trying to create a modem object, we must remove the MMDevice from the tracking table of devices, so that a manual scan request afterwards re-scans all ports. https://bugs.freedesktop.org/show_bug.cgi?id=100157
2017-03-03device: add null check on `self->priv->modem' in clear_modemBen Chan
clear_modem() can be invoked from set_property() and dispose(), where `self->priv->modem' may be NULL. This patch adds a null check on the modem object to make sure we don't run g_object_run_dispose() on a null modem object.
2017-03-03kernel-device: use device sysfs if physdev sysfs isn't availableBen Chan
find_device_by_physdev_uid() expects a non-NULL UID of the physical device. However, mm_kernel_device_get_physdev_uid() could potentially return NULL on MMKernelDeviceUdev if find_physical_gudevdevice() in mm-kernel-device-udev.c fails to find the physical device. When a NULL physical device UID is passed to find_device_by_physdev_uid() and used in g_hash_table_lookup(), it leads to a crash in g_str_hash(), which is a bit obscure. This patch updates kernel_device_get_physdev_uid() in mm-kernel-device-udev.c to fall back to use the device sysfs if the physical device sysfs isn't available, which is similar to how kernel_device_get_physdev_uid() mm-kernel-device-generic.c is implemented.
2017-03-01bearer-qmi: add WDS event reporting supportDan Williams
Don't do anything with the events yet, but at least turn them on and capture them in debug logging.
2017-03-01broadband-modem-mbim: disable parent access tech loadingAleksander Morgado
The parent method would use QCDM to load access tech, but we already have the access tech reported in MBIM via indications, so no real need to mix that. For context, see: https://bugs.freedesktop.org/show_bug.cgi?id=100000
2017-03-01kernel-device: simplify handling of platform/pci/pnp/sdio parentBen Chan
This patch simplifies the handling of platform/pci/pnp/sdio device in find_physical_gudevdevice(). When the code finds the first parent device under the subsystem 'platform', 'pci', 'pnp', or 'sdio', it stops traversing up the device tree, so there is no need to keep track of whether a platform / pci / pnp / sdio device has previously been visited via those is_platform/is_pci/is_pnp/is_sdio Boolean variables.
2017-03-01kernel-device: handle SDIO device in find_physical_gudevdeviceBen Chan
A few crashes have been observed in the field with the following signature: Thread 0 CRASHED [SIGSEGV @ 0x00000000 ] MAGIC SIGNATURE THREAD 0xf53ff5e8 (libglib-2.0.so.0.3600.4 -ghash.c:1732 ) g_str_hash 0xf53fe8c7 (libglib-2.0.so.0.3600.4 -ghash.c:365 ) g_hash_table_lookup 0xb953c3bd (ModemManager -mm-base-manager.c:130 ) device_removed 0xb953cc9f (ModemManager -mm-base-manager.c:408 ) handle_uevent 0xf54c535f (libgobject-2.0.so.0.3600.4 -gclosure.c:777 ) g_closure_invoke 0xf54d6fc7 (libgobject-2.0.so.0.3600.4 -gsignal.c:3584 ) signal_emit_unlocked_R 0xf54d7baf (libgobject-2.0.so.0.3600.4 -gsignal.c:3328 ) g_signal_emit_valist 0xf54d7fa5 (libgobject-2.0.so.0.3600.4 -gsignal.c:3384 ) g_signal_emit 0xf5623819 (libgudev-1.0.so.0.2.0 -gudevclient.c:104 ) monitor_event 0xf540cc51 (libglib-2.0.so.0.3600.4 -gmain.c:3054 ) g_main_context_dispatch 0xf540cfa5 (libglib-2.0.so.0.3600.4 -gmain.c:3701 ) g_main_context_iterate 0xf540d2c5 (libglib-2.0.so.0.3600.4 -gmain.c:3895 ) g_main_loop_run 0xb9539dad (ModemManager -main.c:180 ) main 0xf52d687d (libc-2.23.so -libc-start.c:289 ) __libc_start_main 0xb9539bf3 (ModemManager + 0x0001cbf3 ) _start 0xb95b0fbf (ModemManager -elf-init.c:87 ) __libc_csu_init 0xf56dbe43 (ld-2.23.so + 0x0000be43 ) _dl_sort_fini 0xb9539bbf (ModemManager + 0x0001cbbf ) _init The crash happens when mm-kernel-device-udev.c:find_physical_gudevdevice() fails to find the physical device, which eventually leads to a NULL `physdev_uid' being passed to g_hash_table_lookup() in mm-base-manager.cc:find_device_by_physdev_uid(). There isn't much information about the actual device that triggered the udev event, but it's suspected to be a tty or net device on a SDIO bus and thus associated with a physical device on the 'sdio' subsystem. This patch updates find_physical_gudevdevice() in mm-kernel-device-udev.c to handle this particular scenario.
2017-02-28broadband-modem: fix QCDM access tech reporting for WCDMA system modesDan Williams
Two issues here: 1) PCH_SLEEP wasn't considered a "wcdma_open" state, but it should be since the modem is still registered and can be attached in this state 2) If the system mode is WCDMA (eg, not GSM and not GSM/WCDMA) then MM shouldn't assume GPRS if WCDMA isn't "open", since GPRS isn't enabled in WCDMA-only mode Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=100000
2017-02-28broadband-modem-qmi: FCC auth if InvalidTransition when going onlineAleksander Morgado
https://bugs.freedesktop.org/show_bug.cgi?id=100001
2017-02-13device: disconnect signal handlers when modem object removedAleksander Morgado
Don't rely on the automatic disconnection of the signal as the last reference of the modem object may outlive the device object. Also, setup a common clear_modem() function to dispose the internal reference of the modem object, which will take care of the signal disconnection when required. https://lists.freedesktop.org/archives/modemmanager-devel/2017-February/003907.html
2017-02-05blacklist: add promotion boards from RenesasMaksim Salau
Signed-off-by: Maksim Salau <maksim.salau@gmail.com>
2017-02-03glib: remove invocations of g_type_init()Ben Chan
g_type_init() has been deprecated (and also marked with the attribute 'deprecated') since glib 2.36 as the type system is automatically initialized. Since the minimum version of glib required by ModemManager is 2.36, calling g_type_init() isn't necessarily in the ModemManager code.
2017-01-31blacklist: add Analog PlutoSDRAleksander Morgado
Reported-by: Robin Getz <Robin.Getz@analog.com>
2017-01-26serial: minor indentation fixAleksander Morgado
2017-01-26serial: fix handling errors in virtual serial portsAleksander Morgado
The g_socket_receive() method returns a signed size variable, so don't use an unsigned variable to hold the result.
2017-01-24bearer-qmi: fix incorrect use of mm_base_bearer_get_statusBen Chan
This patch fixes a bug in packet_service_status_indication_cb(), which incorrectly treats the MMBearerStatus enum value returned by mm_base_bearer_get_status() as a MMBearerConnectionStatus enum value. MMBearerStatus and MMBearerConnectionStatus can't be used interchangeably as they have different enum values for the 'disconnected' and 'disconnecting' state.
2017-01-04base-modem,cinterion: no need for a peek_current_data_port() methodAleksander Morgado
We already get the data port given as input parameter in disconnect_3gpp(), so there is no point in trying to find out which the data port is.
2017-01-04cinterion: implement support for the new SWWAN interfaceMatthew Stanger
2016-12-20device: fixed crash in SIM hot swap when removing the SIMCarlo Lobrano
mm_device_create_modem needs a valid object_manager instance to create the new modem, while the one provided before was cleared out by a call to mm_device_remove_modem few lines before. Since the newly created modem refers to the same HW device, we can use the same object_manager also. https://bugs.freedesktop.org/show_bug.cgi?id=99160
2016-12-12telit: blacklist LE866 flashing deviceCarlo Lobrano
Moved blacklist code to 77-mm-usb-device-blacklist.rules as per code review
2016-12-11bearer-qmi: signal id may be 0 even if enable == FALSEAleksander Morgado
E.g. if the connection attempt fails, connect_context_complete_and_free() may be called before the signals are connected to the QmiClients. https://bugs.freedesktop.org/show_bug.cgi?id=99047
2016-11-23libqcdm,libwmc: use C99 sized types from stdint.hAleksander Morgado
2016-11-21kerneldevice,generic: load virtual devices without default rulesAleksander Morgado
This is so that "make check" doesn't depend on having the rule files installed in the default udev rules directory, which currently would break the build: TEST: test-service-generic... (pid=2601) /MM/Service/Generic/enable-disable: Activating service name='org.freedesktop.ModemManager1' Successfully activated service 'org.freedesktop.ModemManager1' ** (/home/aleksander/Development/foss/ModemManager/plugins/.libs/lt-test-service-generic:2601): ERROR **: Error setting test profile: GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Failed: Failed to find primary AT port FAIL GTester: last random seed: R02S3897abaae9df36f8d2eeb679406ab675 make[3]: *** [Makefile:3804: test-nonrecursive] Terminated
2016-11-18modem-helpers: improve +CCLK parsingAleksander Morgado
Added support for 4-digit format years (i.e. YYYY), and also made the timezone information optional, as per +CSDF in 3GPP TS 27.007. https://bugs.freedesktop.org/show_bug.cgi?id=95319
2016-11-07kernel-device: return G_MAXUINT when get_property_as_int_hex() failsAleksander Morgado
2016-11-07kernel-device: ID_USB_INTERFACE_NUM should be read as an hex stringAleksander Morgado
The original g_udev_device_get_property_as_int() uses strtol() without an explicit base (i.e. 0) so that the base is autodetected from the string whenever possible (e.g. if prefixes with '0x' it is treated as a hexadecimal string). But, for ID_USB_INTERFACE_NUM, we explicitly require reading the number as an hex string, even if we don't have any '0x' prefix. Reported-by: Matthew Stanger <stangerm2@gmail.com>
2016-11-07port-probe: don't probe ignored portsAleksander Morgado
If a port has been flagged as ignored with the ID_MM_PORT_IGNORE udev property, we shouldn't open and probe the ports in any way, just flag them as ignored. We still report them in the list of modem ports, but just with "unknown" type and therefore not using them for anything.
2016-10-25broadband-modem-qmi: add QMI_PROTOCOL_ERROR_NOT_SUPPORTED case for pin ↵Daniele Palmas
status checking Telit LE922A does not like the legacy way for checking pin status, but instead of returning QMI_PROTOCOL_ERROR_INVALID_QMI_COMMAND, it returns QMI_PROTOCOL_ERROR_NOT_SUPPORTED, making the modem not to be fully initialized. This patch adds QMI_PROTOCOL_ERROR_NOT_SUPPORTED as another error for which the new pin checking status way is tried.
2016-10-24core: use a default timeout of 300s for the scan networks operationAleksander Morgado
This is the value which we actually suggest in the manpage for the mmcli operation, so just use the same one. Scanning for 3GPP networks may really take a long time, so a specific timeout must be given: $ mmcli -m 0 --3gpp-scan --timeout=300 Found 4 networks: 21404 - Yoigo (umts, available) 21407 - Movistar (umts, current) 21401 - vodafone ES (umts, forbidden) 21403 - Orange (umts, forbidden) https://bugs.freedesktop.org/show_bug.cgi?id=98235
2016-10-24blacklist: ignore Sigma Sport docking stationsSławomir Bocheński
These CDC ACM class devices are docking stations for Sigma Sport bike computers. As they are sensitive to single byte commands, ModemManager probing mechanism actually caused training data on attached bike computer to be zeroed. https://bugs.freedesktop.org/show_bug.cgi?id=96430
2016-10-19broadband-modem-qmi: don't use PIN2 lock state if unknownAleksander Morgado