17 May, 2014

1 commit

  • To have an idea of the effects of the protocol coalescing
    it's useful to have some counters showing the different
    aspects.

    Due to the asymmetrical usbnet interface the netdev
    rx_bytes counter has been counting real received payload,
    while the tx_bytes counter has included the NCM/MBIM
    framing overhead. This overhead can be many times the
    payload because of the aggressive padding strategy of
    this driver, and will vary a lot depending on device
    and traffic.

    With very few exceptions, users are only interested in
    the payload size. Having an somewhat accurate payload
    byte counter is particularly important for mobile
    broadband devices, which many NCM devices and of course
    all MBIM devices are. Users and userspace applications
    will use this counter to monitor account quotas.

    Having protocol specific counters for the overhead, we are
    now able to correct the tx_bytes netdev counter so that
    it shows the real payload

    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     

14 May, 2014

3 commits

  • The NCM class match in the cdc_mbim driver is confusing and
    cause unexpected behaviour. The USB core guarantees that a
    USB interface is in altsetting 0 when probing starts. This
    means that devices implementing a NCM 1.0 backwards
    compatible MBIM function (a "NCM/MBIM function") always hit
    the NCM entry in the cdc_mbim driver match table. Such
    functions will never match any of the MBIM entries.

    This causes unexpeced behaviour for cases where the NCM and
    MBIM entries are differet, which is currently the case for
    all except Ericsson devices.

    Improve the probing of NCM/MBIM functions by looking up the
    device again in the cdc_mbim match table after switching to
    the MBIM identity.

    The shared altsetting selection is updated to better
    accommodate the new probing logic, returning the preferred
    altsetting for the control interface instead of the data
    interface. The control interface altsetting update is moved
    to the cdc_mbim driver. It is never necessary to change the
    control interface altsetting for NCM.

    Cc: Greg Suarez
    Reported by: Yu-an Shih
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     
  • DSS VLANs are pseudo network interfaces representing arbitrary
    data streams, and specifically not IP. Preventing spurious IP
    packets can sometimes be a hassle. The kernel will for example
    send an IPv6 Router Solicit when the interface is brought up
    unless the user has been careful enough to disable IPv6 first.
    Such packets forwared to a MBIM DSS session will look like
    spurious noise to the device, and can cause it to log an error
    or even malfunction.

    Drop all IP packets on the designated DSS VLANs to prevent such
    unwanted spurious transmissions.

    Cc: Greg Suarez
    Reported-by: Arnaud Desmier
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     
  • The cdc_mbim driver maps 802.1q VLANs to MBIM IP and DSS
    sessions. MBIM IP session 0 is handled as an exception and
    is mapped to untagged frames.

    This patch adds optional support for remapping MBIM IP
    session 0 to 802.1q VLAN ID 4094 instead. The default
    behaviour is not changed. The new behaviour is triggered
    by adding a link for this previously unsupported VLAN.

    The untagged mapping was chosen initially to support the
    assumed most common use case: Most current MBIM devices only
    support a single IP session (i.e. session 0 only), and using
    untagged frames lets the users completely ignore the
    additonal complexity of the multiplexing layer.

    But when the multiplexing features of MBIM are used, then
    this netdev gets a double meaning: It becomes the master
    interface for all the VLAN subdevs the additional sessions
    are mapped to, while still serving as the untagged IP
    interface for session 0.

    This can be problematic, especially when using Device Service
    Streams (DSS), as have become apparent recently with the
    availability of devices with real DSS support. Some use cases
    need to e.g set a MTU which is higher than allowed for IP
    Session 0. The dual role also leads to the situation where
    the IP Session 0 interface cannot be taken down without
    breaking unrelated IP or DSS sessions - a devastating side
    effect which applications managing a simple IP session cannot
    be expected to be aware of. A typical DHCP client will assume
    that it should bring the interface down after releasing the
    IP lease.

    These problems can be avoided by tagging IP session 0 packets
    too, making this session similar to all other multiplexed
    sessions. This redefines the main netdev as an upper master
    interface only.

    Cc: Greg Suarez
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     

13 May, 2014

1 commit


10 May, 2014

1 commit

  • This driver maps 802.1q VLANs to MBIM sessions. The mapping is based on
    a bogus assumption that all tagged frames will use the acceleration API
    because we enable NETIF_F_HW_VLAN_CTAG_TX. This fails for e.g. frames
    tagged in userspace using packet sockets. Such frames will erroneously
    be considered as untagged and silently dropped based on not being IP.

    Fix by falling back to looking into the ethernet header for a tag if no
    accelerated tag was found.

    Fixes: a82c7ce5bc5b ("net: cdc_ncm: map MBIM IPS SessionID to VLAN ID")
    Cc: Greg Suarez
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     

08 May, 2014

1 commit

  • Fixes this warning introduced by commit 5b8f15f78e6f
    ("net: cdc_mbim: handle IPv6 Neigbor Solicitations"):

    ===============================
    [ INFO: suspicious RCU usage. ]
    3.15.0-rc3 #213 Tainted: G W O
    -------------------------------
    net/8021q/vlan_core.c:69 suspicious rcu_dereference_check() usage!

    other info that might help us debug this:

    rcu_scheduler_active = 1, debug_locks = 1
    no locks held by ksoftirqd/0/3.

    stack backtrace:
    CPU: 0 PID: 3 Comm: ksoftirqd/0 Tainted: G W O 3.15.0-rc3 #213
    Hardware name: LENOVO 2776LEG/2776LEG, BIOS 6EET55WW (3.15 ) 12/19/2011
    0000000000000001 ffff880232533bf0 ffffffff813a5ee6 0000000000000006
    ffff880232530090 ffff880232533c20 ffffffff81076b94 0000000000000081
    0000000000000000 ffff8802085ac000 ffff88007fc8ea00 ffff880232533c50
    Call Trace:
    [] dump_stack+0x4e/0x68
    [] lockdep_rcu_suspicious+0xfa/0x103
    [] __vlan_find_dev_deep+0x54/0x94
    [] cdc_mbim_rx_fixup+0x379/0x66a [cdc_mbim]
    [] ? _raw_spin_unlock_irqrestore+0x3a/0x49
    [] ? trace_hardirqs_on_caller+0x192/0x1a1
    [] usbnet_bh+0x59/0x287 [usbnet]
    [] tasklet_action+0xbb/0xcd
    [] __do_softirq+0x14c/0x30d
    [] run_ksoftirqd+0x1f/0x50
    [] smpboot_thread_fn+0x172/0x18e
    [] ? SyS_setgroups+0xdf/0xdf
    [] kthread+0xb5/0xbd
    [] ? __wait_for_common+0x13b/0x170
    [] ? __kthread_parkme+0x5c/0x5c
    [] ret_from_fork+0x7c/0xb0
    [] ? __kthread_parkme+0x5c/0x5c

    Fixes: 5b8f15f78e6f ("net: cdc_mbim: handle IPv6 Neigbor Solicitations")
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     

05 Nov, 2013

3 commits


02 Nov, 2013

3 commits

  • Too many pointers back and forth are likely to confuse developers,
    creating subtle bugs whenever we forget to syncronize them all.

    As a usbnet driver, we should stick with the standard struct
    usbnet fields as much as possible. The netdevice is one such
    field.

    Cc: Greg Suarez
    Cc: Alexey Orishko
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     
  • A number of devices in the wild have turned out to require ZLPs.
    Even if this is a spec violation, our priority is to make any
    device work as good as possible. Devices needing ZLPs will fail
    to receive any full sized frame we send. On the other hand,
    devices which do not need the ZLP will still work if we send
    them.

    This gives us no other option than sending ZLPs by default.

    This will prevent devices conforming to the spec from making the
    optimizations which are possible without ZLPs. Adding known
    such devices to a whitelist, to avoid the possible negative
    impact of the new spec violating default.

    Cc: Greg Suarez
    Cc: Alexey Orishko
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     
  • MBIM is a point-to-point protocol transporting raw IP packets
    with no L2 headers. Only IPv4 and IPv6 are supported. ARP in
    particular is not, which is quite logical given the lack of
    L2 headers.

    The driver still emulates an ethernet interface, dropping all
    unsupported protocols, and avoiding neigbour resolving by
    setting the IFF_NOARP flag.

    The MBIM specification does not explicitly forbid IPv6 Neighbor
    Discovery, and it seems the other OS support will respond to
    Neighbor Solicitations on MBIM links. There are therefore
    buggy devices out there, which despite the pointlessness, still
    require Neighbor Discovery for IPv6 over MBIM.

    This is incompatible with the IFF_NOARP flag which disables
    both ARP and ND. We cannot support ARP in any case, so we
    have to keep that flag. This patch implements a workaround
    for the buggy devices, letting the driver respond directly
    to Neighbor Solicitations from the device.

    This is not optimal, but will have minimal effect on any sane
    device.

    Cc: Greg Suarez
    Reported-and-tested-by: Thomas Schäfer
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     

29 Aug, 2013

1 commit

  • This patch adds another entry (HP hs2434 Mobile Broadband) to the list
    of exceptional devices that require a zero length packet in order to
    function properly. This list was added in commit 844e88f0. The hs2434
    is manufactured by Sierra Wireless, who also produces the MC7710,
    which the ZLP exception list was created for in the first place. So
    hopefully it is just this one producer's devices that will need this
    workaround.

    Tested on a DM1-4310NR HP notebook, which does not function without this
    change.

    Signed-off-by: Rob Gardner
    Acked-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Rob Gardner
     

02 May, 2013

1 commit

  • Pull networking updates from David Miller:
    "Highlights (1721 non-merge commits, this has to be a record of some
    sort):

    1) Add 'random' mode to team driver, from Jiri Pirko and Eric
    Dumazet.

    2) Make it so that any driver that supports configuration of multiple
    MAC addresses can provide the forwarding database add and del
    calls by providing a default implementation and hooking that up if
    the driver doesn't have an explicit set of handlers. From Vlad
    Yasevich.

    3) Support GSO segmentation over tunnels and other encapsulating
    devices such as VXLAN, from Pravin B Shelar.

    4) Support L2 GRE tunnels in the flow dissector, from Michael Dalton.

    5) Implement Tail Loss Probe (TLP) detection in TCP, from Nandita
    Dukkipati.

    6) In the PHY layer, allow supporting wake-on-lan in situations where
    the PHY registers have to be written for it to be configured.

    Use it to support wake-on-lan in mv643xx_eth.

    From Michael Stapelberg.

    7) Significantly improve firewire IPV6 support, from YOSHIFUJI
    Hideaki.

    8) Allow multiple packets to be sent in a single transmission using
    network coding in batman-adv, from Martin Hundebøll.

    9) Add support for T5 cxgb4 chips, from Santosh Rastapur.

    10) Generalize the VXLAN forwarding tables so that there is more
    flexibility in configurating various aspects of the endpoints.
    From David Stevens.

    11) Support RSS and TSO in hardware over GRE tunnels in bxn2x driver,
    from Dmitry Kravkov.

    12) Zero copy support in nfnelink_queue, from Eric Dumazet and Pablo
    Neira Ayuso.

    13) Start adding networking selftests.

    14) In situations of overload on the same AF_PACKET fanout socket, or
    per-cpu packet receive queue, minimize drop by distributing the
    load to other cpus/fanouts. From Willem de Bruijn and Eric
    Dumazet.

    15) Add support for new payload offset BPF instruction, from Daniel
    Borkmann.

    16) Convert several drivers over to mdoule_platform_driver(), from
    Sachin Kamat.

    17) Provide a minimal BPF JIT image disassembler userspace tool, from
    Daniel Borkmann.

    18) Rewrite F-RTO implementation in TCP to match the final
    specification of it in RFC4138 and RFC5682. From Yuchung Cheng.

    19) Provide netlink socket diag of netlink sockets ("Yo dawg, I hear
    you like netlink, so I implemented netlink dumping of netlink
    sockets.") From Andrey Vagin.

    20) Remove ugly passing of rtnetlink attributes into rtnl_doit
    functions, from Thomas Graf.

    21) Allow userspace to be able to see if a configuration change occurs
    in the middle of an address or device list dump, from Nicolas
    Dichtel.

    22) Support RFC3168 ECN protection for ipv6 fragments, from Hannes
    Frederic Sowa.

    23) Increase accuracy of packet length used by packet scheduler, from
    Jason Wang.

    24) Beginning set of changes to make ipv4/ipv6 fragment handling more
    scalable and less susceptible to overload and locking contention,
    from Jesper Dangaard Brouer.

    25) Get rid of using non-type-safe NLMSG_* macros and use nlmsg_*()
    instead. From Hong Zhiguo.

    26) Optimize route usage in IPVS by avoiding reference counting where
    possible, from Julian Anastasov.

    27) Convert IPVS schedulers to RCU, also from Julian Anastasov.

    28) Support cpu fanouts in xt_NFQUEUE netfilter target, from Holger
    Eitzenberger.

    29) Network namespace support for nf_log, ebt_log, xt_LOG, ipt_ULOG,
    nfnetlink_log, and nfnetlink_queue. From Gao feng.

    30) Implement RFC3168 ECN protection, from Hannes Frederic Sowa.

    31) Support several new r8169 chips, from Hayes Wang.

    32) Support tokenized interface identifiers in ipv6, from Daniel
    Borkmann.

    33) Use usbnet_link_change() helper in USB net driver, from Ming Lei.

    34) Add 802.1ad vlan offload support, from Patrick McHardy.

    35) Support mmap() based netlink communication, also from Patrick
    McHardy.

    36) Support HW timestamping in mlx4 driver, from Amir Vadai.

    37) Rationalize AF_PACKET packet timestamping when transmitting, from
    Willem de Bruijn and Daniel Borkmann.

    38) Bring parity to what's provided by /proc/net/packet socket dumping
    and the info provided by netlink socket dumping of AF_PACKET
    sockets. From Nicolas Dichtel.

    39) Fix peeking beyond zero sized SKBs in AF_UNIX, from Benjamin
    Poirier"

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1722 commits)
    filter: fix va_list build error
    af_unix: fix a fatal race with bit fields
    bnx2x: Prevent memory leak when cnic is absent
    bnx2x: correct reading of speed capabilities
    net: sctp: attribute printl with __printf for gcc fmt checks
    netlink: kconfig: move mmap i/o into netlink kconfig
    netpoll: convert mutex into a semaphore
    netlink: Fix skb ref counting.
    net_sched: act_ipt forward compat with xtables
    mlx4_en: fix a build error on 32bit arches
    Revert "bnx2x: allow nvram test to run when device is down"
    bridge: avoid OOPS if root port not found
    drivers: net: cpsw: fix kernel warn on cpsw irq enable
    sh_eth: use random MAC address if no valid one supplied
    3c509.c: call SET_NETDEV_DEV for all device types (ISA/ISAPnP/EISA)
    tg3: fix to append hardware time stamping flags
    unix/stream: fix peeking with an offset larger than data in queue
    unix/dgram: fix peeking with an offset larger than data in queue
    unix/dgram: peek beyond 0-sized skbs
    openvswitch: Remove unneeded ovs_netdev_get_ifindex()
    ...

    Linus Torvalds
     

30 Apr, 2013

1 commit

  • Pull USB patches from Greg Kroah-Hartman:
    "Here's the big USB pull request for 3.10-rc1.

    Lots of USB patches here, the majority being USB gadget changes and
    USB-serial driver cleanups, the rest being ARM build fixes / cleanups,
    and individual driver updates. We also finally got some chipidea
    fixes, which have been delayed for a number of kernel releases, as the
    maintainer has now reappeared.

    All of these have been in linux-next for a while"

    * tag 'usb-3.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (568 commits)
    USB: ehci-msm: USB_MSM_OTG needs USB_PHY
    USB: OHCI: avoid conflicting platform drivers
    USB: OMAP: ISP1301 needs USB_PHY
    USB: lpc32xx: ISP1301 needs USB_PHY
    USB: ftdi_sio: enable two UART ports on ST Microconnect Lite
    usb: phy: tegra: don't call into tegra-ehci directly
    usb: phy: phy core cannot yet be a module
    USB: Fix initconst in ehci driver
    usb-storage: CY7C68300A chips do not support Cypress ATACB
    USB: serial: option: Added support Olivetti Olicard 145
    USB: ftdi_sio: correct ST Micro Connect Lite PIDs
    ARM: mxs_defconfig: add CONFIG_USB_PHY
    ARM: imx_v6_v7_defconfig: add CONFIG_USB_PHY
    usb: phy: remove exported function from __init section
    usb: gadget: zero: put function instances on unbind
    usb: gadget: f_sourcesink.c: correct a copy-paste misnomer
    usb: gadget: cdc2: fix error return code in cdc_do_config()
    usb: gadget: multi: fix error return code in rndis_do_config()
    usb: gadget: f_obex: fix error return code in obex_bind()
    USB: storage: convert to use module_usb_driver()
    ...

    Linus Torvalds
     

23 Apr, 2013

1 commit

  • Conflicts:
    drivers/net/ethernet/emulex/benet/be_main.c
    drivers/net/ethernet/intel/igb/igb_main.c
    drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
    include/net/scm.h
    net/batman-adv/routing.c
    net/ipv4/tcp_input.c

    The e{uid,gid} --> {uid,gid} credentials fix conflicted with the
    cleanup in net-next to now pass cred structs around.

    The be2net driver had a bug fix in 'net' that overlapped with the VLAN
    interface changes by Patrick McHardy in net-next.

    An IGB conflict existed because in 'net' the build_skb() support was
    reverted, and in 'net-next' there was a comment style fix within that
    code.

    Several batman-adv conflicts were resolved by making sure that all
    calls to batadv_is_my_mac() are changed to have a new bat_priv first
    argument.

    Eric Dumazet's TS ECR fix in TCP in 'net' conflicted with the F-RTO
    rewrite in 'net-next', mostly overlapping changes.

    Thanks to Stephen Rothwell and Antonio Quartulli for help with several
    of these merge resolutions.

    Signed-off-by: David S. Miller

    David S. Miller
     

20 Apr, 2013

2 commits


17 Apr, 2013

1 commit


26 Mar, 2013

1 commit

  • If suspend callback fails in system sleep context, usb core will
    ignore the failure and let system sleep go ahead further, so
    this patch comments on the case and requires that both
    usbnet_suspend() and subdriver->suspend() MUST return 0 in
    system sleep context.

    Acked-by: David S. Miller
    Acked-by: Bjørn Mork
    Signed-off-by: Ming Lei
    Signed-off-by: Greg Kroah-Hartman

    Ming Lei
     

17 Mar, 2013

1 commit

  • commit bd329e1 ("net: cdc_ncm: do not bind to NCM compatible MBIM devices")
    introduced a new policy, preferring MBIM for dual NCM/MBIM functions if
    the cdc_mbim driver was enabled. This caused a regression for users
    wanting to use NCM.

    Devices implementing NCM backwards compatibility according to section
    3.2 of the MBIM v1.0 specification allow either NCM or MBIM on a single
    USB function, using different altsettings. The cdc_ncm and cdc_mbim
    drivers will both probe such functions, and must agree on a common
    policy for selecting either MBIM or NCM. Until now, this policy has
    been set at build time based on CONFIG_USB_NET_CDC_MBIM.

    Use a module parameter to set the system policy at runtime, allowing the
    user to prefer NCM on systems with the cdc_mbim driver.

    Cc: Greg Suarez
    Cc: Alexey Orishko
    Reported-by: Geir Haatveit
    Reported-by: Tommi Kyntola
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=54791
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     

24 Jan, 2013

1 commit

  • Reverting 328d7b8 and instead adding an exception for the
    Sierra Wireless MC7710.

    commit 328d7b8 (net: cdc_mbim: send ZLP after max sized NTBs)
    added a workaround for an issue observed on one specific device.
    Concerns were raised that this workaround adds a performance
    penalty to all devices based on questionable, if not buggy,
    behaviour of a single device:

    "If you add ZLP for NTBs of dwNtbOutMaxSize, you are heavily affecting CPU
    load, increasing interrupt load by factor of 2 in high load traffic
    scenario and possibly decreasing throughput for all other devices
    which behaves correctly."

    "The idea of NCM was to avoid extra ZLPs. If your transfer is exactly
    dwNtbOutMaxSize, it's known, you can submit such request on the receiver
    side and you do not need any EOT indicatation, so the frametime can be
    used for useful data."

    Adding a device specific exception to prevent the workaround from
    affecting well behaved devices.

    The assumption here is that needing a ZLP is truly an *exception*.
    We do not yet have enough data to verify this. The generic
    workaround in commit 328d7b8 should be considered acceptable despite
    the performance penalty if the exception list becomes a maintainance
    hassle.

    Cc: Alexey ORISHKO
    Cc: Yauheni Kaliuta
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     

22 Jan, 2013

1 commit

  • We normally avoid sending ZLPs by padding NTBs with a zero byte
    if the NTB is shorter than dwNtbOutMaxSize, resulting in a short
    USB packet instead of a ZLP. But in the case where the NTB length
    is exactly dwNtbOutMaxSize and this is an exact multiplum of
    wMaxPacketSize, then we must send a ZLP.

    This fixes an issue seen on a Sierra Wireless MC7710 device
    where the transmission would fail whenever we ended up padding
    the NTBs to max size.

    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     

23 Oct, 2012

3 commits

  • MBIM devices can support up to 256 generic streams called
    Device Service Streams (DSS). The MBIM spec says

    The format of the Device Service Stream payload depends
    on the device service (as identified by the corresponding
    UUID) that is used when opening the data stream.

    Example use cases are serial AT command interfaces and NMEA
    data streams. We cannot make any assumptions about these
    device services.

    Adding support for Device Service Stream by extending
    the MBIM session to VLAN mapping scheme, allocating
    VLAN IDs 256 to 511 for DSS, using the DSS SessionID
    as the lower 8bit of the VLAN ID.

    Using a netdev for DSS keeps the device framing intact and
    allows userspace to do whatever it want with the streams.
    For example, exporting an AT command interface using DSS
    session #0 to a PTY for use with a terminal application like
    minicom:

    vconfig add wwan0 256
    ip link set dev wwan0 up
    ip link set dev wwan0.256 up
    socat INTERFACE:wwan0.256,type=2 PTY:,echo=0,link=/tmp/modem

    Device configuration must be done using MBIM control commands
    over the /dev/cdc-wdmx device. The userspace management
    application should coordinate host VLAN configuration and the
    device MBIM configuration using the device capabilities to
    find out if it needs to set up PTY mappings etc.

    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     
  • MBIM devices can support up to 256 independent IP Streams.
    The main network device will only handle SessionID 0. Mapping
    SessionIDs 1 to 255 to VLANs using the SessionID as VLAN ID
    allow userspace to use these streams with traditional tools
    like vconfig.

    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Bjørn Mork
     
  • The CDC Mobile Broadband Interface Model (MBIM) specification
    extends CDC NCM by
    - removing the redundant ethernet header from the point-to-point
    USB channel
    - adding support for multiple IP (v4 and/or v6) sessions multiplexed
    on the same USB channel
    - adding a MBIM control channel encapsulated in CDC
    - adding Device Service Streams (DSS), which are non IP generic data
    streams multiplexed on the same USB channel as the IP sessions

    MBIM devices are managed using the dedicated control channel, and no
    data will flow on the data channel until a control session has been
    established. This driver has no knowledge of MBIM control messages.
    It just exports the control channel to a /dev/cdc-wdmX character
    device for userspace management applications. Such an application is
    therefore required to use this driver.

    This patch implements basic MBIM support, reusing the NCM and WDM driver
    APIs, currently limited to IP sessions with SessionID 0. DSS and
    multiplexed IP sessions are not yet supported.

    Signed-off-by: Greg Suarez
    Signed-off-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Greg Suarez