xref: /linux/include/net/mctpdevice.h (revision 7f71507851fc7764b36a3221839607d3a45c2025)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Management Component Transport Protocol (MCTP) - device
4  * definitions.
5  *
6  * Copyright (c) 2021 Code Construct
7  * Copyright (c) 2021 Google
8  */
9 
10 #ifndef __NET_MCTPDEVICE_H
11 #define __NET_MCTPDEVICE_H
12 
13 #include <linux/list.h>
14 #include <linux/types.h>
15 #include <linux/refcount.h>
16 
17 struct mctp_sk_key;
18 
19 struct mctp_dev {
20 	struct net_device	*dev;
21 
22 	refcount_t		refs;
23 
24 	unsigned int		net;
25 	enum mctp_phys_binding	binding;
26 
27 	const struct mctp_netdev_ops *ops;
28 
29 	/* Only modified under RTNL. Reads have addrs_lock held */
30 	u8			*addrs;
31 	size_t			num_addrs;
32 	spinlock_t		addrs_lock;
33 
34 	struct rcu_head		rcu;
35 };
36 
37 struct mctp_netdev_ops {
38 	void			(*release_flow)(struct mctp_dev *dev,
39 						struct mctp_sk_key *key);
40 };
41 
42 #define MCTP_INITIAL_DEFAULT_NET	1
43 
44 struct mctp_dev *mctp_dev_get_rtnl(const struct net_device *dev);
45 struct mctp_dev *__mctp_dev_get(const struct net_device *dev);
46 
47 int mctp_register_netdev(struct net_device *dev,
48 			 const struct mctp_netdev_ops *ops,
49 			 enum mctp_phys_binding binding);
50 void mctp_unregister_netdev(struct net_device *dev);
51 
52 void mctp_dev_hold(struct mctp_dev *mdev);
53 void mctp_dev_put(struct mctp_dev *mdev);
54 
55 void mctp_dev_set_key(struct mctp_dev *dev, struct mctp_sk_key *key);
56 void mctp_dev_release_key(struct mctp_dev *dev, struct mctp_sk_key *key);
57 
58 #endif /* __NET_MCTPDEVICE_H */
59