134 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */2/*3 * IPv6 IOAM implementation4 *5 * Author:6 * Justin Iurman <justin.iurman@uliege.be>7 */8 9#ifndef _UAPI_LINUX_IOAM6_H10#define _UAPI_LINUX_IOAM6_H11 12#include <asm/byteorder.h>13#include <linux/types.h>14 15#define IOAM6_U16_UNAVAILABLE U16_MAX16#define IOAM6_U32_UNAVAILABLE U32_MAX17#define IOAM6_U64_UNAVAILABLE U64_MAX18 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_UNAVAILABLE22#define IOAM6_DEFAULT_IF_ID_WIDE IOAM6_U32_UNAVAILABLE23 24/*25 * IPv6 IOAM Option Header26 */27struct ioam6_hdr {28 __u8 opt_type;29 __u8 opt_len;30 __u8 :8; /* reserved */31#define IOAM6_TYPE_PREALLOC 032 __u8 type;33} __attribute__((packed));34 35/*36 * IOAM Trace Header37 */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#else126#error "Please fix <asm/byteorder.h>"127#endif128 129#define IOAM6_TRACE_DATA_SIZE_MAX 244130 __u8 data[];131} __attribute__((packed));132 133#endif /* _UAPI_LINUX_IOAM6_H */134