Sierra Wireless MC7354: Why all the interfaces?

Aleksander Morgado aleksander at aleksander.es
Mon Oct 23 09:05:04 UTC 2017


Hey

>
> We are in the process of testing Sierra Wireless MC7354.. It has 3
> wwan<N> interfaces (wwan0, wwan1, wwan2), with the corresponding
> /dev/cdc-wdm<N> devices.
>
> We are using ModemManager 1.6 with libQMI 1.16.0 and a custom python
> script that hooks into D-Bus messages to do the needful.
> The modem usually connects on wwan1, but has also connected on wwan0.
> The connection seems fine and stable.
> We have a lot of script that expect the modem connection to be on wwan0.
>
> So some basic questions:
> 1) Why multiple interfaces? What do they mean? Are they different
> bands (3G/LTE/etc)? Where can I read up on this?

You're probably using an old kernel as well, because the 3rd interface
(wwan2) shouldn't be exposed. I removed it from qmi_wwan a while ago
because it was non-functional.

Regarding the other two, one comes with 802.3 link layer protocol
configured by default (ethernet packets) and the other one comes with
raw-ip link layer protocol by default (raw IP packets). ModemManager
can use either of them; in your case it probably is switching the
raw-ip one to 802.3 before connecting, as that old kernel version only
worked with 802.3 mode.

You can have multiple WWAN interfaces if e.g. you want to connect to
different APNs at the same time, that is one recurring use case I see.
You may want to have an APN for "corporate network" and an APN for
"public internet" or some other setup.

> 2) Can I limit the number of interfaces to one? Otherwise I need to
> change a lot of things from a "static wwan0" interface to a dynamic
> one that checks wwan0, wwan1 and wwan2.

In ModemManager 1.6.x you can also try to blacklist the other
interfaces explicitly with ID_MM_PORT_IGNORE.
E.g.:

$ vim /lib/udev/rules.d/77-mm-sierra-mc73xx.rules
  ACTION!="add|change|move", GOTO="mm_sierra_mc73xx_end"

  SUBSYSTEMS=="usb", ATTRS{idVendor}=="1199",
ATTRS{idProduct}=="68c0", GOTO="mm_sierra_mc73xx_check"
  GOTO="mm_sierra_mc73xx_end"

  LABEL="mm_sierra_mc73xx_check"

  SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*",
ENV{.ID_MM_SIERRA_MC73XX_USBIFNUM}="$attr{bInterfaceNumber}"

  # Sierra Wireless MC73xx device, interfaces #10 (cdc-wdm1, wwan1)
and #11 (cdc-wdm2, wwan2)
  ENV{.ID_MM_SIERRA_MC73XX_USBIFNUM}=="0a", ENV{ID_MM_PORT_IGNORE}="1"
  ENV{.ID_MM_SIERRA_MC73XX_USBIFNUM}=="0b", ENV{ID_MM_PORT_IGNORE}="1"

  LABEL="mm_sierra_mc73xx_end"

> 3) It seems to work fine with qmi_wwan+cdc_wdm kernel modules (and
> friends). Would cdc-mbim (and libMBIM) add anything of value?

Not really. If you're happy with QMI, I would stick with it.

-- 
Aleksander
https://aleksander.es


More information about the libqmi-devel mailing list