123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
- /*
- * IPv6 IOAM implementation
- *
- * Author:
- * Justin Iurman <[email protected]>
- */
- #ifndef _UAPI_LINUX_IOAM6_H
- #define _UAPI_LINUX_IOAM6_H
- #include <asm/byteorder.h>
- #include <linux/types.h>
- #define IOAM6_U16_UNAVAILABLE U16_MAX
- #define IOAM6_U32_UNAVAILABLE U32_MAX
- #define IOAM6_U64_UNAVAILABLE U64_MAX
- #define IOAM6_DEFAULT_ID (IOAM6_U32_UNAVAILABLE >> 8)
- #define IOAM6_DEFAULT_ID_WIDE (IOAM6_U64_UNAVAILABLE >> 8)
- #define IOAM6_DEFAULT_IF_ID IOAM6_U16_UNAVAILABLE
- #define IOAM6_DEFAULT_IF_ID_WIDE IOAM6_U32_UNAVAILABLE
- /*
- * IPv6 IOAM Option Header
- */
- struct ioam6_hdr {
- __u8 opt_type;
- __u8 opt_len;
- __u8 :8; /* reserved */
- #define IOAM6_TYPE_PREALLOC 0
- __u8 type;
- } __attribute__((packed));
- /*
- * IOAM Trace Header
- */
- struct ioam6_trace_hdr {
- __be16 namespace_id;
- #if defined(__LITTLE_ENDIAN_BITFIELD)
- __u8 :1, /* unused */
- :1, /* unused */
- overflow:1,
- nodelen:5;
- __u8 remlen:7,
- :1; /* unused */
- union {
- __be32 type_be32;
- struct {
- __u32 bit7:1,
- bit6:1,
- bit5:1,
- bit4:1,
- bit3:1,
- bit2:1,
- bit1:1,
- bit0:1,
- bit15:1, /* unused */
- bit14:1, /* unused */
- bit13:1, /* unused */
- bit12:1, /* unused */
- bit11:1,
- bit10:1,
- bit9:1,
- bit8:1,
- bit23:1, /* reserved */
- bit22:1,
- bit21:1, /* unused */
- bit20:1, /* unused */
- bit19:1, /* unused */
- bit18:1, /* unused */
- bit17:1, /* unused */
- bit16:1, /* unused */
- :8; /* reserved */
- } type;
- };
- #elif defined(__BIG_ENDIAN_BITFIELD)
- __u8 nodelen:5,
- overflow:1,
- :1, /* unused */
- :1; /* unused */
- __u8 :1, /* unused */
- remlen:7;
- union {
- __be32 type_be32;
- struct {
- __u32 bit0:1,
- bit1:1,
- bit2:1,
- bit3:1,
- bit4:1,
- bit5:1,
- bit6:1,
- bit7:1,
- bit8:1,
- bit9:1,
- bit10:1,
- bit11:1,
- bit12:1, /* unused */
- bit13:1, /* unused */
- bit14:1, /* unused */
- bit15:1, /* unused */
- bit16:1, /* unused */
- bit17:1, /* unused */
- bit18:1, /* unused */
- bit19:1, /* unused */
- bit20:1, /* unused */
- bit21:1, /* unused */
- bit22:1,
- bit23:1, /* reserved */
- :8; /* reserved */
- } type;
- };
- #else
- #error "Please fix <asm/byteorder.h>"
- #endif
- #define IOAM6_TRACE_DATA_SIZE_MAX 244
- __u8 data[0];
- } __attribute__((packed));
- #endif /* _UAPI_LINUX_IOAM6_H */
|