PERFORCE change 142341 for review

Sam Leffler sam at FreeBSD.org
Tue May 27 02:36:10 UTC 2008


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

Change 142341 by sam at sam_ebb on 2008/05/27 02:35:52

	add ieee80211_crypto_reload_keys to push all keys known
	to net80211 back into the device; intended for use on resume
	by devices that lose the contents of their h/w key table

Affected files ...

.. //depot/projects/vap/sys/net80211/ieee80211_crypto.c#16 edit
.. //depot/projects/vap/sys/net80211/ieee80211_crypto.h#15 edit

Differences ...

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

@@ -609,3 +609,46 @@
 #undef IEEE80211_WEP_MINLEN
 #undef IEEE80211_WEP_HDRLEN
 }
+
+static void
+load_ucastkey(void *arg, struct ieee80211_node *ni)
+{
+	struct ieee80211vap *vap = ni->ni_vap;
+	struct ieee80211_key *k;
+
+	if (vap->iv_state != IEEE80211_S_RUN)
+		return;
+	k = &ni->ni_ucastkey;
+	if (k->wk_keyix != IEEE80211_KEYIX_NONE)
+		dev_key_set(vap, k);
+}
+
+/*
+ * Re-load all keys known to the 802.11 layer that may
+ * have hardware state backing them.  This is used by
+ * drivers on resume to push keys down into the device.
+ */
+void
+ieee80211_crypto_reload_keys(struct ieee80211com *ic)
+{
+	struct ieee80211vap *vap;
+	int i;
+
+	/*
+	 * Keys in the global key table of each vap.
+	 */
+	/* NB: used only during resume so don't lock for now */
+	TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
+		if (vap->iv_state != IEEE80211_S_RUN)
+			continue;
+		for (i = 0; i < IEEE80211_WEP_NKID; i++) {
+			const struct ieee80211_key *k = &vap->iv_nw_keys[i];
+			if (k->wk_keyix != IEEE80211_KEYIX_NONE)
+				dev_key_set(vap, k);
+		}
+	}
+	/*
+	 * Unicast keys.
+	 */
+	ieee80211_iterate_nodes(&ic->ic_sta, load_ucastkey, NULL);
+}

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

@@ -141,6 +141,7 @@
 		struct ieee80211_key *);
 int	ieee80211_crypto_setkey(struct ieee80211vap *, struct ieee80211_key *);
 void	ieee80211_crypto_delglobalkeys(struct ieee80211vap *);
+void	ieee80211_crypto_reload_keys(struct ieee80211com *);
 
 /*
  * Template for a supported cipher.  Ciphers register with the


More information about the p4-projects mailing list