From b716a0fa777a9d7dee854b768efc3fff9074a2b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wxcaf=C3=A9?= Date: Mon, 13 Jul 2020 16:20:41 -0400 Subject: [PATCH 3/3] net: cdc_ncm: hook into set_rx_mode to admit multicast Use usbnet_cdc_update_filter from cdc_ether to admit all multicast traffic if there is more than one multicast filter configured. --- drivers/net/usb/cdc_ncm.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index 8929669b5e6d..688d7e9df41e 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -792,6 +792,7 @@ static const struct net_device_ops cdc_ncm_netdev_ops = { .ndo_stop = usbnet_stop, .ndo_start_xmit = usbnet_start_xmit, .ndo_tx_timeout = usbnet_tx_timeout, + .ndo_set_rx_mode = usbnet_set_rx_mode, .ndo_get_stats64 = usbnet_get_stats64, .ndo_change_mtu = cdc_ncm_change_mtu, .ndo_set_mac_address = eth_mac_addr, @@ -1885,6 +1886,13 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb) } } +/* the control interface is always the probed one */ +static void usbnet_cdc_ncm_update_filter(struct usbnet *dev) +{ + usbnet_cdc_update_filter(dev, dev->intf); +} + + static const struct driver_info cdc_ncm_info = { .description = "CDC NCM", .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET @@ -1895,6 +1903,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 = usbnet_cdc_ncm_update_filter, }; /* Same as cdc_ncm_info, but with FLAG_WWAN */ @@ -1908,6 +1917,7 @@ static const struct driver_info wwan_info = { .status = cdc_ncm_status, .rx_fixup = cdc_ncm_rx_fixup, .tx_fixup = cdc_ncm_tx_fixup, + .set_rx_mode = usbnet_cdc_ncm_update_filter, }; /* Same as wwan_info, but with FLAG_NOARP */ @@ -1921,6 +1931,7 @@ static const struct driver_info wwan_noarp_info = { .status = cdc_ncm_status, .rx_fixup = cdc_ncm_rx_fixup, .tx_fixup = cdc_ncm_tx_fixup, + .set_rx_mode = usbnet_cdc_ncm_update_filter, }; static const struct usb_device_id cdc_devs[] = { -- 2.27.0