madwifi: replace an implicit memcpy with an explicit one (cosmetic fix)
[openwrt/svn-archive/archive.git] / package / madwifi / patches / 441-fix_ibss_node_handling.patch
index d64ebf05924d8fa53234e4a37050a3005f604055..5035ae401b21e7e3b3bda137159f196b9f3489ec 100644 (file)
@@ -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;
                }
                        allocbs = 1;
 --- a/net80211/ieee80211_node.c
 +++ b/net80211/ieee80211_node.c
-@@ -601,6 +601,7 @@ ieee80211_ibss_merge(struct ieee80211_no
+@@ -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" : "");
-+      ieee80211_node_table_reset(&vap->iv_ic->ic_sta, vap);
++      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 */