Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/net/mac802154/llsec.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (C) 2014 Fraunhofer ITWM
4
*
5
* Written by:
6
* Phoebe Buckheister <[email protected]>
7
*/
8
9
#ifndef MAC802154_LLSEC_H
10
#define MAC802154_LLSEC_H
11
12
#include <linux/slab.h>
13
#include <linux/hashtable.h>
14
#include <linux/kref.h>
15
#include <linux/spinlock.h>
16
#include <net/af_ieee802154.h>
17
#include <net/ieee802154_netdev.h>
18
19
struct mac802154_llsec_key {
20
struct ieee802154_llsec_key key;
21
22
/* one tfm for each authsize (4/8/16) */
23
struct crypto_aead *tfm[3];
24
struct crypto_sync_skcipher *tfm0;
25
26
struct kref ref;
27
};
28
29
struct mac802154_llsec_device_key {
30
struct ieee802154_llsec_device_key devkey;
31
32
struct rcu_head rcu;
33
};
34
35
struct mac802154_llsec_device {
36
struct ieee802154_llsec_device dev;
37
38
struct hlist_node bucket_s;
39
struct hlist_node bucket_hw;
40
41
/* protects dev.frame_counter and the elements of dev.keys */
42
spinlock_t lock;
43
44
struct rcu_head rcu;
45
};
46
47
struct mac802154_llsec_seclevel {
48
struct ieee802154_llsec_seclevel level;
49
50
struct rcu_head rcu;
51
};
52
53
struct mac802154_llsec {
54
struct ieee802154_llsec_params params;
55
struct ieee802154_llsec_table table;
56
57
DECLARE_HASHTABLE(devices_short, 6);
58
DECLARE_HASHTABLE(devices_hw, 6);
59
60
/* protects params, all other fields are fine with RCU */
61
rwlock_t lock;
62
};
63
64
void mac802154_llsec_init(struct mac802154_llsec *sec);
65
void mac802154_llsec_destroy(struct mac802154_llsec *sec);
66
67
int mac802154_llsec_get_params(struct mac802154_llsec *sec,
68
struct ieee802154_llsec_params *params);
69
int mac802154_llsec_set_params(struct mac802154_llsec *sec,
70
const struct ieee802154_llsec_params *params,
71
int changed);
72
73
int mac802154_llsec_key_add(struct mac802154_llsec *sec,
74
const struct ieee802154_llsec_key_id *id,
75
const struct ieee802154_llsec_key *key);
76
int mac802154_llsec_key_del(struct mac802154_llsec *sec,
77
const struct ieee802154_llsec_key_id *key);
78
79
int mac802154_llsec_dev_add(struct mac802154_llsec *sec,
80
const struct ieee802154_llsec_device *dev);
81
int mac802154_llsec_dev_del(struct mac802154_llsec *sec,
82
__le64 device_addr);
83
84
int mac802154_llsec_devkey_add(struct mac802154_llsec *sec,
85
__le64 dev_addr,
86
const struct ieee802154_llsec_device_key *key);
87
int mac802154_llsec_devkey_del(struct mac802154_llsec *sec,
88
__le64 dev_addr,
89
const struct ieee802154_llsec_device_key *key);
90
91
int mac802154_llsec_seclevel_add(struct mac802154_llsec *sec,
92
const struct ieee802154_llsec_seclevel *sl);
93
int mac802154_llsec_seclevel_del(struct mac802154_llsec *sec,
94
const struct ieee802154_llsec_seclevel *sl);
95
96
int mac802154_llsec_encrypt(struct mac802154_llsec *sec, struct sk_buff *skb);
97
int mac802154_llsec_decrypt(struct mac802154_llsec *sec, struct sk_buff *skb);
98
99
#endif /* MAC802154_LLSEC_H */
100
101