Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/net/mac802154/mib.c
26282 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Copyright 2007-2012 Siemens AG
4
*
5
* Written by:
6
* Dmitry Eremin-Solenikov <[email protected]>
7
* Sergey Lapin <[email protected]>
8
* Maxim Gorbachyov <[email protected]>
9
* Alexander Smirnov <[email protected]>
10
*/
11
12
#include <linux/if_arp.h>
13
14
#include <net/mac802154.h>
15
#include <net/ieee802154_netdev.h>
16
#include <net/cfg802154.h>
17
18
#include "ieee802154_i.h"
19
#include "driver-ops.h"
20
21
void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan)
22
{
23
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
24
struct ieee802154_local *local = sdata->local;
25
int res;
26
27
ASSERT_RTNL();
28
29
BUG_ON(dev->type != ARPHRD_IEEE802154);
30
31
res = drv_set_channel(local, page, chan);
32
if (res) {
33
pr_debug("set_channel failed\n");
34
} else {
35
local->phy->current_channel = chan;
36
local->phy->current_page = page;
37
}
38
}
39
40
int mac802154_get_params(struct net_device *dev,
41
struct ieee802154_llsec_params *params)
42
{
43
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
44
int res;
45
46
BUG_ON(dev->type != ARPHRD_IEEE802154);
47
48
mutex_lock(&sdata->sec_mtx);
49
res = mac802154_llsec_get_params(&sdata->sec, params);
50
mutex_unlock(&sdata->sec_mtx);
51
52
return res;
53
}
54
55
int mac802154_set_params(struct net_device *dev,
56
const struct ieee802154_llsec_params *params,
57
int changed)
58
{
59
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
60
int res;
61
62
BUG_ON(dev->type != ARPHRD_IEEE802154);
63
64
mutex_lock(&sdata->sec_mtx);
65
res = mac802154_llsec_set_params(&sdata->sec, params, changed);
66
mutex_unlock(&sdata->sec_mtx);
67
68
return res;
69
}
70
71
int mac802154_add_key(struct net_device *dev,
72
const struct ieee802154_llsec_key_id *id,
73
const struct ieee802154_llsec_key *key)
74
{
75
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
76
int res;
77
78
BUG_ON(dev->type != ARPHRD_IEEE802154);
79
80
mutex_lock(&sdata->sec_mtx);
81
res = mac802154_llsec_key_add(&sdata->sec, id, key);
82
mutex_unlock(&sdata->sec_mtx);
83
84
return res;
85
}
86
87
int mac802154_del_key(struct net_device *dev,
88
const struct ieee802154_llsec_key_id *id)
89
{
90
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
91
int res;
92
93
BUG_ON(dev->type != ARPHRD_IEEE802154);
94
95
mutex_lock(&sdata->sec_mtx);
96
res = mac802154_llsec_key_del(&sdata->sec, id);
97
mutex_unlock(&sdata->sec_mtx);
98
99
return res;
100
}
101
102
int mac802154_add_dev(struct net_device *dev,
103
const struct ieee802154_llsec_device *llsec_dev)
104
{
105
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
106
int res;
107
108
BUG_ON(dev->type != ARPHRD_IEEE802154);
109
110
mutex_lock(&sdata->sec_mtx);
111
res = mac802154_llsec_dev_add(&sdata->sec, llsec_dev);
112
mutex_unlock(&sdata->sec_mtx);
113
114
return res;
115
}
116
117
int mac802154_del_dev(struct net_device *dev, __le64 dev_addr)
118
{
119
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
120
int res;
121
122
BUG_ON(dev->type != ARPHRD_IEEE802154);
123
124
mutex_lock(&sdata->sec_mtx);
125
res = mac802154_llsec_dev_del(&sdata->sec, dev_addr);
126
mutex_unlock(&sdata->sec_mtx);
127
128
return res;
129
}
130
131
int mac802154_add_devkey(struct net_device *dev,
132
__le64 device_addr,
133
const struct ieee802154_llsec_device_key *key)
134
{
135
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
136
int res;
137
138
BUG_ON(dev->type != ARPHRD_IEEE802154);
139
140
mutex_lock(&sdata->sec_mtx);
141
res = mac802154_llsec_devkey_add(&sdata->sec, device_addr, key);
142
mutex_unlock(&sdata->sec_mtx);
143
144
return res;
145
}
146
147
int mac802154_del_devkey(struct net_device *dev,
148
__le64 device_addr,
149
const struct ieee802154_llsec_device_key *key)
150
{
151
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
152
int res;
153
154
BUG_ON(dev->type != ARPHRD_IEEE802154);
155
156
mutex_lock(&sdata->sec_mtx);
157
res = mac802154_llsec_devkey_del(&sdata->sec, device_addr, key);
158
mutex_unlock(&sdata->sec_mtx);
159
160
return res;
161
}
162
163
int mac802154_add_seclevel(struct net_device *dev,
164
const struct ieee802154_llsec_seclevel *sl)
165
{
166
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
167
int res;
168
169
BUG_ON(dev->type != ARPHRD_IEEE802154);
170
171
mutex_lock(&sdata->sec_mtx);
172
res = mac802154_llsec_seclevel_add(&sdata->sec, sl);
173
mutex_unlock(&sdata->sec_mtx);
174
175
return res;
176
}
177
178
int mac802154_del_seclevel(struct net_device *dev,
179
const struct ieee802154_llsec_seclevel *sl)
180
{
181
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
182
int res;
183
184
BUG_ON(dev->type != ARPHRD_IEEE802154);
185
186
mutex_lock(&sdata->sec_mtx);
187
res = mac802154_llsec_seclevel_del(&sdata->sec, sl);
188
mutex_unlock(&sdata->sec_mtx);
189
190
return res;
191
}
192
193
void mac802154_lock_table(struct net_device *dev)
194
{
195
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
196
197
BUG_ON(dev->type != ARPHRD_IEEE802154);
198
199
mutex_lock(&sdata->sec_mtx);
200
}
201
202
void mac802154_get_table(struct net_device *dev,
203
struct ieee802154_llsec_table **t)
204
{
205
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
206
207
BUG_ON(dev->type != ARPHRD_IEEE802154);
208
209
*t = &sdata->sec.table;
210
}
211
212
void mac802154_unlock_table(struct net_device *dev)
213
{
214
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
215
216
BUG_ON(dev->type != ARPHRD_IEEE802154);
217
218
mutex_unlock(&sdata->sec_mtx);
219
}
220
221