Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/net80211/ieee80211_crypto_none.c
39475 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
*/
27
28
#include <sys/cdefs.h>
29
/*
30
* IEEE 802.11 NULL crypto support.
31
*/
32
#include "opt_wlan.h"
33
34
#include <sys/param.h>
35
#include <sys/kernel.h>
36
#include <sys/malloc.h>
37
#include <sys/systm.h>
38
#include <sys/mbuf.h>
39
#include <sys/module.h>
40
41
#include <sys/socket.h>
42
43
#include <net/if.h>
44
#include <net/if_media.h>
45
#include <net/ethernet.h>
46
47
#include <net80211/ieee80211_var.h>
48
49
static void *none_attach(struct ieee80211vap *, struct ieee80211_key *);
50
static void none_detach(struct ieee80211_key *);
51
static int none_setkey(struct ieee80211_key *);
52
static void none_setiv(struct ieee80211_key *, uint8_t *);
53
static int none_encap(struct ieee80211_key *, struct mbuf *);
54
static int none_decap(struct ieee80211_key *, struct mbuf *, int);
55
static int none_enmic(struct ieee80211_key *, struct mbuf *, int);
56
static int none_demic(struct ieee80211_key *, struct mbuf *, int);
57
58
const struct ieee80211_cipher ieee80211_cipher_none = {
59
.ic_name = "NONE",
60
.ic_cipher = IEEE80211_CIPHER_NONE,
61
.ic_header = 0,
62
.ic_trailer = 0,
63
.ic_miclen = 0,
64
.ic_attach = none_attach,
65
.ic_detach = none_detach,
66
.ic_setkey = none_setkey,
67
.ic_setiv = none_setiv,
68
.ic_encap = none_encap,
69
.ic_decap = none_decap,
70
.ic_enmic = none_enmic,
71
.ic_demic = none_demic,
72
};
73
74
static void *
75
none_attach(struct ieee80211vap *vap, struct ieee80211_key *k)
76
{
77
return vap; /* for diagnostics+stats */
78
}
79
80
static void
81
none_detach(struct ieee80211_key *k)
82
{
83
(void) k;
84
}
85
86
static int
87
none_setkey(struct ieee80211_key *k)
88
{
89
(void) k;
90
return 1;
91
}
92
93
static void
94
none_setiv(struct ieee80211_key *k, uint8_t *ivp)
95
{
96
}
97
98
static int
99
none_encap(struct ieee80211_key *k, struct mbuf *m)
100
{
101
struct ieee80211vap *vap = k->wk_private;
102
#ifdef IEEE80211_DEBUG
103
struct ieee80211_frame *wh = mtod(m, struct ieee80211_frame *);
104
uint8_t keyid;
105
106
keyid = ieee80211_crypto_get_keyid(vap, k);
107
108
/*
109
* The specified key is not setup; this can
110
* happen, at least, when changing keys.
111
*/
112
IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_CRYPTO, wh->i_addr1,
113
"key id %u is not set (encap)", keyid);
114
#endif
115
vap->iv_stats.is_tx_badcipher++;
116
return 0;
117
}
118
119
static int
120
none_decap(struct ieee80211_key *k, struct mbuf *m, int hdrlen)
121
{
122
struct ieee80211vap *vap = k->wk_private;
123
#ifdef IEEE80211_DEBUG
124
struct ieee80211_frame *wh = mtod(m, struct ieee80211_frame *);
125
const uint8_t *ivp = (const uint8_t *)&wh[1];
126
#endif
127
128
/*
129
* The specified key is not setup; this can
130
* happen, at least, when changing keys.
131
*/
132
/* XXX useful to know dst too */
133
IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_CRYPTO, wh->i_addr2,
134
"key id %u is not set (decap)", ivp[IEEE80211_WEP_IVLEN] >> 6);
135
vap->iv_stats.is_rx_badkeyid++;
136
return 0;
137
}
138
139
static int
140
none_enmic(struct ieee80211_key *k, struct mbuf *m, int force)
141
{
142
struct ieee80211vap *vap = k->wk_private;
143
144
vap->iv_stats.is_tx_badcipher++;
145
return 0;
146
}
147
148
static int
149
none_demic(struct ieee80211_key *k, struct mbuf *m, int force)
150
{
151
struct ieee80211vap *vap = k->wk_private;
152
153
vap->iv_stats.is_rx_badkeyid++;
154
return 0;
155
}
156
157