Sierra Wireless MC7354: Why all the interfaces?

Aleksander Morgado aleksander at
Mon Oct 23 12:43:31 UTC 2017

>>> 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.
> It's ancient (3.x). We don't even have raw IP support in qmi_wwan.  I
> really would like to get to 4.9.
> We were also considering Sierra Wireless MC7455, but that's Raw IP
> only so it didn't register in ModemManager after I patched qmi_wwan to
> add it.

What do you mean that it didn't register with ModemManager after
patching qmi_wwan? Maybe you didn't port all commits you needed? I
believe there was some usbnet driver change that would also have been

>> 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.
> That makes sense. But I don't have raw IP support (that's kernel 4.5 and later).
> Which one is supposed to be Raw IP?
> How come both wwan0 and wwan1 give me a connection (I didn't test
> extensively, but ping, ssh works on both)?

I believe wwan1 is raw-ip and wwan0 is 802.3; BUT ModemManager can use
both because the modem allows switching the raw-ip one to 802.3.

> I have these in the kernel:
> drivers/net/usb/qmi_wwan.c:832: {QMI_FIXED_INTF(0x1199, 0x68c0, 8)},
>  /* Sierra Wireless MC73xx */  <-- wwan0 / USBIFNUM=="08"
> drivers/net/usb/qmi_wwan.c:833: {QMI_FIXED_INTF(0x1199, 0x68c0, 10)},
>  /* Sierra Wireless MC73xx */ <-- wwan1 / USBIFNUM=="0a"
> drivers/net/usb/qmi_wwan.c:834: {QMI_FIXED_INTF(0x1199, 0x68c0, 11)},
>  /* Sierra Wireless MC73xx */ <-- wwan2 / USBIFNUM=="0b"
> I guess I could comment out lines 833-834 if I really want wwan1/wwan2 out.

Yes, you could do that.

>>> 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)
>>   LABEL="mm_sierra_mc73xx_end"
> That works brilliantly. I'm connecting on wwan0 now, and it seems to
> work. I can't access all IP addresses (ping), but I'm not sure if
> that's the fault of the modem.
> I still have the wwan1/wwan2 interfaces, but they are not used.
> So by adding a single file, all my old scripts just work. That makes
> everything easier.

Glad to hear that :)


More information about the libqmi-devel mailing list