root/net/mac802154/llsec.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright (C) 2014 Fraunhofer ITWM
   4  *
   5  * Written by:
   6  * Phoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>
   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 */

/* [<][>][^][v][top][bottom][index][help] */