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