1# IPv6 Options
2
3# Copyright (c) 2016 Intel Corporation.
4# SPDX-License-Identifier: Apache-2.0
5
6menuconfig NET_IPV6
7	bool "IPv6"
8	default y
9	help
10	  Enable IPv6 support. This should be selected by default as there
11	  is limited set of network bearers provided that support IPv4.
12
13if NET_IPV6
14
15config NET_IF_MAX_IPV6_COUNT
16	int "Max number of IPv6 network interfaces in the system"
17	default NET_VLAN_COUNT if NET_VLAN
18	default 2 if NET_LOOPBACK
19	default 1
20	help
21	  This tells how many network interfaces there will be in the system
22	  that will have IPv6 enabled.
23
24config NET_IF_UNICAST_IPV6_ADDR_COUNT
25	int "Max number of unicast IPv6 addresses per network interface"
26	default 6 if NET_L2_OPENTHREAD
27	default 3 if NET_LOOPBACK
28	default 2
29
30config NET_IF_MCAST_IPV6_ADDR_COUNT
31	int "Max number of multicast IPv6 addresses per network interface"
32	default 8 if NET_L2_OPENTHREAD
33	default 3
34
35config NET_IF_IPV6_PREFIX_COUNT
36	int "Max number of IPv6 prefixes per network interface"
37	default 2
38
39if NET_NATIVE_IPV6
40
41config NET_IPV6_MTU
42	int "Initial IPv6 MTU value"
43	default 1280
44	range 1280 1500
45	help
46	  The value should normally be 1280 which is the minimum IPv6 packet
47	  size that implementations need to support without fragmentation.
48
49config NET_INITIAL_HOP_LIMIT
50	int "Initial IPv6 hop limit value for unicast packets"
51	default 64
52	range 0 $(UINT8_MAX)
53	help
54	  The value should normally be > 0. The device receiving the IPv6
55	  packet will decrement the value and will drop the packet if the hop
56	  limit value is 0. When sending, the packet is dropped before
57	  transmitting to network if hop limit is 0.
58
59config NET_INITIAL_MCAST_HOP_LIMIT
60	int "Initial IPv6 hop limit value for multicast packets"
61	default 1
62	range 0 $(UINT8_MAX)
63	help
64	  The value should normally be > 0. The device receiving the IPv6
65	  packet will decrement the value and will drop the packet if the hop
66	  limit value is 0. When sending, the packet is dropped before
67	  transmitting to network if hop limit is 0.
68	  The default is 1 (same as in IPv4) which means that multicast packets
69	  don't leave the local network unless the application explicitly
70	  requests it.
71
72config NET_IPV6_MAX_NEIGHBORS
73	int "How many IPv6 neighbors are supported"
74	default 8
75	range 1 254
76	help
77	  The value depends on your network needs.
78
79config NET_IPV6_FRAGMENT
80	bool "Support IPv6 fragmentation"
81	help
82	  IPv6 fragmentation is disabled by default. This saves memory and
83	  should not cause issues normally as we support anyway the minimum
84	  length IPv6 packets (1280 bytes). If you enable fragmentation
85	  support, please increase amount of RX data buffers so that larger
86	  than 1280 byte packets can be received.
87
88config NET_IPV6_FRAGMENT_MAX_COUNT
89	int "How many packets to reassemble at a time"
90	range 1 16
91	default 1
92	depends on NET_IPV6_FRAGMENT
93	help
94	  How many fragmented IPv6 packets can be waiting reassembly
95	  simultaneously. Each fragment count might use up to 1280 bytes
96	  of memory so you need to plan this and increase the network buffer
97	  count.
98
99config NET_IPV6_FRAGMENT_MAX_PKT
100	int "How many fragments can be handled to reassemble a packet"
101	default 2
102	depends on NET_IPV6_FRAGMENT
103	help
104	  Incoming fragments are stored in per-packet queue before being
105	  reassembled. This value defines the number of fragments that
106	  can be handled at the same time to reassemble a single packet.
107
108	  We do not have to accept IPv6 packets larger than 1500 bytes
109	  (RFC 2460 ch 5). This means that we should receive everything
110	  within the first two fragments. The first one being 1280 bytes and
111	  the second one 220 bytes.
112
113	  You can increase this value if you expect packets with more
114	  than two fragments.
115
116config NET_IPV6_FRAGMENT_TIMEOUT
117	int "How long to wait the fragments to receive"
118	range 1 60
119	default 5
120	depends on NET_IPV6_FRAGMENT
121	help
122	  How long to wait for IPv6 fragment to arrive before the reassembly
123	  will timeout. RFC 2460 chapter 4.5 tells to wait for 60 seconds but
124	  this might be too long in memory constrained devices. This value
125	  is in seconds.
126
127config NET_IPV6_MLD
128	bool "Multicast Listener Discovery support"
129	default y
130	help
131	  The value depends on your network needs. MLD should normally
132	  be active. Currently we support only MLDv2. See RFC 3810 for
133	  details.
134
135config NET_IPV6_NBR_CACHE
136	bool "Neighbor cache"
137	default y
138	help
139	  The value depends on your network needs. Neighbor cache should
140	  normally be active.
141
142config NET_IPV6_ND
143	bool "Activate neighbor discovery"
144	depends on NET_IPV6_NBR_CACHE
145	select NET_IPV6_MLD if !NET_TEST
146	default y
147	help
148	  The value depends on your network needs. ND should normally
149	  be active.
150
151config NET_IPV6_DAD
152	bool "Activate duplicate address detection"
153	depends on NET_IPV6_NBR_CACHE
154	default y
155	help
156	  The value depends on your network needs. DAD should normally
157	  be active.
158
159config NET_IPV6_RA_RDNSS
160	bool "Support RA RDNSS option"
161	depends on NET_IPV6_ND
162	depends on DNS_RESOLVER
163	default y
164	help
165	  Support Router Advertisement Recursive DNS Server option.
166	  See RFC 6106 for details. The value depends on your network needs.
167
168config NET_IPV6_PE
169	bool "Privacy extension (RFC 8981) support [EXPERIMENTAL]"
170	select MBEDTLS
171	select MBEDTLS_MD
172	select EXPERIMENTAL
173	select NET_MGMT
174	select NET_MGMT_EVENT
175	select NET_MGMT_EVENT_INFO
176	help
177	  This enables IPv6 privacy extension (RFC 8981) support.
178	  The interface identifier is randomized and SLAAC addresses
179	  generated from it will expire. This requires that applications are
180	  prepared to use new IPv6 addresses when old ones will expire.
181	  Note that you should make sure that the value of config option
182	  CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT should be large enough so that
183	  two PE generated IPv6 addresses can be added to the network interface
184	  at the same time.
185
186if NET_IPV6_PE
187
188config NET_IPV6_PE_FILTER_PREFIX_COUNT
189	int "Size of the IPv6 prefix filter list"
190	default 0
191	help
192	  Size of the allow/deny filter list of IPv6 prefixes. User can
193	  set filters at runtime and it is possible to enable or disable
194	  privacy extension support according to this filter list.
195	  By default no filters are enabled.
196
197config NET_IPV6_PE_PREFER_PUBLIC_ADDRESSES
198	bool "Prefer public preferred address over temporary one"
199	help
200	  Prefer public addresses over temporary addresses.
201
202config NET_IPV6_PE_TEMP_VALID_LIFETIME
203	int "Max lifetime for temporary address (in minutes)"
204	default 1440
205	help
206	  No temporary address should ever remain valid for longer than this
207	  value. The value is in minutes. Default value is 1 day (24*60).
208
209config NET_IPV6_PE_TEMP_PREFERRED_LIFETIME
210	int "Max preferred lifetime for temporary address (in minutes)"
211	default 1380
212	help
213	  No temporary address should ever remain preferred for longer than this
214	  value. The value is in minutes. Default value is 23 hours (23*60).
215
216config NET_IPV6_PE_TEMP_IDGEN_RETRIES
217	int "Max amount of failed DAD attempts"
218	default 3
219	help
220	  The node MUST perform duplicate address detection (DAD) on the
221	  generated temporary address. If after TEMP_IDGEN_RETRIES consecutive
222	  attempts no non-unique address was generated then there will be no
223	  attempt to generate temporary addresses for that interface.
224
225endif
226
227config NET_6LO
228	bool "6lowpan IPv6 Compression library"
229	default y if NET_L2_IEEE802154
230	help
231	  6lowpan compression and fragmentation. It is enabled by default
232	  if 802.15.4 is present, since using IPv6 on it requires it.
233
234	  You may disable this option if you wish to implement a non-IP
235	  custom protocol on top of the 802.15.4 MAC (L2) layer.
236
237config NET_6LO_CONTEXT
238	bool "6lowpan context based compression"
239	depends on NET_6LO
240	help
241	  Enables 6lowpan context based compression based on information
242	  received in Router Advertisement (RA) message.
243
244config NET_MAX_6LO_CONTEXTS
245	int "Number of supported 6CO (6lowpan contexts options)"
246	depends on NET_6LO_CONTEXT
247	default 1
248	range 1 16
249	help
250	  6lowpan context options table size. The value depends on your
251	  network and memory consumption. More 6CO options uses more memory.
252
253if NET_6LO
254module = NET_6LO
255module-dep = NET_LOG
256module-str = Log level for 6LoWPAN library
257module-help = Enables 6LoWPAN code to output debug messages.
258source "subsys/net/Kconfig.template.log_config.net"
259endif # NET_6LO
260
261module = NET_IPV6
262module-dep = NET_LOG
263module-str = Log level for core IPv6
264module-help = Enables core IPv6 code to output debug messages.
265source "subsys/net/Kconfig.template.log_config.net"
266
267module = NET_IPV6_ND
268module-dep = NET_LOG
269module-str = Log level for IPv6 Neighbor Discovery
270module-help = Enables IPv6 Neighbor Discovery code to output debug messages.
271source "subsys/net/Kconfig.template.log_config.net"
272
273module = NET_IPV6_PE
274module-dep = NET_LOG
275module-str = Log level for IPv6 Privacy Extension
276module-help = Enables IPv6 Privacy Extension code to output debug messages.
277source "subsys/net/Kconfig.template.log_config.net"
278
279module = NET_ICMPV6
280module-dep = NET_LOG
281module-str = Log level for ICMPv6
282module-help = Enables ICMPv6 code to output debug messages.
283source "subsys/net/Kconfig.template.log_config.net"
284
285module = NET_IPV6_NBR_CACHE
286module-dep = NET_LOG
287module-str = Log level for IPv6 neighbor cache
288module-help = Enables IPv6 Neighbor Cache code to output debug messages.
289source "subsys/net/Kconfig.template.log_config.net"
290
291endif # NET_NATIVE_IPV6
292endif # NET_IPV6
293