PERFORCE change 142323 for review

Sam Leffler sam at FreeBSD.org
Mon May 26 22:33:55 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=142323

Change 142323 by sam at sam_ebb on 2008/05/26 22:33:17

	Add a mac address to the key definition as otherwise we lose
	the address specified in the ioctl and for drivers that need
	the address to locate a key (e.g. for delete).  Note this change
	net80211-private api's but not the driver callback; may want
	to change that also.

Affected files ...

.. //depot/projects/vap/sys/net80211/ieee80211_crypto.c#15 edit
.. //depot/projects/vap/sys/net80211/ieee80211_crypto.h#14 edit
.. //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#59 edit

Differences ...

==== //depot/projects/vap/sys/net80211/ieee80211_crypto.c#15 (text+ko) ====

@@ -130,10 +130,9 @@
 }
 
 static __inline int
-dev_key_set(struct ieee80211vap *vap, const struct ieee80211_key *key,
-	const uint8_t mac[IEEE80211_ADDR_LEN])
+dev_key_set(struct ieee80211vap *vap, const struct ieee80211_key *key)
 {
-	return vap->iv_key_set(vap, key, mac);
+	return vap->iv_key_set(vap, key, key->wk_macaddr);
 }
 
 /*
@@ -480,8 +479,7 @@
  *	ieee80211_key_update_end(vap);
  */
 int
-ieee80211_crypto_setkey(struct ieee80211vap *vap, struct ieee80211_key *key,
-		const uint8_t macaddr[IEEE80211_ADDR_LEN])
+ieee80211_crypto_setkey(struct ieee80211vap *vap, struct ieee80211_key *key)
 {
 	const struct ieee80211_cipher *cip = key->wk_cipher;
 
@@ -490,7 +488,7 @@
 	IEEE80211_DPRINTF(vap, IEEE80211_MSG_CRYPTO,
 	    "%s: %s keyix %u flags 0x%x mac %s rsc %ju tsc %ju len %u\n",
 	    __func__, cip->ic_name, key->wk_keyix,
-	    key->wk_flags, ether_sprintf(macaddr),
+	    key->wk_flags, ether_sprintf(key->wk_macaddr),
 	    key->wk_keyrsc[IEEE80211_NONQOS_TID], key->wk_keytsc,
 	    key->wk_keylen);
 
@@ -513,7 +511,7 @@
 		vap->iv_stats.is_crypto_setkey_nokey++;
 		return 0;
 	}
-	return dev_key_set(vap, key, macaddr);
+	return dev_key_set(vap, key);
 }
 
 /*

==== //depot/projects/vap/sys/net80211/ieee80211_crypto.h#14 (text+ko) ====

@@ -90,6 +90,7 @@
 	uint64_t	wk_keytsc;	/* key transmit sequence counter */
 	const struct ieee80211_cipher *wk_cipher;
 	void		*wk_private;	/* private cipher state */
+	uint8_t		wk_macaddr[IEEE80211_ADDR_LEN];
 };
 #define	IEEE80211_KEY_COMMON 		/* common flags passed in by apps */\
 	(IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV | IEEE80211_KEY_GROUP)
@@ -138,9 +139,7 @@
 		int cipher, int flags, struct ieee80211_key *);
 int	ieee80211_crypto_delkey(struct ieee80211vap *,
 		struct ieee80211_key *);
-int	ieee80211_crypto_setkey(struct ieee80211vap *,
-		struct ieee80211_key *,
-		const uint8_t macaddr[IEEE80211_ADDR_LEN]);
+int	ieee80211_crypto_setkey(struct ieee80211vap *, struct ieee80211_key *);
 void	ieee80211_crypto_delglobalkeys(struct ieee80211vap *);
 
 /*

==== //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#59 (text+ko) ====

@@ -1135,8 +1135,9 @@
 		wk->wk_keytsc = 0;			/* new key, reset */
 		memset(wk->wk_key, 0, sizeof(wk->wk_key));
 		memcpy(wk->wk_key, ik.ik_keydata, ik.ik_keylen);
-		if (!ieee80211_crypto_setkey(vap, wk,
-		    ni != NULL ? ni->ni_macaddr : ik.ik_macaddr))
+		IEEE80211_ADDR_COPY(wk->wk_macaddr,
+		    ni != NULL ?  ni->ni_macaddr : ik.ik_macaddr);
+		if (!ieee80211_crypto_setkey(vap, wk))
 			error = EIO;
 		else if ((ik.ik_flags & IEEE80211_KEY_DEFAULT))
 			vap->iv_def_txkey = kid;
@@ -2502,7 +2503,8 @@
 		    IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, k)) {
 			k->wk_keylen = ireq->i_len;
 			memcpy(k->wk_key, tmpkey, sizeof(tmpkey));
-			if  (!ieee80211_crypto_setkey(vap, k, vap->iv_myaddr))
+			IEEE80211_ADDR_COPY(k->wk_macaddr, vap->iv_myaddr);
+			if  (!ieee80211_crypto_setkey(vap, k))
 				error = EINVAL;
 		} else
 			error = EINVAL;


More information about the p4-projects mailing list