0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef _UAPI_LINUX_IOAM6_H
0010 #define _UAPI_LINUX_IOAM6_H
0011
0012 #include <asm/byteorder.h>
0013 #include <linux/types.h>
0014
0015 #define IOAM6_U16_UNAVAILABLE U16_MAX
0016 #define IOAM6_U32_UNAVAILABLE U32_MAX
0017 #define IOAM6_U64_UNAVAILABLE U64_MAX
0018
0019 #define IOAM6_DEFAULT_ID (IOAM6_U32_UNAVAILABLE >> 8)
0020 #define IOAM6_DEFAULT_ID_WIDE (IOAM6_U64_UNAVAILABLE >> 8)
0021 #define IOAM6_DEFAULT_IF_ID IOAM6_U16_UNAVAILABLE
0022 #define IOAM6_DEFAULT_IF_ID_WIDE IOAM6_U32_UNAVAILABLE
0023
0024
0025
0026
0027 struct ioam6_hdr {
0028 __u8 opt_type;
0029 __u8 opt_len;
0030 __u8 :8;
0031 #define IOAM6_TYPE_PREALLOC 0
0032 __u8 type;
0033 } __attribute__((packed));
0034
0035
0036
0037
0038 struct ioam6_trace_hdr {
0039 __be16 namespace_id;
0040
0041 #if defined(__LITTLE_ENDIAN_BITFIELD)
0042
0043 __u8 :1,
0044 :1,
0045 overflow:1,
0046 nodelen:5;
0047
0048 __u8 remlen:7,
0049 :1;
0050
0051 union {
0052 __be32 type_be32;
0053
0054 struct {
0055 __u32 bit7:1,
0056 bit6:1,
0057 bit5:1,
0058 bit4:1,
0059 bit3:1,
0060 bit2:1,
0061 bit1:1,
0062 bit0:1,
0063 bit15:1,
0064 bit14:1,
0065 bit13:1,
0066 bit12:1,
0067 bit11:1,
0068 bit10:1,
0069 bit9:1,
0070 bit8:1,
0071 bit23:1,
0072 bit22:1,
0073 bit21:1,
0074 bit20:1,
0075 bit19:1,
0076 bit18:1,
0077 bit17:1,
0078 bit16:1,
0079 :8;
0080 } type;
0081 };
0082
0083 #elif defined(__BIG_ENDIAN_BITFIELD)
0084
0085 __u8 nodelen:5,
0086 overflow:1,
0087 :1,
0088 :1;
0089
0090 __u8 :1,
0091 remlen:7;
0092
0093 union {
0094 __be32 type_be32;
0095
0096 struct {
0097 __u32 bit0:1,
0098 bit1:1,
0099 bit2:1,
0100 bit3:1,
0101 bit4:1,
0102 bit5:1,
0103 bit6:1,
0104 bit7:1,
0105 bit8:1,
0106 bit9:1,
0107 bit10:1,
0108 bit11:1,
0109 bit12:1,
0110 bit13:1,
0111 bit14:1,
0112 bit15:1,
0113 bit16:1,
0114 bit17:1,
0115 bit18:1,
0116 bit19:1,
0117 bit20:1,
0118 bit21:1,
0119 bit22:1,
0120 bit23:1,
0121 :8;
0122 } type;
0123 };
0124
0125 #else
0126 #error "Please fix <asm/byteorder.h>"
0127 #endif
0128
0129 #define IOAM6_TRACE_DATA_SIZE_MAX 244
0130 __u8 data[0];
0131 } __attribute__((packed));
0132
0133 #endif