From fc00c656c96528112d05cf0edf8631bd5eaea446 Mon Sep 17 00:00:00 2001 From: Kacper Date: Sun, 7 Dec 2025 20:10:31 +0100 Subject: Add build system scaffolding and libc headers --- include/arch/x86_64/linux/ioam6.h | 109 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 include/arch/x86_64/linux/ioam6.h (limited to 'include/arch/x86_64/linux/ioam6.h') diff --git a/include/arch/x86_64/linux/ioam6.h b/include/arch/x86_64/linux/ioam6.h new file mode 100644 index 00000000..80f23d2d --- /dev/null +++ b/include/arch/x86_64/linux/ioam6.h @@ -0,0 +1,109 @@ +/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ +/* + * IPv6 IOAM implementation + * + * Author: + * Justin Iurman + */ + +#ifndef _LINUX_IOAM6_H +#define _LINUX_IOAM6_H + +#include +#include + +#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 " +#endif + +#define IOAM6_TRACE_DATA_SIZE_MAX 244 + __u8 data[]; +} __attribute__((packed)); + +#endif /* _LINUX_IOAM6_H */ -- cgit v1.2.3