X-Git-Url: http://git.ozo.com/?a=blobdiff_plain;f=package%2Fmadwifi%2Fpatches%2F441-fix_ibss_node_handling.patch;h=5035ae401b21e7e3b3bda137159f196b9f3489ec;hb=bb4f8e0b2613f59774bf045045fcfdaf4bdf4644;hp=13f15fb727d34e2a92f5a38ddae01764dc17b989;hpb=c0c6a90c76dd4d98aa44e5b1b358dd87b145516e;p=openwrt-10.03%2F.git diff --git a/package/madwifi/patches/441-fix_ibss_node_handling.patch b/package/madwifi/patches/441-fix_ibss_node_handling.patch index 13f15fb72..5035ae401 100644 --- a/package/madwifi/patches/441-fix_ibss_node_handling.patch +++ b/package/madwifi/patches/441-fix_ibss_node_handling.patch @@ -1,6 +1,6 @@ --- a/ath/if_ath.c +++ b/ath/if_ath.c -@@ -6642,10 +6642,8 @@ static void +@@ -6641,10 +6641,8 @@ static void ath_recv_mgmt(struct ieee80211vap * vap, struct ieee80211_node *ni_or_null, struct sk_buff *skb, int subtype, int rssi, u_int64_t rtsf) { @@ -12,7 +12,7 @@ struct ieee80211_node * ni = ni_or_null; u_int64_t hw_tsf, beacon_tsf; u_int32_t hw_tu, beacon_tu, intval; -@@ -6687,7 +6685,7 @@ ath_recv_mgmt(struct ieee80211vap * vap, +@@ -6686,7 +6684,7 @@ ath_recv_mgmt(struct ieee80211vap * vap, } if ((vap->iv_opmode == IEEE80211_M_IBSS) && (sc->sc_opmode == HAL_M_HOSTAP) && @@ -44,7 +44,7 @@ if (dir != IEEE80211_FC1_DIR_NODS) { IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY, wh, "data", "invalid dir 0x%x", dir); -@@ -3548,6 +3553,11 @@ ieee80211_recv_mgmt(struct ieee80211vap +@@ -3555,6 +3560,11 @@ ieee80211_recv_mgmt(struct ieee80211vap } else if (vap->iv_opmode == IEEE80211_M_WDS) { found = 1; ni = ni_or_null = vap->iv_wdsnode; @@ -56,7 +56,7 @@ } IEEE80211_UNLOCK_IRQ(vap->iv_ic); -@@ -3672,19 +3682,8 @@ ieee80211_recv_mgmt(struct ieee80211vap +@@ -3683,19 +3693,8 @@ ieee80211_recv_mgmt(struct ieee80211vap vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/ return; } @@ -78,3 +78,25 @@ if (ni == NULL) return; allocbs = 1; +--- a/net80211/ieee80211_node.c ++++ b/net80211/ieee80211_node.c +@@ -601,6 +601,8 @@ ieee80211_ibss_merge(struct ieee80211_no + ic->ic_flags & IEEE80211_F_SHPREAMBLE ? "short" : "long", + ic->ic_flags & IEEE80211_F_SHSLOT ? "short" : "long", + ic->ic_flags & IEEE80211_F_USEPROT ? ", protection" : ""); ++ if (!IEEE80211_ADDR_EQ(ni->ni_bssid, vap->iv_bssid)) ++ ieee80211_node_table_reset(&vap->iv_ic->ic_sta, vap); + return ieee80211_sta_join1(ieee80211_ref_node(ni)); + } + EXPORT_SYMBOL(ieee80211_ibss_merge); +@@ -1378,9 +1380,7 @@ ieee80211_add_neighbor(struct ieee80211v + if (sp->ath != NULL) + ieee80211_saveath(ni, sp->ath); + +- /* NB: must be after ni_chan is setup */ +- ieee80211_setup_rates(ni, sp->rates, sp->xrates, IEEE80211_F_DOSORT); +- ++ memcpy(&ni->ni_rates, &vap->iv_bss->ni_rates, sizeof(ni->ni_rates)); + if (ic->ic_newassoc != NULL) + ic->ic_newassoc(ni, 1); + /* XXX not right for 802.1x/WPA */