All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Berg <johannes@sipsolutions.net>
To: John Linville <linville@tuxdriver.com>
Cc: linux-wireless@vger.kernel.org
Subject: [PATCH 15/15] mac80211: make use of the new cfg80211 key threshold  notification
Date: Fri, 24 Aug 2007 14:27:20 +0200	[thread overview]
Message-ID: <20070824122913.231672000@sipsolutions.net> (raw)
In-Reply-To: 20070824122705.549190000@sipsolutions.net

This makes mac80211 use the cfg80211 facilities for key threshold
notification.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>

---
 net/mac80211/cfg.c             |    1 +
 net/mac80211/ieee80211_ioctl.c |    3 ++-
 net/mac80211/ieee80211_key.h   |    4 +++-
 net/mac80211/key.c             |    3 ++-
 net/mac80211/rx.c              |   10 ++++++++--
 net/mac80211/tx.c              |   17 ++++++++++++-----
 6 files changed, 28 insertions(+), 10 deletions(-)

--- wireless-dev.orig/net/mac80211/ieee80211_key.h	2007-08-24 14:11:42.149417211 +0200
+++ wireless-dev/net/mac80211/ieee80211_key.h	2007-08-24 14:18:16.959417211 +0200
@@ -86,6 +86,8 @@ struct ieee80211_key {
 
 	/* number of times this key has been used */
 	int tx_rx_count;
+	/* threshold for notification */
+	u32 tx_rx_threshold;
 
 #ifdef CONFIG_MAC80211_DEBUGFS
 	struct {
@@ -115,7 +117,7 @@ struct ieee80211_key {
 struct ieee80211_key *ieee80211_key_alloc(struct ieee80211_sub_if_data *sdata,
 					  struct sta_info *sta,
 					  ieee80211_key_alg alg,
-					  int idx,
+					  int idx, u32 threshold,
 					  size_t key_len,
 					  const u8 *key_data);
 void ieee80211_key_free(struct ieee80211_key *key);
--- wireless-dev.orig/net/mac80211/key.c	2007-08-24 14:13:37.299417211 +0200
+++ wireless-dev/net/mac80211/key.c	2007-08-24 14:18:16.959417211 +0200
@@ -124,7 +124,7 @@ void ieee80211_key_removed(struct ieee80
 struct ieee80211_key *ieee80211_key_alloc(struct ieee80211_sub_if_data *sdata,
 					  struct sta_info *sta,
 					  ieee80211_key_alg alg,
-					  int idx,
+					  int idx, u32 threshold,
 					  size_t key_len,
 					  const u8 *key_data)
 {
@@ -151,6 +151,7 @@ struct ieee80211_key *ieee80211_key_allo
 	key->local = sdata->local;
 	key->sdata = sdata;
 	key->sta = sta;
+	key->tx_rx_threshold = threshold;
 
 	if (alg == ALG_CCMP) {
 		/*
--- wireless-dev.orig/net/mac80211/cfg.c	2007-08-24 14:16:51.139417211 +0200
+++ wireless-dev/net/mac80211/cfg.c	2007-08-24 14:18:16.959417211 +0200
@@ -103,6 +103,7 @@ static int ieee80211_add_key(struct wiph
 
 	ret = 0;
 	if (!ieee80211_key_alloc(sdata, sta, alg, params->key_idx,
+				 params->threshold,
 				 params->key_len, params->key))
 		ret = -ENOMEM;
 
--- wireless-dev.orig/net/mac80211/ieee80211_ioctl.c	2007-08-24 14:16:56.449417211 +0200
+++ wireless-dev/net/mac80211/ieee80211_ioctl.c	2007-08-24 14:18:16.969417211 +0200
@@ -431,7 +431,8 @@ static int ieee80211_set_encryption(stru
 		 * set_key() callback becomes confused.
 		 */
 		ieee80211_key_free(key);
-		key = ieee80211_key_alloc(sdata, sta, alg, idx, key_len, _key);
+		key = ieee80211_key_alloc(sdata, sta, alg, idx, 0,
+					  key_len, _key);
 		if (!key) {
 			ret = -ENOMEM;
 			goto err_out;
--- wireless-dev.orig/net/mac80211/rx.c	2007-08-24 14:16:56.449417211 +0200
+++ wireless-dev/net/mac80211/rx.c	2007-08-24 14:18:16.969417211 +0200
@@ -322,6 +322,7 @@ ieee80211_rx_h_load_key(struct ieee80211
 	int keyidx;
 	int hdrlen;
 	int trying_wep = 0;
+	u8 *sta_mac = NULL;
 
 	/*
 	 * Key selection 101
@@ -401,11 +402,16 @@ ieee80211_rx_h_load_key(struct ieee80211
 			trying_wep = 1;
 			goto find_by_index;
 		}
+		sta_mac = rx->sta->addr;
 	}
 
-	if (rx->key && (rx->flags & IEEE80211_TXRXD_RXRA_MATCH)) {
+	if (rx->key) {
 		rx->key->tx_rx_count++;
-		/* TODO: add threshold stuff again */
+		if (rx->key->tx_rx_threshold &&
+		    rx->key->tx_rx_count > rx->key->tx_rx_threshold)
+			cfg80211_key_threshold_notify(rx->key->sdata->dev,
+						      rx->key->conf.keyidx,
+						      sta_mac);
 	}
 
 	return TXRX_CONTINUE;
--- wireless-dev.orig/net/mac80211/tx.c	2007-08-24 14:16:56.459417211 +0200
+++ wireless-dev/net/mac80211/tx.c	2007-08-24 14:18:16.989417211 +0200
@@ -426,11 +426,14 @@ ieee80211_tx_h_ps_buf(struct ieee80211_t
 static ieee80211_txrx_result
 ieee80211_tx_h_select_key(struct ieee80211_txrx_data *tx)
 {
+	u8 *sta_mac = NULL;
+
 	if (unlikely(tx->u.tx.control->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT))
 		tx->key = NULL;
-	else if (tx->sta && tx->sta->key)
+	else if (tx->sta && tx->sta->key) {
+		sta_mac = tx->sta->addr;
 		tx->key = tx->sta->key;
-	else if (tx->sdata->default_key)
+	} else if (tx->sdata->default_key)
 		tx->key = tx->sdata->default_key;
 	else if (tx->sdata->drop_unencrypted &&
 		 !(tx->sdata->eapol && ieee80211_is_eapol(tx->skb))) {
@@ -441,9 +444,13 @@ ieee80211_tx_h_select_key(struct ieee802
 		tx->u.tx.control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT;
 	}
 
-	if (tx->key) {
-		tx->key->tx_rx_count++;
-		/* TODO: add threshold stuff again */
+        if (tx->key) {
+                tx->key->tx_rx_count++;
+		if (tx->key->tx_rx_threshold &&
+		    tx->key->tx_rx_count > tx->key->tx_rx_threshold)
+			cfg80211_key_threshold_notify(tx->key->sdata->dev,
+						      tx->key->conf.keyidx,
+						      sta_mac);
 	}
 
 	return TXRX_CONTINUE;

-- 


  parent reply	other threads:[~2007-08-24 12:31 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-24 12:27 [PATCH 00/15] more key handling updates Johannes Berg
2007-08-24 12:27 ` [PATCH 01/15] mac80211: improve key selection comment Johannes Berg
2007-08-24 12:27 ` [PATCH 02/15] mac80211: rework hardware crypto flags Johannes Berg
2007-08-24 12:27 ` [PATCH 03/15] mac80211: remove set_key_idx callback Johannes Berg
2007-08-24 12:27 ` [PATCH 04/15] mac80211: some more documentation Johannes Berg
2007-08-24 12:27 ` [PATCH 05/15] mac80211: remove HW_KEY_IDX_INVALID Johannes Berg
2007-08-24 17:14   ` Larry Finger
2007-08-24 21:21     ` Michael Buesch
2007-08-24 19:33   ` Larry Finger
2007-08-27 11:00     ` Johannes Berg
2007-08-27 15:10       ` Larry Finger
2007-08-28  8:41         ` Johannes Berg
2007-08-24 12:27 ` [PATCH 06/15] mac80211: remove TKIP mixing for hw accel again Johannes Berg
2007-08-24 21:17   ` Michael Buesch
2007-08-24 12:27 ` [PATCH 07/15] mac80211: ignore key index on pairwise key (WEP only) Johannes Berg
2007-08-24 12:27 ` [PATCH 08/15] cfg80211: clean up key add/remove interface Johannes Berg
2007-08-24 18:55   ` Larry Finger
2007-08-25  7:57     ` Johannes Berg
2007-08-27 11:02     ` Johannes Berg
2007-08-27 15:27       ` Larry Finger
2007-08-28  8:43         ` Johannes Berg
2007-08-24 12:27 ` [PATCH 09/15] mac80211: rename ieee80211_cfg.c to cfg.c Johannes Berg
2007-08-24 12:27 ` [PATCH 10/15] mac80211: support adding/removing keys via cfg80211 Johannes Berg
2007-08-24 12:27 ` [PATCH 11/15] cfg80211: add hook for changing default key index Johannes Berg
2007-08-24 12:27 ` [PATCH 12/15] mac80211: support changing default key index via cfg80211 Johannes Berg
2007-08-24 12:27 ` [PATCH 13/15] mac80211: remove key threshold stuff Johannes Berg
2007-08-24 12:27 ` [PATCH 14/15] cfg80211: add " Johannes Berg
2007-08-24 12:27 ` Johannes Berg [this message]
2007-08-24 12:46 ` [PATCH 00/15] more key handling updates Johannes Berg
2007-08-27 14:45 ` Johannes Berg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070824122913.231672000@sipsolutions.net \
    --to=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.