ipv6 addrconf: implement RFC7559 router solicitation backoff
[cascardo/linux.git] / include / uapi / linux / ipv6.h
1 #ifndef _UAPI_IPV6_H
2 #define _UAPI_IPV6_H
3
4 #include <linux/libc-compat.h>
5 #include <linux/types.h>
6 #include <linux/in6.h>
7 #include <asm/byteorder.h>
8
9 /* The latest drafts declared increase in minimal mtu up to 1280. */
10
11 #define IPV6_MIN_MTU    1280
12
13 /*
14  *      Advanced API
15  *      source interface/address selection, source routing, etc...
16  *      *under construction*
17  */
18
19 #if __UAPI_DEF_IN6_PKTINFO
20 struct in6_pktinfo {
21         struct in6_addr ipi6_addr;
22         int             ipi6_ifindex;
23 };
24 #endif
25
26 #if __UAPI_DEF_IP6_MTUINFO
27 struct ip6_mtuinfo {
28         struct sockaddr_in6     ip6m_addr;
29         __u32                   ip6m_mtu;
30 };
31 #endif
32
33 struct in6_ifreq {
34         struct in6_addr ifr6_addr;
35         __u32           ifr6_prefixlen;
36         int             ifr6_ifindex; 
37 };
38
39 #define IPV6_SRCRT_STRICT       0x01    /* Deprecated; will be removed */
40 #define IPV6_SRCRT_TYPE_0       0       /* Deprecated; will be removed */
41 #define IPV6_SRCRT_TYPE_2       2       /* IPv6 type 2 Routing Header   */
42
43 /*
44  *      routing header
45  */
46 struct ipv6_rt_hdr {
47         __u8            nexthdr;
48         __u8            hdrlen;
49         __u8            type;
50         __u8            segments_left;
51
52         /*
53          *      type specific data
54          *      variable length field
55          */
56 };
57
58
59 struct ipv6_opt_hdr {
60         __u8            nexthdr;
61         __u8            hdrlen;
62         /* 
63          * TLV encoded option data follows.
64          */
65 } __attribute__((packed));      /* required for some archs */
66
67 #define ipv6_destopt_hdr ipv6_opt_hdr
68 #define ipv6_hopopt_hdr  ipv6_opt_hdr
69
70 /* Router Alert option values (RFC2711) */
71 #define IPV6_OPT_ROUTERALERT_MLD        0x0000  /* MLD(RFC2710) */
72
73 /*
74  *      routing header type 0 (used in cmsghdr struct)
75  */
76
77 struct rt0_hdr {
78         struct ipv6_rt_hdr      rt_hdr;
79         __u32                   reserved;
80         struct in6_addr         addr[0];
81
82 #define rt0_type                rt_hdr.type
83 };
84
85 /*
86  *      routing header type 2
87  */
88
89 struct rt2_hdr {
90         struct ipv6_rt_hdr      rt_hdr;
91         __u32                   reserved;
92         struct in6_addr         addr;
93
94 #define rt2_type                rt_hdr.type
95 };
96
97 /*
98  *      home address option in destination options header
99  */
100
101 struct ipv6_destopt_hao {
102         __u8                    type;
103         __u8                    length;
104         struct in6_addr         addr;
105 } __attribute__((packed));
106
107 /*
108  *      IPv6 fixed header
109  *
110  *      BEWARE, it is incorrect. The first 4 bits of flow_lbl
111  *      are glued to priority now, forming "class".
112  */
113
114 struct ipv6hdr {
115 #if defined(__LITTLE_ENDIAN_BITFIELD)
116         __u8                    priority:4,
117                                 version:4;
118 #elif defined(__BIG_ENDIAN_BITFIELD)
119         __u8                    version:4,
120                                 priority:4;
121 #else
122 #error  "Please fix <asm/byteorder.h>"
123 #endif
124         __u8                    flow_lbl[3];
125
126         __be16                  payload_len;
127         __u8                    nexthdr;
128         __u8                    hop_limit;
129
130         struct  in6_addr        saddr;
131         struct  in6_addr        daddr;
132 };
133
134
135 /* index values for the variables in ipv6_devconf */
136 enum {
137         DEVCONF_FORWARDING = 0,
138         DEVCONF_HOPLIMIT,
139         DEVCONF_MTU6,
140         DEVCONF_ACCEPT_RA,
141         DEVCONF_ACCEPT_REDIRECTS,
142         DEVCONF_AUTOCONF,
143         DEVCONF_DAD_TRANSMITS,
144         DEVCONF_RTR_SOLICITS,
145         DEVCONF_RTR_SOLICIT_INTERVAL,
146         DEVCONF_RTR_SOLICIT_DELAY,
147         DEVCONF_USE_TEMPADDR,
148         DEVCONF_TEMP_VALID_LFT,
149         DEVCONF_TEMP_PREFERED_LFT,
150         DEVCONF_REGEN_MAX_RETRY,
151         DEVCONF_MAX_DESYNC_FACTOR,
152         DEVCONF_MAX_ADDRESSES,
153         DEVCONF_FORCE_MLD_VERSION,
154         DEVCONF_ACCEPT_RA_DEFRTR,
155         DEVCONF_ACCEPT_RA_PINFO,
156         DEVCONF_ACCEPT_RA_RTR_PREF,
157         DEVCONF_RTR_PROBE_INTERVAL,
158         DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
159         DEVCONF_PROXY_NDP,
160         DEVCONF_OPTIMISTIC_DAD,
161         DEVCONF_ACCEPT_SOURCE_ROUTE,
162         DEVCONF_MC_FORWARDING,
163         DEVCONF_DISABLE_IPV6,
164         DEVCONF_ACCEPT_DAD,
165         DEVCONF_FORCE_TLLAO,
166         DEVCONF_NDISC_NOTIFY,
167         DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
168         DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
169         DEVCONF_SUPPRESS_FRAG_NDISC,
170         DEVCONF_ACCEPT_RA_FROM_LOCAL,
171         DEVCONF_USE_OPTIMISTIC,
172         DEVCONF_ACCEPT_RA_MTU,
173         DEVCONF_STABLE_SECRET,
174         DEVCONF_USE_OIF_ADDRS_ONLY,
175         DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
176         DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
177         DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
178         DEVCONF_DROP_UNSOLICITED_NA,
179         DEVCONF_KEEP_ADDR_ON_DOWN,
180         DEVCONF_RTR_SOLICIT_MAX_INTERVAL,
181         DEVCONF_MAX
182 };
183
184
185 #endif /* _UAPI_IPV6_H */