diff options
author | Bill Jordan <bjordan@rajant.com> | 2010-10-01 11:20:41 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-10-05 13:35:25 -0400 |
commit | 1be7fe8de9f25e173282f8f989f83bc5b5decfe9 (patch) | |
tree | e7b45e034560f6dc0f0403d098d85e1c94a3b3e1 /net/mac80211 | |
parent | e8347ebad2f1b15bddb6ed3ed5f767531eb52dc3 (diff) |
mac80211: fix for WDS interfaces
Initialize the rate table for WDS interfaces, and
add cases to allow WDS packets to pass the xmit and receive
tests.
Signed-off-by: Bill Jordan <bjordan@rajant.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/iface.c | 3 | ||||
-rw-r--r-- | net/mac80211/main.c | 3 | ||||
-rw-r--r-- | net/mac80211/rx.c | 1 | ||||
-rw-r--r-- | net/mac80211/tx.c | 3 |
4 files changed, 10 insertions, 0 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 1300e8859ea7..438a2f51420e 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include "led.h" | 24 | #include "led.h" |
25 | #include "driver-ops.h" | 25 | #include "driver-ops.h" |
26 | #include "wme.h" | 26 | #include "wme.h" |
27 | #include "rate.h" | ||
27 | 28 | ||
28 | /** | 29 | /** |
29 | * DOC: Interface list locking | 30 | * DOC: Interface list locking |
@@ -311,6 +312,8 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up) | |||
311 | /* STA has been freed */ | 312 | /* STA has been freed */ |
312 | goto err_del_interface; | 313 | goto err_del_interface; |
313 | } | 314 | } |
315 | |||
316 | rate_control_rate_init(sta); | ||
314 | } | 317 | } |
315 | 318 | ||
316 | /* | 319 | /* |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 494dba1b46a5..e127fbb8424e 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -201,6 +201,8 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, | |||
201 | sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid; | 201 | sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid; |
202 | else if (sdata->vif.type == NL80211_IFTYPE_AP) | 202 | else if (sdata->vif.type == NL80211_IFTYPE_AP) |
203 | sdata->vif.bss_conf.bssid = sdata->vif.addr; | 203 | sdata->vif.bss_conf.bssid = sdata->vif.addr; |
204 | else if (sdata->vif.type == NL80211_IFTYPE_WDS) | ||
205 | sdata->vif.bss_conf.bssid = NULL; | ||
204 | else if (ieee80211_vif_is_mesh(&sdata->vif)) { | 206 | else if (ieee80211_vif_is_mesh(&sdata->vif)) { |
205 | sdata->vif.bss_conf.bssid = zero; | 207 | sdata->vif.bss_conf.bssid = zero; |
206 | } else { | 208 | } else { |
@@ -211,6 +213,7 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, | |||
211 | switch (sdata->vif.type) { | 213 | switch (sdata->vif.type) { |
212 | case NL80211_IFTYPE_AP: | 214 | case NL80211_IFTYPE_AP: |
213 | case NL80211_IFTYPE_ADHOC: | 215 | case NL80211_IFTYPE_ADHOC: |
216 | case NL80211_IFTYPE_WDS: | ||
214 | case NL80211_IFTYPE_MESH_POINT: | 217 | case NL80211_IFTYPE_MESH_POINT: |
215 | break; | 218 | break; |
216 | default: | 219 | default: |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 0b0e83ebe3d5..b3e161ffa4b3 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -819,6 +819,7 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx) | |||
819 | if (unlikely((ieee80211_is_data(hdr->frame_control) || | 819 | if (unlikely((ieee80211_is_data(hdr->frame_control) || |
820 | ieee80211_is_pspoll(hdr->frame_control)) && | 820 | ieee80211_is_pspoll(hdr->frame_control)) && |
821 | rx->sdata->vif.type != NL80211_IFTYPE_ADHOC && | 821 | rx->sdata->vif.type != NL80211_IFTYPE_ADHOC && |
822 | rx->sdata->vif.type != NL80211_IFTYPE_WDS && | ||
822 | (!rx->sta || !test_sta_flags(rx->sta, WLAN_STA_ASSOC)))) { | 823 | (!rx->sta || !test_sta_flags(rx->sta, WLAN_STA_ASSOC)))) { |
823 | if ((!ieee80211_has_fromds(hdr->frame_control) && | 824 | if ((!ieee80211_has_fromds(hdr->frame_control) && |
824 | !ieee80211_has_tods(hdr->frame_control) && | 825 | !ieee80211_has_tods(hdr->frame_control) && |
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index e1733dcb58a7..258fbdbedbdf 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -273,6 +273,9 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx) | |||
273 | */ | 273 | */ |
274 | return TX_DROP; | 274 | return TX_DROP; |
275 | 275 | ||
276 | if (tx->sdata->vif.type == NL80211_IFTYPE_WDS) | ||
277 | return TX_CONTINUE; | ||
278 | |||
276 | if (tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT) | 279 | if (tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT) |
277 | return TX_CONTINUE; | 280 | return TX_CONTINUE; |
278 | 281 | ||