From patchwork Fri Jun 29 07:53:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Miguel_Rodr=C3=ADguez_P=C3=A9rez?= X-Patchwork-Id: 10495679 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B17A460532 for ; Fri, 29 Jun 2018 07:53:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9531C29117 for ; Fri, 29 Jun 2018 07:53:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8943829119; Fri, 29 Jun 2018 07:53:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID,T_TVD_MIME_EPI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 17B3829120 for ; Fri, 29 Jun 2018 07:53:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934221AbeF2Hxf (ORCPT ); Fri, 29 Jun 2018 03:53:35 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:45171 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933688AbeF2Hxc (ORCPT ); Fri, 29 Jun 2018 03:53:32 -0400 Received: by mail-wr0-f195.google.com with SMTP id u7-v6so7877285wrn.12 for ; Fri, 29 Jun 2018 00:53:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=det.uvigo.gal; s=clouddet; h=to:from:subject:openpgp:autocrypt:message-id:date:user-agent :mime-version:content-language; bh=KiZa/sS6E8lRyBApV6T4TtH1AIWe0vvSxlcJf7xaS5w=; b=VFWyLotBXrxEqK14ZV4z0pUIGxsPuS4a0/7qELf7lIR5ytHVze5ELcOaa3Q5syaou2 P6ogXkX5heoFTJ5eGFoHSjjb692nIapzDhD6nnK4+NHXMP0muNbkqUVJnHBwzuiyoKoB CDoEffUU96H8yV2k9fxH1NvSa3TUNqz4W4aC0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:openpgp:autocrypt:message-id :date:user-agent:mime-version:content-language; bh=KiZa/sS6E8lRyBApV6T4TtH1AIWe0vvSxlcJf7xaS5w=; b=M5inrqlhcExviVev7LBVD7eUqfwrdQYlCg1Wq1mZqiibOooKg0NcNPpiwzIWEZWdB1 GT+Ffh+nk0UuOxK8f2mCjCvZU/IZunMSMXNjwL6igpx5hbSe2/JAbLmh19oHqUb8PyM+ hTqgz7BezRYZCUjl91jyWZla39rfSUnJy8195rwKvLyZnOEhdQ1eaiIQEJgfGxly9MMa EA3VHJSca9MjY3XDQALeMMLi8bT2VTnzvUWJGnUuc1v7AympXLU6I+uP3490WjOtusRO E1VMlV6lLD5LvmXhwS4Ys2nl8PAKJ5syXuDUucueiWSIfDE7mGHZL+ELutxB8bLBvcPP Xjaw== X-Gm-Message-State: APt69E3nEWSM1QkHiiracGlL6/byBV6r9Ohg227egxqg8G02fEi1x1JM QY+yHk/sPYWKz5PDjHUkjtmJAQAKoz7W8UIhln2wPyZ2tw+bmNkX8Ah4z1ZlJJ+gQVHy0mID2fk aFeoKkGaR7T/lCRpvCCKxka6WWgDSI5vuvaFKRhVuRMu/dimBmIQEkkqF7WsMp1S+RWA8Fes= X-Google-Smtp-Source: AAOMgpc+HRnGWUlFK268iTWhKkyTzTJ28MYIhp55ctIHxqsVDbkaGZxvWYgrmd01Kdc4lNM46pNKmQ== X-Received: by 2002:adf:92e7:: with SMTP id 94-v6mr11237770wrn.70.1530258810402; Fri, 29 Jun 2018 00:53:30 -0700 (PDT) Received: from ?IPv6:2001:720:1214:2042:3c1a:38db:2364:d3bc? ([2001:720:1214:2042:3c1a:38db:2364:d3bc]) by smtp.gmail.com with ESMTPSA id h3-v6sm6638575wrm.8.2018.06.29.00.53.28 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 29 Jun 2018 00:53:29 -0700 (PDT) To: linux-usb@vger.kernel.org From: =?UTF-8?Q?Miguel_Rodr=c3=adguez_P=c3=a9rez?= Subject: [PATCH] cdc_ncm: Handle multicast Ethernet traffic Openpgp: preference=signencrypt Autocrypt: addr=miguel@det.uvigo.gal; prefer-encrypt=mutual; keydata= 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 YHInhj+XVbAEvSrkZFlI6GfCPjY= Message-ID: Date: Fri, 29 Jun 2018 09:53:28 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 Content-Language: en-US Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Dell D6000 dock (and I guess other docks too) exposes a CDC_NCM device for Ethernet traffic. However, multicast Ethernet traffic is not processed making IPv6 not functional. Other services, like mDNS used for LAN service discovery are also hindered. The actual reason is that CDC_NCM driver was not processing requests to filter (admit) multicast traffic. I provide two patches to the linux kernel that admit all Ethernet multicast traffic whenever a multicast group is being joined. The solution is not optimal, as it makes the system receive more traffic than that strictly needed, but otherwise this only happens when the computer is connected to a dock and thus is running on AC power. I believe it is not worth the hassle to join only the requested groups. This is the same that is done in the CDN_ETHER driver. Best regards, From 7948d0d33ac15cc7526f2fb5c2f95fde313ce8f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Rodr=C3=ADguez=20P=C3=A9rez?= Date: Thu, 28 Jun 2018 17:57:18 +0200 Subject: [PATCH 2/2] Admit multicast traffic Some CDC_NCM devices are used as docks for laptops. In this case, it makes sense to accept multicast Ethernet traffic, as these devices can reside in a proper LAN. Without this, mDNS or IPv6 simply do not work. --- drivers/net/usb/cdc_ncm.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index d6b51e2b9495..50af1d9d0102 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -132,6 +132,33 @@ static void cdc_ncm_get_strings(struct net_device __always_unused *netdev, u32 s static void cdc_ncm_update_rxtx_max(struct usbnet *dev, u32 new_rx, u32 new_tx); +static void cdc_ncm_update_filter(struct usbnet *dev) +{ + struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0]; + u8 iface_no = ctx->control->cur_altsetting->desc.bInterfaceNumber; + struct net_device *net = dev->net; + + u16 cdc_filter = USB_CDC_PACKET_TYPE_DIRECTED + | USB_CDC_PACKET_TYPE_BROADCAST; + + /* filtering on the device is an optional feature and not worth + * the hassle so we just roughly care about snooping and if any + * multicast is requested, we take every multicast + */ + if (net->flags & IFF_PROMISC) + cdc_filter |= USB_CDC_PACKET_TYPE_PROMISCUOUS; + if (!netdev_mc_empty(net) || (net->flags & IFF_ALLMULTI)) + cdc_filter |= USB_CDC_PACKET_TYPE_ALL_MULTICAST; + + usbnet_write_cmd(dev, + USB_CDC_SET_ETHERNET_PACKET_FILTER, + USB_TYPE_CLASS | USB_DIR_OUT | USB_RECIP_INTERFACE, + cdc_filter, + iface_no, + NULL, + 0); +} + static const struct ethtool_ops cdc_ncm_ethtool_ops = { .get_link = usbnet_get_link, .nway_reset = usbnet_nway_reset, @@ -1652,6 +1679,7 @@ static const struct driver_info cdc_ncm_info = { .status = cdc_ncm_status, .rx_fixup = cdc_ncm_rx_fixup, .tx_fixup = cdc_ncm_tx_fixup, + .set_rx_mode = cdc_ncm_update_filter, }; /* Same as cdc_ncm_info, but with FLAG_WWAN */ -- 2.17.1