linux/drivers/net/usb
Bjørn Mork 6ff509af38 net: qmi_wwan: fixup missing ethernet header (firmware bug workaround)
A number of LTE devices from different vendors all suffer from the
same firmware bug: Most of the packets received from the device while
it is attached to a LTE network will not have an ethernet header. The
devices work as expected when attached to 2G or 3G networks, sending
an ethernet header with all packets.

This driver is not aware of which network the modem attached to, and
even if it were there are still some packet types which are always
received with the header intact.

All devices supported by this driver have severely limited
networking capabilities:
 - can only transmit IPv4, IPv6 and possibly ARP
 - can only support a single host hardware address at any time
 - will only do point-to-point communcation with the host

Because of this, we are able to reliably identify any bogus raw IP
packets by simply looking at the 4 IP version bits.  All we need to
do is to avoid 4 or 6 in the first digit of the mac address.  This
workaround ensures this, and fix up the received packets as necessary.

Given the distribution of the bug, it is believed that the source is
the chipset vendor.  The devices which are verified to be affected are:
 Huawei E392u-12 (Qualcomm MDM9200)
 Pantech UML290  (Qualcomm MDM9600)
 Novatel USB551L (Qualcomm MDM9600)
 Novatel E362    (Qualcomm MDM9600)

It is believed that the bug depend on firmware revision, which means
that possibly all devices based on the above mentioned chipset may be
affected if we consider all available firmware revisions.

The information about affected devices and versions is likely
incomplete.  As the additional overhead for packets not needing this
fixup is very small, it is considered acceptable to apply the
workaround to all devices handled by this driver.

Reported-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
2013-04-19 17:51:16 -04:00
..
asix_common.c net: asix: handle packets crossing URB boundaries 2013-01-18 14:13:29 -05:00
asix_devices.c usb/net/asix_devices: Add USBNET HG20F9 ethernet dongle 2013-02-27 13:10:35 -05:00
asix.h net: asix: handle packets crossing URB boundaries 2013-01-18 14:13:29 -05:00
ax88172a.c drivers: net: usb: Remove unnecessary alloc/OOM messages 2013-02-04 13:22:34 -05:00
ax88179_178a.c ax88179_178a: ASIX AX88179_178A USB 3.0/2.0 to gigabit ethernet adapter driver 2013-03-03 01:43:47 -05:00
catc.c ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
cdc_eem.c net: usb: cdc_eem: Fix rx skb allocation for 802.1Q VLANs 2012-11-07 21:12:26 -05:00
cdc_ether.c qmi_wwan, cdc-ether: add ADU960S 2013-02-19 00:51:10 -05:00
cdc_mbim.c net: cdc_mbim: remove bogus sizeof() 2013-04-16 16:44:36 -04:00
cdc_ncm.c net: cdc_ncm, cdc_mbim: allow user to prefer NCM for backwards compatibility 2013-03-17 11:59:03 -04:00
cdc_subset.c USB: Disable hub-initiated LPM for comms devices. 2012-05-18 15:42:55 -07:00
cdc-phonet.c cdc-phonet: Don't leak in usbpn_open 2012-08-08 16:04:47 -07:00
cx82310_eth.c net: cx82310_eth: use common match macro 2012-09-03 13:51:02 -04:00
dm9601.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-01-29 15:32:13 -05:00
gl620a.c USB: remove dbg() usage in USB networking drivers 2012-09-20 17:53:14 -04:00
hso.c tty/serial patches for 3.9-rc1 2013-02-21 13:41:04 -08:00
int51x1.c usbnet: int51x1: apply introduced usb command APIs 2012-10-26 03:36:51 -04:00
ipheth.c usb/ipheth: Add iPhone 5 support 2012-10-18 15:34:30 -04:00
kalmia.c remove init of dev->perm_addr in drivers 2013-01-08 18:00:48 -08:00
kaweth.c kaweth: print correct debug ptr 2012-10-11 15:12:33 -04:00
Kconfig smsc75xx: configuration help incorrectly mentions smsc95xx 2013-03-15 09:06:57 -04:00
lg-vl600.c USB: Disable hub-initiated LPM for comms devices. 2012-05-18 15:42:55 -07:00
Makefile ax88179_178a: ASIX AX88179_178A USB 3.0/2.0 to gigabit ethernet adapter driver 2013-03-03 01:43:47 -05:00
mcs7830.c usbnet: mcs7830: apply introduced usb command APIs 2012-10-26 03:36:51 -04:00
net1080.c usbnet: net1080: apply introduced usb command APIs 2012-10-26 03:36:51 -04:00
pegasus.c drivers: net: Remove remaining alloc/OOM messages 2013-02-08 17:44:39 -05:00
pegasus.h
plusb.c usbnet: plusb: apply introduced usb command APIs 2012-10-26 03:36:51 -04:00
qmi_wwan.c net: qmi_wwan: fixup missing ethernet header (firmware bug workaround) 2013-04-19 17:51:16 -04:00
rndis_host.c remove init of dev->perm_addr in drivers 2013-01-08 18:00:48 -08:00
rtl8150.c ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
sierra_net.c drivers: net: usb: Remove unnecessary alloc/OOM messages 2013-02-04 13:22:34 -05:00
smsc75xx.c smsc75xx: fix jumbo frame support 2013-03-29 15:16:21 -04:00
smsc75xx.h smsc75xx: replace 0xffff with PHY_INT_SRC_CLEAR_ALL 2012-05-07 23:43:56 -04:00
smsc95xx.c usbnet: smsc95xx: rename FEATURE_AUTOSUSPEND 2013-02-25 15:49:52 -05:00
smsc95xx.h smsc95xx: support PHY wakeup source 2012-11-23 14:15:18 -05:00
usbnet.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-02-05 14:12:20 -05:00
zaurus.c USB: Disable hub-initiated LPM for comms devices. 2012-05-18 15:42:55 -07:00