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