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