Skip to content

Commit

Permalink
mac80211: fix for WDS interfaces
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
  • Loading branch information
Bill Jordan authored and linvjw committed Oct 5, 2010
1 parent e8347eb commit 1be7fe8
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 0 deletions.
3 changes: 3 additions & 0 deletions net/mac80211/iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "led.h"
#include "driver-ops.h"
#include "wme.h"
#include "rate.h"

/**
* DOC: Interface list locking
Expand Down Expand Up @@ -311,6 +312,8 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up)
/* STA has been freed */
goto err_del_interface;
}

rate_control_rate_init(sta);
}

/*
Expand Down
3 changes: 3 additions & 0 deletions net/mac80211/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,8 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid;
else if (sdata->vif.type == NL80211_IFTYPE_AP)
sdata->vif.bss_conf.bssid = sdata->vif.addr;
else if (sdata->vif.type == NL80211_IFTYPE_WDS)
sdata->vif.bss_conf.bssid = NULL;
else if (ieee80211_vif_is_mesh(&sdata->vif)) {
sdata->vif.bss_conf.bssid = zero;
} else {
Expand All @@ -211,6 +213,7 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
switch (sdata->vif.type) {
case NL80211_IFTYPE_AP:
case NL80211_IFTYPE_ADHOC:
case NL80211_IFTYPE_WDS:
case NL80211_IFTYPE_MESH_POINT:
break;
default:
Expand Down
1 change: 1 addition & 0 deletions net/mac80211/rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -819,6 +819,7 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
if (unlikely((ieee80211_is_data(hdr->frame_control) ||
ieee80211_is_pspoll(hdr->frame_control)) &&
rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
rx->sdata->vif.type != NL80211_IFTYPE_WDS &&
(!rx->sta || !test_sta_flags(rx->sta, WLAN_STA_ASSOC)))) {
if ((!ieee80211_has_fromds(hdr->frame_control) &&
!ieee80211_has_tods(hdr->frame_control) &&
Expand Down
3 changes: 3 additions & 0 deletions net/mac80211/tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,9 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx)
*/
return TX_DROP;

if (tx->sdata->vif.type == NL80211_IFTYPE_WDS)
return TX_CONTINUE;

if (tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
return TX_CONTINUE;

Expand Down

0 comments on commit 1be7fe8

Please sign in to comment.