linux/drivers/net
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
..
appletalk
arcnet
bonding bonding: in bond_mc_swap() bond's mc addr list is walked without lock 2013-04-19 17:48:19 -04:00
caif tty/serial patches for 3.9-rc1 2013-02-21 13:41:04 -08:00
can can: sja1000: fix handling on dt properties on little endian systems 2013-04-12 13:03:01 +02:00
cris
dsa
ethernet bnx2x: Fix status blocks configuration 2013-04-18 15:03:26 -04:00
fddi
hamradio tty/serial patches for 3.9-rc1 2013-02-21 13:41:04 -08:00
hippi rrunner.c: fix possible memory leak in rr_init_one() 2013-03-10 16:42:23 -04:00
hyperv hyperv: Fix RNDIS send_completion code path 2013-04-08 12:15:17 -04:00
ieee802154 ieee802154: at86rf230: Remove empty suspend/resume callbacks 2013-02-15 15:35:34 -05:00
irda Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-02-21 17:40:58 -08:00
phy net/phy: micrel: Disable asymmetric pause for KSZ9021 2013-02-28 15:37:30 -05:00
plip
ppp ppp: convert to idr_alloc() 2013-02-27 19:10:18 -08:00
slip
team team: unsyc the devices addresses when port is removed 2013-03-07 16:35:57 -05:00
usb net: qmi_wwan: fixup missing ethernet header (firmware bug workaround) 2013-04-19 17:51:16 -04:00
vmxnet3 vmxnet3: prevent div-by-zero panic when ring resizing uninitialized dev 2013-03-07 16:10:47 -05:00
wan Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-02-26 20:16:07 -08:00
wimax Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-02-20 18:58:50 -08:00
wireless ath9k_hw: change AR9580 initvals to fix a stability issue 2013-04-12 13:22:09 -04:00
xen-netback Revert "xen: netback: remove redundant xenvif_put" 2013-02-19 13:04:34 -05:00
dummy.c
eql.c
ifb.c
Kconfig Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-02-26 11:44:11 -08:00
LICENSE.SRC
loopback.c
macvlan.c macvlan: Set IFF_UNICAST_FLT flag to prevent unnecessary promisc mode. 2013-03-07 16:36:59 -05:00
macvtap.c macvtap: convert to idr_alloc() 2013-02-27 19:10:18 -08:00
Makefile
mdio.c
mii.c
netconsole.c netconsole: don't call __netpoll_cleanup() while atomic 2013-03-12 06:58:55 -04:00
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c
tun.c tuntap: fix error return code in tun_set_iff() 2013-04-12 15:00:04 -04:00
veth.c veth: fix NULL dereference in veth_dellink() 2013-02-10 20:41:43 -05:00
virtio_net.c All trivial, thanks to the stuff which didn't quite make it time. 2013-02-26 14:49:12 -08:00
vxlan.c vxlan: fix oops when delete netns containing vxlan 2013-03-07 16:12:51 -05:00
xen-netfront.c