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