Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 256357
b: refs/heads/master
c: 42d9879
h: refs/heads/master
i:
  256355: ca77921
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Jul 8, 2011
1 parent e7835e7 commit 0c775be
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3ea542d3c2862142ae511fac5ce2dfc7419dcc53
refs/heads/master: 42d98795505314c7af42c7c6b988425300958ed3
24 changes: 22 additions & 2 deletions trunk/include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <linux/device.h>
#include <linux/ieee80211.h>
#include <net/cfg80211.h>
#include <asm/unaligned.h>

/**
* DOC: Introduction
Expand Down Expand Up @@ -2563,6 +2564,18 @@ __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
struct sk_buff *
ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif);

/**
* ieee80211_get_tkip_p1k_iv - get a TKIP phase 1 key for IV32
*
* This function returns the TKIP phase 1 key for the given IV32.
*
* @keyconf: the parameter passed with the set key
* @iv32: IV32 to get the P1K for
* @p1k: a buffer to which the key will be written, as 5 u16 values
*/
void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf,
u32 iv32, u16 *p1k);

/**
* ieee80211_get_tkip_p1k - get a TKIP phase 1 key
*
Expand All @@ -2574,8 +2587,15 @@ ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
* with this P1K
* @p1k: a buffer to which the key will be written, as 5 u16 values
*/
void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf,
struct sk_buff *skb, u16 *p1k);
static inline void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf,
struct sk_buff *skb, u16 *p1k)
{
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control);
u32 iv32 = get_unaligned_le32(&data[4]);

ieee80211_get_tkip_p1k_iv(keyconf, iv32, p1k);
}

/**
* ieee80211_get_tkip_p2k - get a TKIP phase 2 key
Expand Down
9 changes: 3 additions & 6 deletions trunk/net/mac80211/tkip.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,23 +170,20 @@ static void ieee80211_compute_tkip_p1k(struct ieee80211_key *key, u32 iv32)
tkip_mixing_phase1(tk, ctx, sdata->vif.addr, iv32);
}

void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf,
struct sk_buff *skb, u16 *p1k)
void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf,
u32 iv32, u16 *p1k)
{
struct ieee80211_key *key = (struct ieee80211_key *)
container_of(keyconf, struct ieee80211_key, conf);
struct tkip_ctx *ctx = &key->u.tkip.tx;
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control);
u32 iv32 = get_unaligned_le32(&data[4]);
unsigned long flags;

spin_lock_irqsave(&key->u.tkip.txlock, flags);
ieee80211_compute_tkip_p1k(key, iv32);
memcpy(p1k, ctx->p1k, sizeof(ctx->p1k));
spin_unlock_irqrestore(&key->u.tkip.txlock, flags);
}
EXPORT_SYMBOL(ieee80211_get_tkip_p1k);
EXPORT_SYMBOL(ieee80211_get_tkip_p1k_iv);

void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
struct sk_buff *skb, u8 *p2k)
Expand Down

0 comments on commit 0c775be

Please sign in to comment.