diff options
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index a19089565c4b..c98be0593756 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1452,6 +1452,10 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) | |||
1452 | } | 1452 | } |
1453 | } | 1453 | } |
1454 | 1454 | ||
1455 | /* mesh power save support */ | ||
1456 | if (ieee80211_vif_is_mesh(&rx->sdata->vif)) | ||
1457 | ieee80211_mps_rx_h_sta_process(sta, hdr); | ||
1458 | |||
1455 | /* | 1459 | /* |
1456 | * Drop (qos-)data::nullfunc frames silently, since they | 1460 | * Drop (qos-)data::nullfunc frames silently, since they |
1457 | * are used only to control station power saving mode. | 1461 | * are used only to control station power saving mode. |
@@ -2090,7 +2094,10 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) | |||
2090 | if (is_multicast_ether_addr(fwd_hdr->addr1)) { | 2094 | if (is_multicast_ether_addr(fwd_hdr->addr1)) { |
2091 | IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_mcast); | 2095 | IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_mcast); |
2092 | memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN); | 2096 | memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN); |
2097 | /* update power mode indication when forwarding */ | ||
2098 | ieee80211_mps_set_frame_flags(sdata, NULL, fwd_hdr); | ||
2093 | } else if (!mesh_nexthop_lookup(fwd_skb, sdata)) { | 2099 | } else if (!mesh_nexthop_lookup(fwd_skb, sdata)) { |
2100 | /* mesh power mode flags updated in mesh_nexthop_lookup */ | ||
2094 | IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_unicast); | 2101 | IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_unicast); |
2095 | } else { | 2102 | } else { |
2096 | /* unable to resolve next hop */ | 2103 | /* unable to resolve next hop */ |