linux-headers (unknown)

(root)/
include/
linux/
ioam6.h
       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 */