Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 3f735b76a4e654bee652cbbeb405b9b3ef950316 107 lines 3.7 kB view raw
1/* 2 * Original code based on Host AP (software wireless LAN access point) driver 3 * for Intersil Prism2/2.5/3. 4 * 5 * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen 6 * <jkmaline@cc.hut.fi> 7 * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi> 8 * 9 * Adaption to a generic IEEE 802.11 stack by James Ketrenos 10 * <jketreno@linux.intel.com> 11 * 12 * Copyright (c) 2004, Intel Corporation 13 * 14 * This program is free software; you can redistribute it and/or modify 15 * it under the terms of the GNU General Public License version 2 as 16 * published by the Free Software Foundation. See README and COPYING for 17 * more details. 18 */ 19 20/* 21 * This file defines the interface to the ieee80211 crypto module. 22 */ 23#ifndef IEEE80211_CRYPT_H 24#define IEEE80211_CRYPT_H 25 26#include <linux/types.h> 27#include <linux/list.h> 28#include <net/ieee80211.h> 29#include <asm/atomic.h> 30 31enum { 32 IEEE80211_CRYPTO_TKIP_COUNTERMEASURES = (1 << 0), 33}; 34 35struct sk_buff; 36struct module; 37 38struct ieee80211_crypto_ops { 39 const char *name; 40 struct list_head list; 41 42 /* init new crypto context (e.g., allocate private data space, 43 * select IV, etc.); returns NULL on failure or pointer to allocated 44 * private data on success */ 45 void *(*init) (int keyidx); 46 47 /* deinitialize crypto context and free allocated private data */ 48 void (*deinit) (void *priv); 49 50 int (*build_iv) (struct sk_buff * skb, int hdr_len, void *priv); 51 52 /* encrypt/decrypt return < 0 on error or >= 0 on success. The return 53 * value from decrypt_mpdu is passed as the keyidx value for 54 * decrypt_msdu. skb must have enough head and tail room for the 55 * encryption; if not, error will be returned; these functions are 56 * called for all MPDUs (i.e., fragments). 57 */ 58 int (*encrypt_mpdu) (struct sk_buff * skb, int hdr_len, void *priv); 59 int (*decrypt_mpdu) (struct sk_buff * skb, int hdr_len, void *priv); 60 61 /* These functions are called for full MSDUs, i.e. full frames. 62 * These can be NULL if full MSDU operations are not needed. */ 63 int (*encrypt_msdu) (struct sk_buff * skb, int hdr_len, void *priv); 64 int (*decrypt_msdu) (struct sk_buff * skb, int keyidx, int hdr_len, 65 void *priv); 66 67 int (*set_key) (void *key, int len, u8 * seq, void *priv); 68 int (*get_key) (void *key, int len, u8 * seq, void *priv); 69 70 /* procfs handler for printing out key information and possible 71 * statistics */ 72 char *(*print_stats) (char *p, void *priv); 73 74 /* Crypto specific flag get/set for configuration settings */ 75 unsigned long (*get_flags) (void *priv); 76 unsigned long (*set_flags) (unsigned long flags, void *priv); 77 78 /* maximum number of bytes added by encryption; encrypt buf is 79 * allocated with extra_prefix_len bytes, copy of in_buf, and 80 * extra_postfix_len; encrypt need not use all this space, but 81 * the result must start at the beginning of the buffer and correct 82 * length must be returned */ 83 int extra_mpdu_prefix_len, extra_mpdu_postfix_len; 84 int extra_msdu_prefix_len, extra_msdu_postfix_len; 85 86 struct module *owner; 87}; 88 89struct ieee80211_crypt_data { 90 struct list_head list; /* delayed deletion list */ 91 struct ieee80211_crypto_ops *ops; 92 void *priv; 93 atomic_t refcnt; 94}; 95 96struct ieee80211_device; 97 98int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops); 99int ieee80211_unregister_crypto_ops(struct ieee80211_crypto_ops *ops); 100struct ieee80211_crypto_ops *ieee80211_get_crypto_ops(const char *name); 101void ieee80211_crypt_deinit_entries(struct ieee80211_device *, int); 102void ieee80211_crypt_deinit_handler(unsigned long); 103void ieee80211_crypt_delayed_deinit(struct ieee80211_device *ieee, 104 struct ieee80211_crypt_data **crypt); 105void ieee80211_crypt_quiescing(struct ieee80211_device *ieee); 106 107#endif