1 #include <adf_os_types.h>
2 #include <adf_os_dma.h>
3 #include <adf_os_timer.h>
4 #include <adf_os_lock.h>
6 #include <adf_os_mem.h>
7 #include <adf_os_module.h>
8 #include <adf_os_util.h>
9 #include <adf_os_stdtypes.h>
10 #include <adf_os_defer.h>
11 #include <adf_os_atomic.h>
16 #include <if_ethersubr.h>
17 #include "ieee80211_var.h"
19 #include "_ieee80211.h"
20 #include "ieee80211.h"
24 ieee80211_tgt_crypto_encap(struct ieee80211_frame *wh,
25 struct ieee80211_node_target *ni,
28 #define CRYPTO_KEY_TYPE_AES 2
29 #define CRYPTO_KEY_TYPE_TKIP 3
30 #define CRYPTO_KEY_TYPE_WAPI 4
31 #define IEEE80211_WLAN_HDR_LEN 24
35 a_uint16_t offset = IEEE80211_WLAN_HDR_LEN;
38 if (IEEE80211_QOS_HAS_SEQ(wh))
39 offset += 4; // pad for 4 byte alignment
41 iv = (a_uint8_t *) wh;
45 case CRYPTO_KEY_TYPE_AES:
52 *iv++ = (a_uint8_t) ni->ni_iv16;
53 *iv++ = (a_uint8_t) (ni->ni_iv16 >> 8);
57 tmp = (a_uint16_t) ni->ni_iv32;
58 *iv++ = (a_uint8_t) tmp;
59 *iv++ = (a_uint8_t) (tmp >> 8);
61 tmp = (a_uint16_t) (ni->ni_iv32 >> 16);
62 *iv++ = (a_uint8_t) tmp;
63 *iv = (a_uint8_t) (tmp >> 8);
65 case CRYPTO_KEY_TYPE_TKIP:
72 b1 = (a_uint8_t) (ni->ni_iv16 >> 8);
73 b2 = (b1 | 0x20) & 0x7f;
78 *iv++ = (a_uint8_t) ni->ni_iv16;
81 tmp = (a_uint16_t) ni->ni_iv32;
82 *iv++ = (a_uint8_t) tmp;
83 *iv++ = (a_uint8_t) (tmp >> 8);
85 tmp = (a_uint16_t) (ni->ni_iv32 >> 16);
86 *iv++ = (a_uint8_t) tmp;
87 *iv = (a_uint8_t) (tmp >> 8);
95 #undef CRYPTO_KEY_TYPE_TKIP
96 #undef CRYPTO_KEY_TYPE_AES
97 #undef CRYPTO_KEY_TYPE_WAPI
98 #undef IEEE80211_WLAN_HDR_LEN
101 adf_os_export_symbol(ieee80211_tgt_crypto_encap);
103 #undef IEEE80211_ADDR_LEN