cregit-Linux how code gets into the kernel

Release 4.14 net/mac802154/llsec.h

Directory: net/mac802154
/*
 * Copyright (C) 2014 Fraunhofer ITWM
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * Written by:
 * Phoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>
 */

#ifndef MAC802154_LLSEC_H

#define MAC802154_LLSEC_H

#include <linux/slab.h>
#include <linux/hashtable.h>
#include <linux/kref.h>
#include <linux/spinlock.h>
#include <net/af_ieee802154.h>
#include <net/ieee802154_netdev.h>


struct mac802154_llsec_key {
	
struct ieee802154_llsec_key key;

	/* one tfm for each authsize (4/8/16) */
	
struct crypto_aead *tfm[3];
	
struct crypto_skcipher *tfm0;

	
struct kref ref;
};


struct mac802154_llsec_device_key {
	
struct ieee802154_llsec_device_key devkey;

	
struct rcu_head rcu;
};


struct mac802154_llsec_device {
	
struct ieee802154_llsec_device dev;

	
struct hlist_node bucket_s;
	
struct hlist_node bucket_hw;

	/* protects dev.frame_counter and the elements of dev.keys */
	
spinlock_t lock;

	
struct rcu_head rcu;
};


struct mac802154_llsec_seclevel {
	
struct ieee802154_llsec_seclevel level;

	
struct rcu_head rcu;
};


struct mac802154_llsec {
	
struct ieee802154_llsec_params params;
	
struct ieee802154_llsec_table table;

	DECLARE_HASHTABLE(devices_short, 6);
	DECLARE_HASHTABLE(devices_hw, 6);

	/* protects params, all other fields are fine with RCU */
	
rwlock_t lock;
};

void mac802154_llsec_init(struct mac802154_llsec *sec);
void mac802154_llsec_destroy(struct mac802154_llsec *sec);

int mac802154_llsec_get_params(struct mac802154_llsec *sec,
			       struct ieee802154_llsec_params *params);
int mac802154_llsec_set_params(struct mac802154_llsec *sec,
			       const struct ieee802154_llsec_params *params,
			       int changed);

int mac802154_llsec_key_add(struct mac802154_llsec *sec,
			    const struct ieee802154_llsec_key_id *id,
			    const struct ieee802154_llsec_key *key);
int mac802154_llsec_key_del(struct mac802154_llsec *sec,
			    const struct ieee802154_llsec_key_id *key);

int mac802154_llsec_dev_add(struct mac802154_llsec *sec,
			    const struct ieee802154_llsec_device *dev);
int mac802154_llsec_dev_del(struct mac802154_llsec *sec,
			    __le64 device_addr);

int mac802154_llsec_devkey_add(struct mac802154_llsec *sec,
			       __le64 dev_addr,
			       const struct ieee802154_llsec_device_key *key);
int mac802154_llsec_devkey_del(struct mac802154_llsec *sec,
			       __le64 dev_addr,
			       const struct ieee802154_llsec_device_key *key);

int mac802154_llsec_seclevel_add(struct mac802154_llsec *sec,
				 const struct ieee802154_llsec_seclevel *sl);
int mac802154_llsec_seclevel_del(struct mac802154_llsec *sec,
				 const struct ieee802154_llsec_seclevel *sl);

int mac802154_llsec_encrypt(struct mac802154_llsec *sec, struct sk_buff *skb);
int mac802154_llsec_decrypt(struct mac802154_llsec *sec, struct sk_buff *skb);

#endif /* MAC802154_LLSEC_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Phoebe Buckheister34399.71%375.00%
Herbert Xu10.29%125.00%
Total344100.00%4100.00%
Directory: net/mac802154
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.