Dell-branded Sierra Wireless 3G/4G modem not online?

dell-dw5570

Your Dell modem not getting online?

It’s not uncommon to find weird mobile broadband modems that for one reason or another don’t end up working as expected with NetworkManager/ModemManager; but the new 3G/4G modems in Dell laptops are at a total different level. These Dell-branded devices are really Sierra Wireless powered modems, e.g. the Dell 5808 is a Sierra Wireless MC7355, or the Dell DW5570 is a Sierra Wireless MC8805.

[UPDATE]
Looks like not only Dell-branded modems are affected by this issue. According to some user reports HP-branded modems like the HP lt4111 (based on the Sierra Wireless EM7355) are also affected by the issue.

Late last year we started to receive several bugreports in the ModemManager and libqmi mailing lists for these kind of devices. Basically, the modem would never get to a proper online mode with the RF transceivers powered and therefore would never even get registered in the mobile network. This was happening to both QMI and MBIM based configurations, and the direct error message reported by libqmi when trying to get into online mode was just… not very very helpful.


  $ sudo qmicli -d /dev/cdc-wdm1 --dms-get-operating-mode
  [/dev/cdc-wdm1] Operating mode retrieved:
    Mode: 'low-power'
    HW restricted: 'no'


  $ sudo qmicli -d /dev/cdc-wdm1 --dms-set-operating-mode=online
  error: couldn't set operating mode: QMI protocol error (3): 'Internal'

The issue was reported to the kernel, assuming that this would likely be a new missing rfkill related setup in newer Dell laptops. One of the users reported in that same bugreport that actually using Sierra’s GobiNet driver instead of qmi_wwan would end up putting the modem in online mode, so just switching drivers during boot would make it work. WTF?

Digging in Sierra’s GobiNet QMI driver

Well, without much hope of finding anything, and given that I had just bought such a Dell modem myself for testing a new “Dell” plugin, I decided to dig into Sierra’s kernel driver sources. Apart from some already known things (e.g. they use the WDA service to set the net data format in new modems instead of the old CTL service), these lines popped:

  if (is9x15)
  {
    // Set FCC Authentication
    result = QMIDMSSWISetFCCAuth( pDev );
    if (result != 0)
    {
      return result;
    }
  }

The Sierra GobiNet driver is sending some magic “FCC auth” command during boot to the modem; which according to the driver sources maps to command 0x555F in the DMS service. Hey I should try that!

Adding the new command support in libqmi wasn’t difficult, so in some minutes I was ready to test it… and worked.

  $ sudo qmicli -d /dev/cdc-wdm1 --dms-get-operating-mode
  [/dev/cdc-wdm1] Operating mode retrieved:
    Mode: 'low-power'
    HW restricted: 'no'


  $ sudo qmicli -d /dev/cdc-wdm1 --dms-set-fcc-authentication
  [/dev/cdc-wdm1] Successfully set FCC authentication


  $ sudo qmicli -d /dev/cdc-wdm1 --dms-get-operating-mode
  [/dev/cdc-wdm1] Operating mode retrieved:
    Mode: 'online'
    HW restricted: 'no'

Support for this is already available automatically when using libqmi and ModemManager git master. It will hit the next stable releases likely as well.

[UPDATE]
These fixes have been already released in ModemManager 1.4.4 and libqmi 1.12.4.

MBIM?

Well, I don’t know if there is any command in MBIM to do the same operation (likely there is in a Sierra-specific service), but one thing we could anyway try to do is to use “QMI embedded in MBIM“, which Bjørn has already tested some times. I’ll try to test that some day, but I’ll need to get another modem as my DW5570 only comes up with a QMI configuration. For now, if you’re stuck with this problem using MBIM, you can likely just select USB configuration #1 using usb_modeswitch and get the modem switched to QMI mode.

[UPDATE]
If your modem is being managed in MBIM and not in QMI, you can now use Collin McMillan’s tool to issue the QMI FCC Auth command embedded in MBIM transactions.

TL;DR?

Dell-branded Sierra Wireless modems need the “FCC Auth” command (QMI DMS service, 0x555F) before they can be brought online; supported in libqmi and ModemManager already.

Posted on February 9, 2015, in Development, FreeDesktop Planet, GNOME Planet, Planets and tagged , , , , , , . Bookmark the permalink. 15 Comments.

  1. Hello,

    I also have this modem, it is on a Dell venue 11 pro 5130 too. I managed to get the modem online with your new code. The modem connects to the APN with –simple-connect=”apn=internet.proximus.be”. Very nice, however, the last step, which is getting an IP address using DHCP is not working. I do “dhclient wwan0” but it times out. Do you have any clue about this?
    Best regards,
    Tom,

  2. Why are you running dhclient yourself? Aren’t you using ModemManager with NetworkManager? Anyway, it may be that the 802.3 setting via the CTL command didn’t work correctly. With this kind of modems you can run WDA as well, so please try this *before* launching the connection and get me the results:
    $ sudo qmicli -d /dev/cdc-wdm0 --proxy --wda-get-data-format
    $ sudo qmicli -d /dev/cdc-wdm0 --proxy --wda-set-data-format="802-3"
    If that works, we may need to do that automatically in MM when the data format is found to be not correct.

  3. Hello, I am running NetworkManager yes, but it failed at the “getting ip address” stage, so I tried it manually(also to learn how it can be done from the commandline). It seems the protcol is already “802-3”.

    $ sudo qmicli -d /dev/cdc-wdm0 –device-open-proxy –wda-get-data-format
    [/dev/cdc-wdm0] Successfully got data format
    QoS flow header: no
    Link layer protocol: ‘802-3’
    Uplink data aggregation protocol: ‘disabled’
    Downlink data aggregation protocol: ‘disabled’
    NDP signature: ‘0’
    Uplink data aggregation max size: ‘0’
    Downlink data aggregation max size: ‘0’

  4. Hi aleksander,

    thanks for investigation and the good explaination.

    I rebuilt the backported packages

    for Ubuntu Vivid Vervet (15.04):

    http://download.opensuse.org/repositories/home:/M0ses:/vividbackports/xUbuntu_15.04/

    and openSuSE 13.02

    http://download.opensuse.org/repositories/home:/M0ses:/branches:/GNOME:/Factory/openSUSE_13.2/

    in hope it will help somebody

    regards,
    Frank

  5. For anyone having this problem on Linux for MBIM-only modems, you might try my fix for the EM7355 here:
    http://lists.freedesktop.org/archives/libmbim-devel/2015-August/000626.html

  6. Hi!
    Many thanks for this article, I am able to interact with my modem (MC8805 Sierra Wireless).
    Like Tom it has been more than one week I am stuck at the latest stage (getting an IP address..)
    It is frustrating as it is like the connection is ok and everything else is working.
    I post the related threat I oppenend on Arch forum : https://bbs.archlinux.org/viewtopic.php?id=203466

    Many thanks for your help, I really trust only latest stage is missing..
    (I am not using ModemManager as I am running it in my server without cli, I am only use qmicli as mbimcli seems to not work)

    belette

  7. belette, I replied in the arch linux forum already. Anyway, if you could try to use ModemManager, that would be great, as MM does most of the device setup automatically, and has its own “mmcli”. Anyway, your issue has nothing to do with this blog post 🙂

  8. Thanks Aleksander for your help
    I replied to you directly on Arch Forum

  9. Michal Safar

    Hello,
    the same problem here. I tried the things that are posted here but it wrote:

    sudo qmicli -d /dev/cdc-wdm1 –dms-get-operating-mode

    it worked and wrote: low power mode then i tried:

    sudo qmicli -d /dev/cdc-wdm1 –dms-set-fcc-authentication

    and the answer was that it has no function. Then I restarted the system and it started writing :

    error: couldn’t create client for the ‘dms’ service: CID allocation failed in the CTL client: Transaction timed out

  10. The CID allocation failure may very well be because other process like ModemManager is using the QMI port. I’d suggest you try all qmicli commands using the “-p” additional option.

  1. Pingback: Dell Wireless 5809e support in openSUSE 13.2 | 0xf8.org

  2. Pingback: Dell Wireless 5809e support in Linux – a followup | 0xf8.org

  3. Pingback: Ubuntu 15.10 with Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card « Beyond Technology

  4. Pingback: FCC unlock procedure updates in ModemManager 1.18.4 | SIGQUIT

Leave a comment