1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 2 /* 3 * IPv6 RPL-SR implementation 4 * 5 * Author: 6 * (C) 2020 Alexander Aring <alex.aring@gmail.com> 7 */ 8 9 #ifndef _UAPI_LINUX_RPL_H 10 #define _UAPI_LINUX_RPL_H 11 12 #include <asm/byteorder.h> 13 #include <linux/types.h> 14 #include <linux/in6.h> 15 16 /* 17 * RPL SR Header 18 */ 19 struct ipv6_rpl_sr_hdr { 20 __u8 nexthdr; 21 __u8 hdrlen; 22 __u8 type; 23 __u8 segments_left; 24 #if defined(__LITTLE_ENDIAN_BITFIELD) 25 __u32 cmpre:4, 26 cmpri:4, 27 reserved:4, 28 pad:4, 29 reserved1:16; 30 #elif defined(__BIG_ENDIAN_BITFIELD) 31 __u32 cmpri:4, 32 cmpre:4, 33 pad:4, 34 reserved:20; 35 #else 36 #error "Please fix <asm/byteorder.h>" 37 #endif 38 39 union { 40 __DECLARE_FLEX_ARRAY(struct in6_addr, addr); 41 __DECLARE_FLEX_ARRAY(__u8, data); 42 } segments; 43 } __attribute__((packed)); 44 45 #define rpl_segaddr segments.addr 46 #define rpl_segdata segments.data 47 48 #endif 49