Warning: This file is not a C or C++ file. It does not have highlighting.

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 */
27struct 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 */
38struct 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[];
131} __attribute__((packed));
132
133#endif /* _UAPI_LINUX_IOAM6_H */
134

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of linux/include/uapi/linux/ioam6.h