162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * MCTP per-net structures
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __NETNS_MCTP_H__
762306a36Sopenharmony_ci#define __NETNS_MCTP_H__
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/mutex.h>
1062306a36Sopenharmony_ci#include <linux/types.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct netns_mctp {
1362306a36Sopenharmony_ci	/* Only updated under RTNL, entries freed via RCU */
1462306a36Sopenharmony_ci	struct list_head routes;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	/* Bound sockets: list of sockets bound by type.
1762306a36Sopenharmony_ci	 * This list is updated from non-atomic contexts (under bind_lock),
1862306a36Sopenharmony_ci	 * and read (under rcu) in packet rx
1962306a36Sopenharmony_ci	 */
2062306a36Sopenharmony_ci	struct mutex bind_lock;
2162306a36Sopenharmony_ci	struct hlist_head binds;
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci	/* tag allocations. This list is read and updated from atomic contexts,
2462306a36Sopenharmony_ci	 * but elements are free()ed after a RCU grace-period
2562306a36Sopenharmony_ci	 */
2662306a36Sopenharmony_ci	spinlock_t keys_lock;
2762306a36Sopenharmony_ci	struct hlist_head keys;
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci	/* MCTP network */
3062306a36Sopenharmony_ci	unsigned int default_net;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	/* neighbour table */
3362306a36Sopenharmony_ci	struct mutex neigh_lock;
3462306a36Sopenharmony_ci	struct list_head neighbours;
3562306a36Sopenharmony_ci};
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#endif /* __NETNS_MCTP_H__ */
38