[MAC80211]: embed key conf in key, fix driver interface
[deliverable/linux.git] / net / mac80211 / key.c
CommitLineData
1f5a7e47
JB
1/*
2 * Copyright 2002-2005, Instant802 Networks, Inc.
3 * Copyright 2005-2006, Devicescape Software, Inc.
4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <net/mac80211.h>
12#include "ieee80211_i.h"
13#include "debugfs_key.h"
14#include "aes_ccm.h"
15
1f5a7e47
JB
16struct ieee80211_key *ieee80211_key_alloc(struct ieee80211_sub_if_data *sdata,
17 int idx, size_t key_len, gfp_t flags)
18{
19 struct ieee80211_key *key;
20
21 key = kzalloc(sizeof(struct ieee80211_key) + key_len, flags);
22 if (!key)
23 return NULL;
24 kref_init(&key->kref);
25 return key;
26}
27
28static void ieee80211_key_release(struct kref *kref)
29{
30 struct ieee80211_key *key;
31
32 key = container_of(kref, struct ieee80211_key, kref);
8f20fc24 33 if (key->conf.alg == ALG_CCMP)
1f5a7e47
JB
34 ieee80211_aes_key_free(key->u.ccmp.tfm);
35 ieee80211_debugfs_key_remove(key);
36 kfree(key);
37}
38
39void ieee80211_key_free(struct ieee80211_key *key)
40{
41 if (key)
42 kref_put(&key->kref, ieee80211_key_release);
43}
This page took 0.037137 seconds and 5 git commands to generate.