rndis_wlan: set current packet filter to zero on stop
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Thu, 30 Jul 2009 16:41:42 +0000 (19:41 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 4 Aug 2009 20:44:16 +0000 (16:44 -0400)
Set current packet filter to zero to block receiving data packets from
device.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rndis_wlan.c

index bfb9861a0366f0a8ad97f952cef73dff0bd36bf4..974f72497862d6e80863b0b755d219b792ecfc64 100644 (file)
@@ -2530,7 +2530,8 @@ static int rndis_wlan_reset(struct usbnet *usbdev)
        if (retval)
                devwarn(usbdev, "rndis_reset() failed: %d", retval);
 
-       /* rndis_reset cleared multicast list, so restore here. */
+       /* rndis_reset cleared multicast list, so restore here.
+          (set_multicast_list() also turns on current packet filter) */
        set_multicast_list(usbdev);
 
        queue_delayed_work(priv->workqueue, &priv->stats_work,
@@ -2544,6 +2545,7 @@ static int rndis_wlan_stop(struct usbnet *usbdev)
 {
        struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
        int retval;
+       __le32 filter;
 
        devdbg(usbdev, "rndis_wlan_stop");
 
@@ -2560,6 +2562,12 @@ static int rndis_wlan_stop(struct usbnet *usbdev)
                priv->scan_request = NULL;
        }
 
+       /* Set current packet filter zero to block receiving data packets from
+          device. */
+       filter = 0;
+       rndis_set_oid(usbdev, OID_GEN_CURRENT_PACKET_FILTER, &filter,
+                                                               sizeof(filter));
+
        return retval;
 }