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[];
 | |
| } __attribute__((packed));
 | |
| 
 | |
| #endif /* _UAPI_LINUX_IOAM6_H */
 |