io_uring: add support for passing fixed file descriptors
[linux-2.6-microblaze.git] / include / uapi / linux / ioam6.h
1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2 /*
3  *  IPv6 IOAM implementation
4  *
5  *  Author:
6  *  Justin Iurman <justin.iurman@uliege.be>
7  */
8
9 #ifndef _UAPI_LINUX_IOAM6_H
10 #define _UAPI_LINUX_IOAM6_H
11
12 #include <asm/byteorder.h>
13 #include <linux/types.h>
14
15 #define IOAM6_U16_UNAVAILABLE U16_MAX
16 #define IOAM6_U32_UNAVAILABLE U32_MAX
17 #define IOAM6_U64_UNAVAILABLE U64_MAX
18
19 #define IOAM6_DEFAULT_ID (IOAM6_U32_UNAVAILABLE >> 8)
20 #define IOAM6_DEFAULT_ID_WIDE (IOAM6_U64_UNAVAILABLE >> 8)
21 #define IOAM6_DEFAULT_IF_ID IOAM6_U16_UNAVAILABLE
22 #define IOAM6_DEFAULT_IF_ID_WIDE IOAM6_U32_UNAVAILABLE
23
24 /*
25  * IPv6 IOAM Option Header
26  */
27 struct ioam6_hdr {
28         __u8 opt_type;
29         __u8 opt_len;
30         __u8 :8;                                /* reserved */
31 #define IOAM6_TYPE_PREALLOC 0
32         __u8 type;
33 } __attribute__((packed));
34
35 /*
36  * IOAM Trace Header
37  */
38 struct ioam6_trace_hdr {
39         __be16  namespace_id;
40
41 #if defined(__LITTLE_ENDIAN_BITFIELD)
42
43         __u8    :1,                             /* unused */
44                 :1,                             /* unused */
45                 overflow:1,
46                 nodelen:5;
47
48         __u8    remlen:7,
49                 :1;                             /* unused */
50
51         union {
52                 __be32 type_be32;
53
54                 struct {
55                         __u32   bit7:1,
56                                 bit6:1,
57                                 bit5:1,
58                                 bit4:1,
59                                 bit3:1,
60                                 bit2:1,
61                                 bit1:1,
62                                 bit0:1,
63                                 bit15:1,        /* unused */
64                                 bit14:1,        /* unused */
65                                 bit13:1,        /* unused */
66                                 bit12:1,        /* unused */
67                                 bit11:1,
68                                 bit10:1,
69                                 bit9:1,
70                                 bit8:1,
71                                 bit23:1,        /* reserved */
72                                 bit22:1,
73                                 bit21:1,        /* unused */
74                                 bit20:1,        /* unused */
75                                 bit19:1,        /* unused */
76                                 bit18:1,        /* unused */
77                                 bit17:1,        /* unused */
78                                 bit16:1,        /* unused */
79                                 :8;             /* reserved */
80                 } type;
81         };
82
83 #elif defined(__BIG_ENDIAN_BITFIELD)
84
85         __u8    nodelen:5,
86                 overflow:1,
87                 :1,                             /* unused */
88                 :1;                             /* unused */
89
90         __u8    :1,                             /* unused */
91                 remlen:7;
92
93         union {
94                 __be32 type_be32;
95
96                 struct {
97                         __u32   bit0:1,
98                                 bit1:1,
99                                 bit2:1,
100                                 bit3:1,
101                                 bit4:1,
102                                 bit5:1,
103                                 bit6:1,
104                                 bit7:1,
105                                 bit8:1,
106                                 bit9:1,
107                                 bit10:1,
108                                 bit11:1,
109                                 bit12:1,        /* unused */
110                                 bit13:1,        /* unused */
111                                 bit14:1,        /* unused */
112                                 bit15:1,        /* unused */
113                                 bit16:1,        /* unused */
114                                 bit17:1,        /* unused */
115                                 bit18:1,        /* unused */
116                                 bit19:1,        /* unused */
117                                 bit20:1,        /* unused */
118                                 bit21:1,        /* unused */
119                                 bit22:1,
120                                 bit23:1,        /* reserved */
121                                 :8;             /* reserved */
122                 } type;
123         };
124
125 #else
126 #error "Please fix <asm/byteorder.h>"
127 #endif
128
129 #define IOAM6_TRACE_DATA_SIZE_MAX 244
130         __u8    data[0];
131 } __attribute__((packed));
132
133 #endif /* _UAPI_LINUX_IOAM6_H */