Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Management Component Transport Protocol (MCTP) - device
0004  * definitions.
0005  *
0006  * Copyright (c) 2021 Code Construct
0007  * Copyright (c) 2021 Google
0008  */
0009 
0010 #ifndef __NET_MCTPDEVICE_H
0011 #define __NET_MCTPDEVICE_H
0012 
0013 #include <linux/list.h>
0014 #include <linux/types.h>
0015 #include <linux/refcount.h>
0016 
0017 struct mctp_sk_key;
0018 
0019 struct mctp_dev {
0020     struct net_device   *dev;
0021 
0022     refcount_t      refs;
0023 
0024     unsigned int        net;
0025 
0026     const struct mctp_netdev_ops *ops;
0027 
0028     /* Only modified under RTNL. Reads have addrs_lock held */
0029     u8          *addrs;
0030     size_t          num_addrs;
0031     spinlock_t      addrs_lock;
0032 
0033     struct rcu_head     rcu;
0034 };
0035 
0036 struct mctp_netdev_ops {
0037     void            (*release_flow)(struct mctp_dev *dev,
0038                         struct mctp_sk_key *key);
0039 };
0040 
0041 #define MCTP_INITIAL_DEFAULT_NET    1
0042 
0043 struct mctp_dev *mctp_dev_get_rtnl(const struct net_device *dev);
0044 struct mctp_dev *__mctp_dev_get(const struct net_device *dev);
0045 
0046 int mctp_register_netdev(struct net_device *dev,
0047              const struct mctp_netdev_ops *ops);
0048 void mctp_unregister_netdev(struct net_device *dev);
0049 
0050 void mctp_dev_hold(struct mctp_dev *mdev);
0051 void mctp_dev_put(struct mctp_dev *mdev);
0052 
0053 void mctp_dev_set_key(struct mctp_dev *dev, struct mctp_sk_key *key);
0054 void mctp_dev_release_key(struct mctp_dev *dev, struct mctp_sk_key *key);
0055 
0056 #endif /* __NET_MCTPDEVICE_H */