zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

ioam6.h (2382B) - Raw


      1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
      2 /*
      3  *  IPv6 IOAM implementation
      4  *
      5  *  Author:
      6  *  Justin Iurman <justin.iurman@uliege.be>
      7  */
      8 
      9 #ifndef _LINUX_IOAM6_H
     10 #define _LINUX_IOAM6_H
     11 
     12 #include <asm/byteorder.h>
     13 #include <linux/types.h>
     14 
     15 #define IOAM6_U16_UNAVAILABLE U16_MAX
     16 #define IOAM6_U32_UNAVAILABLE U32_MAX
     17 #define IOAM6_U64_UNAVAILABLE U64_MAX
     18 
     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_UNAVAILABLE
     22 #define IOAM6_DEFAULT_IF_ID_WIDE IOAM6_U32_UNAVAILABLE
     23 
     24 /*
     25  * IPv6 IOAM Option Header
     26  */
     27 struct ioam6_hdr {
     28 	__u8 opt_type;
     29 	__u8 opt_len;
     30 	__u8 :8;				/* reserved */
     31 #define IOAM6_TYPE_PREALLOC 0
     32 	__u8 type;
     33 } __attribute__((packed));
     34 
     35 /*
     36  * IOAM Trace Header
     37  */
     38 struct 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 #else
    126 #error "Please fix <asm/byteorder.h>"
    127 #endif
    128 
    129 #define IOAM6_TRACE_DATA_SIZE_MAX 244
    130 	__u8	data[];
    131 } __attribute__((packed));
    132 
    133 #endif /* _LINUX_IOAM6_H */