diff options
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r-- | net/mac80211/tx.c | 15 |
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)))) { |