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