1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * Management Component Transport Protocol (MCTP)
4 *
5 * Copyright (c) 2021 Code Construct
6 * Copyright (c) 2021 Google
7 */
8
9#ifndef __UAPI_MCTP_H
10#define __UAPI_MCTP_H
11
12#include <linux/types.h>
13#include <linux/socket.h>
14#include <linux/netdevice.h>
15
16typedef __u8			mctp_eid_t;
17
18struct mctp_addr {
19	mctp_eid_t		s_addr;
20};
21
22struct sockaddr_mctp {
23	__kernel_sa_family_t	smctp_family;
24	__u16			__smctp_pad0;
25	unsigned int		smctp_network;
26	struct mctp_addr	smctp_addr;
27	__u8			smctp_type;
28	__u8			smctp_tag;
29	__u8			__smctp_pad1;
30};
31
32struct sockaddr_mctp_ext {
33	struct sockaddr_mctp	smctp_base;
34	int			smctp_ifindex;
35	__u8			smctp_halen;
36	__u8			__smctp_pad0[3];
37	__u8			smctp_haddr[MAX_ADDR_LEN];
38};
39
40#define MCTP_NET_ANY		0x0
41
42#define MCTP_ADDR_NULL		0x00
43#define MCTP_ADDR_ANY		0xff
44
45#define MCTP_TAG_MASK		0x07
46#define MCTP_TAG_OWNER		0x08
47#define MCTP_TAG_PREALLOC	0x10
48
49#define MCTP_OPT_ADDR_EXT	1
50
51#define SIOCMCTPALLOCTAG	(SIOCPROTOPRIVATE + 0)
52#define SIOCMCTPDROPTAG		(SIOCPROTOPRIVATE + 1)
53#define SIOCMCTPALLOCTAG2	(SIOCPROTOPRIVATE + 2)
54#define SIOCMCTPDROPTAG2	(SIOCPROTOPRIVATE + 3)
55
56/* Deprecated: use mctp_ioc_tag_ctl2 / TAG2 ioctls instead, which defines the
57 * MCTP network ID as part of the allocated tag. Using this assumes the default
58 * net ID for allocated tags, which may not give correct behaviour on system
59 * with multiple networks configured.
60 */
61struct mctp_ioc_tag_ctl {
62	mctp_eid_t	peer_addr;
63
64	/* For SIOCMCTPALLOCTAG: must be passed as zero, kernel will
65	 * populate with the allocated tag value. Returned tag value will
66	 * always have TO and PREALLOC set.
67	 *
68	 * For SIOCMCTPDROPTAG: userspace provides tag value to drop, from
69	 * a prior SIOCMCTPALLOCTAG call (and so must have TO and PREALLOC set).
70	 */
71	__u8		tag;
72	__u16		flags;
73};
74
75struct mctp_ioc_tag_ctl2 {
76	/* Peer details: network ID, peer EID, local EID. All set by the
77	 * caller.
78	 *
79	 * Local EID must be MCTP_ADDR_NULL or MCTP_ADDR_ANY in current
80	 * kernels.
81	 */
82	unsigned int	net;
83	mctp_eid_t	peer_addr;
84	mctp_eid_t	local_addr;
85
86	/* Set by caller, but no flags defined currently. Must be 0 */
87	__u16		flags;
88
89	/* For SIOCMCTPALLOCTAG2: must be passed as zero, kernel will
90	 * populate with the allocated tag value. Returned tag value will
91	 * always have TO and PREALLOC set.
92	 *
93	 * For SIOCMCTPDROPTAG2: userspace provides tag value to drop, from
94	 * a prior SIOCMCTPALLOCTAG2 call (and so must have TO and PREALLOC set).
95	 */
96	__u8		tag;
97
98};
99
100#endif /* __UAPI_MCTP_H */
101