svn commit: r288527 - head/sys/net80211

Adrian Chadd adrian at FreeBSD.org
Sat Oct 3 00:57:35 UTC 2015


Author: adrian
Date: Sat Oct  3 00:57:33 2015
New Revision: 288527
URL: https://svnweb.freebsd.org/changeset/base/288527

Log:
  net80211: add a possibility to retrieve current TX key without encapsulation.
  
  Submitted by:	<s3erios at gmail.com>
  Differential Revision:	https://reviews.freebsd.org/D3639

Modified:
  head/sys/net80211/ieee80211_crypto.c
  head/sys/net80211/ieee80211_crypto.h

Modified: head/sys/net80211/ieee80211_crypto.c
==============================================================================
--- head/sys/net80211/ieee80211_crypto.c	Sat Oct  3 00:50:13 2015	(r288526)
+++ head/sys/net80211/ieee80211_crypto.c	Sat Oct  3 00:57:33 2015	(r288527)
@@ -531,16 +531,11 @@ ieee80211_crypto_get_keyid(struct ieee80
 		return (0);
 }
 
-/*
- * Add privacy headers appropriate for the specified key.
- */
 struct ieee80211_key *
-ieee80211_crypto_encap(struct ieee80211_node *ni, struct mbuf *m)
+ieee80211_crypto_get_txkey(struct ieee80211_node *ni, struct mbuf *m)
 {
 	struct ieee80211vap *vap = ni->ni_vap;
-	struct ieee80211_key *k;
 	struct ieee80211_frame *wh;
-	const struct ieee80211_cipher *cip;
 
 	/*
 	 * Multicast traffic always uses the multicast key.
@@ -559,12 +554,27 @@ ieee80211_crypto_encap(struct ieee80211_
 			vap->iv_stats.is_tx_nodefkey++;
 			return NULL;
 		}
-		k = &vap->iv_nw_keys[vap->iv_def_txkey];
-	} else
-		k = &ni->ni_ucastkey;
+		return &vap->iv_nw_keys[vap->iv_def_txkey];
+	}
 
-	cip = k->wk_cipher;
-	return (cip->ic_encap(k, m) ? k : NULL);
+	return &ni->ni_ucastkey;
+}
+
+/*
+ * Add privacy headers appropriate for the specified key.
+ */
+struct ieee80211_key *
+ieee80211_crypto_encap(struct ieee80211_node *ni, struct mbuf *m)
+{
+	struct ieee80211_key *k;
+	const struct ieee80211_cipher *cip;
+
+	if ((k = ieee80211_crypto_get_txkey(ni, m)) != NULL) {
+		cip = k->wk_cipher;
+		return (cip->ic_encap(k, m) ? k : NULL);
+	}
+
+	return NULL;
 }
 
 /*

Modified: head/sys/net80211/ieee80211_crypto.h
==============================================================================
--- head/sys/net80211/ieee80211_crypto.h	Sat Oct  3 00:50:13 2015	(r288526)
+++ head/sys/net80211/ieee80211_crypto.h	Sat Oct  3 00:57:33 2015	(r288527)
@@ -195,6 +195,8 @@ int	ieee80211_crypto_available(u_int cip
 
 uint8_t	ieee80211_crypto_get_keyid(struct ieee80211vap *vap,
 		struct ieee80211_key *k);
+struct ieee80211_key *ieee80211_crypto_get_txkey(struct ieee80211_node *,
+		struct mbuf *);
 struct ieee80211_key *ieee80211_crypto_encap(struct ieee80211_node *,
 		struct mbuf *);
 struct ieee80211_key *ieee80211_crypto_decap(struct ieee80211_node *,


More information about the svn-src-head mailing list