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