usbnet: ipheth: add CDC NCM support
authorFoster Snowhill <forst@pen.gy>
Wed, 7 Jun 2023 13:57:01 +0000 (15:57 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Jun 2023 09:26:57 +0000 (10:26 +0100)
commita2d274c62e44b1995c170595db3865c6fe701226
tree161ac40a21b0fd455dbd4ed7d9f38c2360b367b8
parent3e65efcca87a9bb5f3b864e0a43d167bc0a8688c
usbnet: ipheth: add CDC NCM support

Recent iOS releases support CDC NCM encapsulation on RX. This mode is
the default on macOS and Windows. In this mode, an iOS device may include
one or more Ethernet frames inside a single URB.

Freshly booted iOS devices start in legacy mode, but are put into
NCM mode by the official Apple driver. When reconnecting such a device
from a macOS/Windows machine to a Linux host, the device stays in
NCM mode, making it unusable with the legacy ipheth driver code.

To correctly support such a device, the driver has to either support
the NCM mode too, or put the device back into legacy mode.

To match the behaviour of the macOS/Windows driver, and since there
is no documented control command to revert to legacy mode, implement
NCM support. The device is attempted to be put into NCM mode by default,
and falls back to legacy mode if the attempt fails.

Signed-off-by: Foster Snowhill <forst@pen.gy>
Tested-by: Georgi Valkov <gvalkov@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/ipheth.c