0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef MAC802154_LLSEC_H
0010 #define MAC802154_LLSEC_H
0011
0012 #include <linux/slab.h>
0013 #include <linux/hashtable.h>
0014 #include <linux/kref.h>
0015 #include <linux/spinlock.h>
0016 #include <net/af_ieee802154.h>
0017 #include <net/ieee802154_netdev.h>
0018
0019 struct mac802154_llsec_key {
0020 struct ieee802154_llsec_key key;
0021
0022
0023 struct crypto_aead *tfm[3];
0024 struct crypto_sync_skcipher *tfm0;
0025
0026 struct kref ref;
0027 };
0028
0029 struct mac802154_llsec_device_key {
0030 struct ieee802154_llsec_device_key devkey;
0031
0032 struct rcu_head rcu;
0033 };
0034
0035 struct mac802154_llsec_device {
0036 struct ieee802154_llsec_device dev;
0037
0038 struct hlist_node bucket_s;
0039 struct hlist_node bucket_hw;
0040
0041
0042 spinlock_t lock;
0043
0044 struct rcu_head rcu;
0045 };
0046
0047 struct mac802154_llsec_seclevel {
0048 struct ieee802154_llsec_seclevel level;
0049
0050 struct rcu_head rcu;
0051 };
0052
0053 struct mac802154_llsec {
0054 struct ieee802154_llsec_params params;
0055 struct ieee802154_llsec_table table;
0056
0057 DECLARE_HASHTABLE(devices_short, 6);
0058 DECLARE_HASHTABLE(devices_hw, 6);
0059
0060
0061 rwlock_t lock;
0062 };
0063
0064 void mac802154_llsec_init(struct mac802154_llsec *sec);
0065 void mac802154_llsec_destroy(struct mac802154_llsec *sec);
0066
0067 int mac802154_llsec_get_params(struct mac802154_llsec *sec,
0068 struct ieee802154_llsec_params *params);
0069 int mac802154_llsec_set_params(struct mac802154_llsec *sec,
0070 const struct ieee802154_llsec_params *params,
0071 int changed);
0072
0073 int mac802154_llsec_key_add(struct mac802154_llsec *sec,
0074 const struct ieee802154_llsec_key_id *id,
0075 const struct ieee802154_llsec_key *key);
0076 int mac802154_llsec_key_del(struct mac802154_llsec *sec,
0077 const struct ieee802154_llsec_key_id *key);
0078
0079 int mac802154_llsec_dev_add(struct mac802154_llsec *sec,
0080 const struct ieee802154_llsec_device *dev);
0081 int mac802154_llsec_dev_del(struct mac802154_llsec *sec,
0082 __le64 device_addr);
0083
0084 int mac802154_llsec_devkey_add(struct mac802154_llsec *sec,
0085 __le64 dev_addr,
0086 const struct ieee802154_llsec_device_key *key);
0087 int mac802154_llsec_devkey_del(struct mac802154_llsec *sec,
0088 __le64 dev_addr,
0089 const struct ieee802154_llsec_device_key *key);
0090
0091 int mac802154_llsec_seclevel_add(struct mac802154_llsec *sec,
0092 const struct ieee802154_llsec_seclevel *sl);
0093 int mac802154_llsec_seclevel_del(struct mac802154_llsec *sec,
0094 const struct ieee802154_llsec_seclevel *sl);
0095
0096 int mac802154_llsec_encrypt(struct mac802154_llsec *sec, struct sk_buff *skb);
0097 int mac802154_llsec_decrypt(struct mac802154_llsec *sec, struct sk_buff *skb);
0098
0099 #endif