brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 8f72b24 Raw
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