GNU Linux-libre 6.9.2-gnu
[releases.git] / include / uapi / linux / mctp.h
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
16 typedef __u8                    mctp_eid_t;
17
18 struct mctp_addr {
19         mctp_eid_t              s_addr;
20 };
21
22 struct 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
32 struct 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  */
61 struct 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
75 struct 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 */