aboutsummaryrefslogtreecommitdiff
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-06novatel: port IMSI loading to use GTaskBen Chan
2017-04-06novatel: port custom init to use GTaskBen Chan
2017-04-06base-modem: port mm_base_modem_authorize to use GTaskBen Chan
2017-04-06novatel-lte: revert to original plugin library nameBen Chan
Commit f9c63bfa0 "build,plugins: update build rules" accidentally changed the Novatel LTE plugin from 'libmm-plugins-novatel-lte.so' to 'libmm-plugins-novatel_lte.so'. The name becomes inconsistent with other plugin names.
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-29libmm-glib: remove explicit GDestroyNotify cast on g_object_unrefBen Chan
g_object_unref is in form of `void (*)(gpointer)`, which matches the GDestroyNotify signature. An explicit GDestroyNotify cast on g_object_unref is thus not needed.
2017-03-29cli: remove explicit GDestroyNotify cast on g_object_unrefBen Chan
g_object_unref is in form of `void (*)(gpointer)`, which matches the GDestroyNotify signature. An explicit GDestroyNotify cast on g_object_unref is thus not needed.
2017-03-29plugins: 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-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-28telit: support QMI and MBIM modemsDaniele Palmas
Vendor specific plugins that support QMI or MBIM based devices need to handle the creation of these modems themselves. https://bugs.freedesktop.org/show_bug.cgi?id=100372 Original patch by Aleksander Morgado.
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-24telit: don't require udev tags to bind devicesAleksander Morgado
The vendor id/string based rules should already be enough to get the telit plugin bind telit devices. This simplifies support for future Telit devices, as we wouldn't need any additional change in the plugin. It also helps when working with RS232 devices as the user wouldn't need to add the explicit tag to get the devices bound to this plugin. https://bugs.freedesktop.org/show_bug.cgi?id=100373
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-24huawei: ignore unsolicited message ^EONSRiccardo Vangelisti
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-16telit: lock/unlock CSIM operations by defaultAleksander Morgado
Wrap the AT+CSIM=XX commands between lock (CSIM=1) and unlock (CSIM=0) operations. This seems to avoid the TTY lockup seen in several different Telit modules. https://bugs.freedesktop.org/show_bug.cgi?id=100205 Reported-by: Penalva, Salvador <Salvador.Penalva@digi.com>
2017-03-16telit: support RS232 modemsAleksander Morgado
Adding the vendor string match allows us to support RS232 devices in the Telit plugin: the USB vendor id check may now be ignored and instead we probe for the vendor string via AT commands, which works even if the device is behind a USB<->RS232 adapter. https://bugs.freedesktop.org/show_bug.cgi?id=100171
2017-03-16telit: don't ignore AT ports without an explicit port type hint tagAleksander Morgado
The telit plugin is based on two main ways of checking the purpose of each port: udev tags flagging specific interfaces (with info taken from Windows .inf drivers), or otherwise using AT#PORTCFG? to query the modem about that information. If none of those applies, the port is ignored by default. In order to support devices that are not explicitly tagged, the plugin shouldn't flag as ignored the AT-capable TTYs, instead they are now grabbed as 'secondary': ports grabbed as secondary will never be used for either primary/data IF there is another port flagged explicitly for primary/data. This fixes the support for modems with a single TTY and no explicit port type hint tag, e.g. RS232 modems with just one single TTY where there's no point in specifying port type hints: the port will be grabbed as secondary, and then automatically promoted to primary/data as there is no other port grabbed. https://bugs.freedesktop.org/show_bug.cgi?id=100159
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-13build: bump libqmi required version to 1.17.900Aleksander Morgado
Since we process the WDS Event Report Indication messages, we need libqmi from git master, so we bump the required version to the first tag that contains those QMI messages.
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-08docs: update copyright year to 2017Aleksander Morgado
2017-03-07cinterion: improve ^SCFG=? response parser to handle EHS5 formatAleksander Morgado
Two main changes in the regex: * Ignore double quotes around interval numbers. * Ignore second set of values (i.e. the one after the comma), as it may not even be given). We now support at least these two formats: ^SCFG: "Radio/Band",("1-511","0-1") ^SCFG: "Radio/Band\",("1"-"147") Reported-by: Colin Helliwell <colin.helliwell@ln-systems.com>
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-28libqcdm: fix WCDMA L1 Manager statesDan Williams
The enum was wrong. There isn't actually an L1M_INIT state; the enum should start with L1M_IDLE. There should also be a L1M_PCH_SLEEP state between DEACTIVATE and DEEP_SLEEP. 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-28build: make sure subdir exists before running glib-mkenumsAleksander Morgado
Reported-by: Colin Helliwell <colin.helliwell@ln-systems.com>
2017-02-16cinterion: improve ^SMONG response parser:Aleksander Morgado
* Allow whitespaces prefixing the values row. * Allow more than one \r\n between the title and the table header. Reported-by: Colin Helliwell <colin.helliwell@ln-systems.com>
2017-02-14cinterion: fix 'ds' setting in CNMI command builderAleksander Morgado
Reported-by: Colin Helliwell <colin.helliwell@ln-systems.com>
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-13cinterion: support number ranges in CNMI=? parserAleksander Morgado
https://lists.freedesktop.org/archives/modemmanager-devel/2017-February/003911.html
2017-02-10libmm-glib: set clear func by default in the MMModemPortInfo arrayAleksander Morgado
So that we don't leak the port names allocated within each MMModemPortInfo. ==261== 672 bytes in 84 blocks are definitely lost in loss record 7,314 of 7,383 ==261== at 0x402C51E: malloc (vg_replace_malloc.c:299) ==261== by 0x4484878: g_malloc (gmem.c:94) ==261== by 0x449D51D: g_strdup (gstrfuncs.c:363) ==261== by 0x44B5B73: g_variant_dup_string (gvariant.c:1529) ==261== by 0x44B945E: g_variant_valist_get_nnp (gvariant.c:4775) ==261== by 0x44B945E: g_variant_valist_get_leaf (gvariant.c:4945) ==261== by 0x44B945E: g_variant_valist_get (gvariant.c:5126) ==261== by 0x44B922C: g_variant_valist_get (gvariant.c:5161) ==261== by 0x44B9FC9: g_variant_get_va (gvariant.c:5388) ==261== by 0x44BA3C5: g_variant_get_child (gvariant.c:5486) ==261== by 0x6613FA8: mm_common_ports_variant_to_garray (mm-common-helpers.c:238) ==261== by 0x6601AB9: ensure_internal_ports (mm-modem.c:766) ==261== by 0x6603E42: mm_modem_peek_ports (mm-modem.c:825) ==261== by 0x65CD94D: owns_port (nm-modem-broadband.c:196) Reported-by: Piotr Figiel <p.figiel@camlintechnologies.com>