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