|
@@ -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;
|
|
|
}
|
|
|
|