Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Apr 2009 15:31:28 GMT
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 161174 for review
Message-ID:  <200904271531.n3RFVSbE048139@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=161174

Change 161174 by thompsa@thompsa_burger on 2009/04/27 15:30:34

	Catch up with changes in HEAD
	 - Hoist 802.11 encapsulation up into net80211
	 - Eiminate ic_myaddr so changing the mac address of a device works correctly

Affected files ...

.. //depot/projects/vap/sys/dev/bwi/if_bwi.c#24 edit

Differences ...

==== //depot/projects/vap/sys/dev/bwi/if_bwi.c#24 (text+ko) ====

@@ -361,6 +361,7 @@
 	struct bwi_phy *phy;
 	int i, error;
 	uint8_t bands;
+	uint8_t macaddr[IEEE80211_ADDR_LEN];
 
 	BWI_LOCK_INIT(sc);
 
@@ -482,13 +483,13 @@
 			setbit(&bands, IEEE80211_MODE_11G);
 		}
 
-		bwi_get_eaddr(sc, BWI_SPROM_11BG_EADDR, ic->ic_myaddr);
-		if (IEEE80211_IS_MULTICAST(ic->ic_myaddr)) {
-			bwi_get_eaddr(sc, BWI_SPROM_11A_EADDR, ic->ic_myaddr);
-			if (IEEE80211_IS_MULTICAST(ic->ic_myaddr)) {
+		bwi_get_eaddr(sc, BWI_SPROM_11BG_EADDR, macaddr);
+		if (IEEE80211_IS_MULTICAST(macaddr)) {
+			bwi_get_eaddr(sc, BWI_SPROM_11A_EADDR, macaddr);
+			if (IEEE80211_IS_MULTICAST(macaddr)) {
 				device_printf(dev,
 				    "invalid MAC address: %6D\n",
-				    ic->ic_myaddr, ":");
+				    macaddr, ":");
 			}
 		}
 	} else if (phy->phy_mode == IEEE80211_MODE_11A) {
@@ -514,7 +515,7 @@
 		      IEEE80211_C_WPA |
 		      IEEE80211_C_MONITOR;
 	ic->ic_opmode = IEEE80211_M_STA;
-	ieee80211_ifattach(ic);
+	ieee80211_ifattach(ic, macaddr);
 
 	ic->ic_headroom = sizeof(struct bwi_txbuf_hdr);
 
@@ -1263,11 +1264,9 @@
 	}
 
 	bwi_bbp_power_on(sc, BWI_CLOCK_MODE_DYN);
-	
-	bcopy(IF_LLADDR(ifp), ic->ic_myaddr, sizeof(ic->ic_myaddr));
 
 	bwi_set_bssid(sc, bwi_zero_addr);	/* Clear BSSID */
-	bwi_set_addr_filter(sc, BWI_ADDR_FILTER_MYADDR, ic->ic_myaddr);
+	bwi_set_addr_filter(sc, BWI_ADDR_FILTER_MYADDR, IF_LLADDR(ifp));
 
 	bwi_mac_reset_hwkeys(mac);
 
@@ -1407,13 +1406,6 @@
 			break;
 
 		ni = (struct ieee80211_node *) m->m_pkthdr.rcvif;
-		m = ieee80211_encap(ni, m);
-		if (m == NULL) {
-			ieee80211_free_node(ni);
-			ifp->if_oerrors++;
-			continue;
-		}
-
 		wh = mtod(m, struct ieee80211_frame *);
 		if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
 			k = ieee80211_crypto_encap(ni, m);
@@ -3711,7 +3703,7 @@
 
 	bwi_set_addr_filter(sc, BWI_ADDR_FILTER_BSSID, bssid);
 
-	bcopy(ic->ic_myaddr, buf.myaddr, sizeof(buf.myaddr));
+	bcopy(IF_LLADDR(ifp), buf.myaddr, sizeof(buf.myaddr));
 	bcopy(bssid, buf.bssid, sizeof(buf.bssid));
 
 	n = sizeof(buf) / sizeof(val);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200904271531.n3RFVSbE048139>