134 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
 | 
						|
/*
 | 
						|
 *  IPv6 IOAM implementation
 | 
						|
 *
 | 
						|
 *  Author:
 | 
						|
 *  Justin Iurman <justin.iurman@uliege.be>
 | 
						|
 */
 | 
						|
 | 
						|
#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 */
 |