GNU Linux-libre 6.9.2-gnu
[releases.git] / include / uapi / linux / rpl.h
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