mac80211: Fix unresolved mesh frames queued without valid control.vif
PATCH 1/1 mac80211: Fix unresolved mesh frames queued without valid control.vif
Mesh frames that could not be immediately resolved were queued with a NULL info->control.vif. This patch moves the call to mesh_nexthop_lookup closer to the point where it is handed over to ieee80211_tx(). This ensures that the unresolved frames are ready to be sent once the path is resolved.
--- net/mac80211/tx.c | 18 ++++++++++-------- 1 files changed, 10 insertions(+), 8 deletions(-)
net/mac80211/tx.c +10 -8
@@ -1413,14 +1413,7 @@ static void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, info->flags |=IEEE80211_TX_CTL_REQ_TX_STATUS ; -if (ieee80211_vif_is_mesh (&sdata->vif) && -ieee80211_is_data (hdr->frame_control)) { -if (!is_multicast_ether_addr (hdr->addr1)) -if (mesh_nexthop_lookup (skb, sdata)) { -dev_put (sdata->dev); -return ; - } - }else if (unlikely (sdata->vif.type ==NL80211_IFTYPE_MONITOR )) { +if (unlikely (sdata->vif.type ==NL80211_IFTYPE_MONITOR )) {int hdrlen;u16 len_rthdr;
@@ -1477,6 +1470,15 @@ static void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, info->control.vif = &sdata->vif; +if (ieee80211_vif_is_mesh (&sdata->vif) && +ieee80211_is_data (hdr->frame_control) && + !is_multicast_ether_addr (hdr->addr1)) +if (mesh_nexthop_lookup (skb, sdata)) { +/* skb queued: don't free */ +dev_put (sdata->dev); +return ; + } +ieee80211_select_queue (local, skb);ieee80211_tx (sdata, skb, false);dev_put (sdata->dev);
Signature · 1 line
1.5.4.3
PATCH 1/1 mac80211: Fix unresolved mesh frames queued without valid control.vif
Mesh frames that could not be immediately resolved were queued with a NULL info->control.vif. This patch moves the call to mesh_nexthop_lookup closer to the point where it is handed over to ieee80211_tx(). This ensures that the unresolved frames are ready to be sent once the path is resolved.
Signed-off-by Javier Cardona <[email protected]>
--- net/mac80211/tx.c | 18 ++++++++++-------- 1 files changed, 10 insertions(+), 8 deletions(-)
net/mac80211/tx.c +10 -8
@@ -1413,14 +1413,7 @@ static void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, info->flags |=IEEE80211_TX_CTL_REQ_TX_STATUS ; -if (ieee80211_vif_is_mesh (&sdata->vif) && -ieee80211_is_data (hdr->frame_control)) { -if (!is_multicast_ether_addr (hdr->addr1)) -if (mesh_nexthop_lookup (skb, sdata)) { -dev_put (sdata->dev); -return ; - } - }else if (unlikely (sdata->vif.type ==NL80211_IFTYPE_MONITOR )) { +if (unlikely (sdata->vif.type ==NL80211_IFTYPE_MONITOR )) {int hdrlen;u16 len_rthdr;
@@ -1477,6 +1470,15 @@ static void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, info->control.vif = &sdata->vif; +if (ieee80211_vif_is_mesh (&sdata->vif) && +ieee80211_is_data (hdr->frame_control) && + !is_multicast_ether_addr (hdr->addr1)) +if (mesh_nexthop_lookup (skb, sdata)) { +/* skb queued: don't free */ +dev_put (sdata->dev); +return ; + } +ieee80211_select_queue (local, skb);ieee80211_tx (sdata, skb, false);dev_put (sdata->dev);
Signature · 1 line
1.5.4.3