aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/tx.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r--net/mac80211/tx.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 900632a250ec..3ffd91f295a6 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -296,6 +296,9 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx)
296 */ 296 */
297 return TX_DROP; 297 return TX_DROP;
298 298
299 if (tx->sdata->vif.type == NL80211_IFTYPE_OCB)
300 return TX_CONTINUE;
301
299 if (tx->sdata->vif.type == NL80211_IFTYPE_WDS) 302 if (tx->sdata->vif.type == NL80211_IFTYPE_WDS)
300 return TX_CONTINUE; 303 return TX_CONTINUE;
301 304
@@ -2013,6 +2016,17 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
2013 goto fail_rcu; 2016 goto fail_rcu;
2014 band = chanctx_conf->def.chan->band; 2017 band = chanctx_conf->def.chan->band;
2015 break; 2018 break;
2019 case NL80211_IFTYPE_OCB:
2020 /* DA SA BSSID */
2021 memcpy(hdr.addr1, skb->data, ETH_ALEN);
2022 memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
2023 eth_broadcast_addr(hdr.addr3);
2024 hdrlen = 24;
2025 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
2026 if (!chanctx_conf)
2027 goto fail_rcu;
2028 band = chanctx_conf->def.chan->band;
2029 break;
2016 case NL80211_IFTYPE_ADHOC: 2030 case NL80211_IFTYPE_ADHOC:
2017 /* DA SA BSSID */ 2031 /* DA SA BSSID */
2018 memcpy(hdr.addr1, skb->data, ETH_ALEN); 2032 memcpy(hdr.addr1, skb->data, ETH_ALEN);
@@ -2057,6 +2071,7 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
2057 * EAPOL frames from the local station. 2071 * EAPOL frames from the local station.
2058 */ 2072 */
2059 if (unlikely(!ieee80211_vif_is_mesh(&sdata->vif) && 2073 if (unlikely(!ieee80211_vif_is_mesh(&sdata->vif) &&
2074 (sdata->vif.type != NL80211_IFTYPE_OCB) &&
2060 !multicast && !authorized && 2075 !multicast && !authorized &&
2061 (cpu_to_be16(ethertype) != sdata->control_port_protocol || 2076 (cpu_to_be16(ethertype) != sdata->control_port_protocol ||
2062 !ether_addr_equal(sdata->vif.addr, skb->data + ETH_ALEN)))) { 2077 !ether_addr_equal(sdata->vif.addr, skb->data + ETH_ALEN)))) {