# IPv6 Options

# Copyright (c) 2016 Intel Corporation.
# Copyright (c) 2025 Aerlync Labs Inc.
# SPDX-License-Identifier: Apache-2.0

menuconfig NET_IPV6
	bool "IPv6"
	default y
	help
	  Enable IPv6 support. This should be selected by default as there
	  is limited set of network bearers provided that support IPv4.

if NET_IPV6

config NET_IF_MAX_IPV6_COUNT
	int "Max number of IPv6 network interfaces in the system"
	default NET_VLAN_COUNT if NET_VLAN && NET_VLAN_COUNT > 0
	default 2 if NRF70_ENABLE_DUAL_VIF
	default 2 if NET_LOOPBACK
	default 1
	help
	  This tells how many network interfaces there will be in the system
	  that will have IPv6 enabled.

config NET_IF_UNICAST_IPV6_ADDR_COUNT
	int "Max number of unicast IPv6 addresses per network interface"
	default 6 if NET_L2_OPENTHREAD
	default 3 if NET_LOOPBACK
	default 2

config NET_IF_MCAST_IPV6_ADDR_COUNT
	int "Max number of multicast IPv6 addresses per network interface"
	default 8 if NET_L2_OPENTHREAD
	default 3

config NET_IF_IPV6_PREFIX_COUNT
	int "Max number of IPv6 prefixes per network interface"
	default 2

if NET_NATIVE_IPV6

config NET_IPV6_MTU
	int "Initial IPv6 MTU value"
	default 1280
	range 1280 1500
	help
	  The value should normally be 1280 which is the minimum IPv6 packet
	  size that implementations need to support without fragmentation.

config NET_IPV6_PMTU
	bool "IPv6 Path MTU Discovery"
	help
	  Enables IPv6 Path MTU Discovery (see RFC 8201)

config NET_IPV6_PMTU_DESTINATION_CACHE_ENTRIES
	int "Number of IPv6 PMTU destination cache entries"
	default 3
	depends on NET_IPV6_PMTU
	help
	  How many PMTU entries we can track for each destination address.

config NET_INITIAL_HOP_LIMIT
	int "Initial IPv6 hop limit value for unicast packets"
	default 64
	range 0 $(UINT8_MAX)
	help
	  The value should normally be > 0. The device receiving the IPv6
	  packet will decrement the value and will drop the packet if the hop
	  limit value is 0. When sending, the packet is dropped before
	  transmitting to network if hop limit is 0.

config NET_INITIAL_MCAST_HOP_LIMIT
	int "Initial IPv6 hop limit value for multicast packets"
	default 1
	range 0 $(UINT8_MAX)
	help
	  The value should normally be > 0. The device receiving the IPv6
	  packet will decrement the value and will drop the packet if the hop
	  limit value is 0. When sending, the packet is dropped before
	  transmitting to network if hop limit is 0.
	  The default is 1 (same as in IPv4) which means that multicast packets
	  don't leave the local network unless the application explicitly
	  requests it.

config NET_INITIAL_IPV6_MCAST_LOOP
	bool "Control whether the socket sees multicast packets sent by itself"
	default y
	help
	  Assign initial value to IPV6_MULTICAST_LOOP in socket options,
	  if not set by the user using setsockopt().

config NET_IPV6_MAX_NEIGHBORS
	int "How many IPv6 neighbors are supported"
	default 8
	range 1 254
	help
	  The value depends on your network needs.

config NET_IPV6_FRAGMENT
	bool "Support IPv6 fragmentation"
	help
	  IPv6 fragmentation is disabled by default. This saves memory and
	  should not cause issues normally as we support anyway the minimum
	  length IPv6 packets (1280 bytes). If you enable fragmentation
	  support, please increase amount of RX data buffers so that larger
	  than 1280 byte packets can be received.

config NET_IPV6_FRAGMENT_MAX_COUNT
	int "How many packets to reassemble at a time"
	range 1 16
	default 1
	depends on NET_IPV6_FRAGMENT
	help
	  How many fragmented IPv6 packets can be waiting reassembly
	  simultaneously. Each fragment count might use up to 1280 bytes
	  of memory so you need to plan this and increase the network buffer
	  count.

config NET_IPV6_FRAGMENT_MAX_PKT
	int "How many fragments can be handled to reassemble a packet"
	default 2
	depends on NET_IPV6_FRAGMENT
	help
	  Incoming fragments are stored in per-packet queue before being
	  reassembled. This value defines the number of fragments that
	  can be handled at the same time to reassemble a single packet.

	  We do not have to accept IPv6 packets larger than 1500 bytes
	  (RFC 2460 ch 5). This means that we should receive everything
	  within the first two fragments. The first one being 1280 bytes and
	  the second one 220 bytes.

	  You can increase this value if you expect packets with more
	  than two fragments.

config NET_IPV6_FRAGMENT_TIMEOUT
	int "How long to wait the fragments to receive"
	range 1 60
	default 5
	depends on NET_IPV6_FRAGMENT
	help
	  How long to wait for IPv6 fragment to arrive before the reassembly
	  will timeout. RFC 2460 chapter 4.5 tells to wait for 60 seconds but
	  this might be too long in memory constrained devices. This value
	  is in seconds.

config NET_IPV6_MLD
	bool "Multicast Listener Discovery support"
	default y
	help
	  The value depends on your network needs. MLD should normally
	  be active. Currently we support only MLDv2. See RFC 3810 for
	  details.

config NET_IPV6_NBR_CACHE
	bool "Neighbor cache"
	default y
	help
	  The value depends on your network needs. Neighbor cache should
	  normally be active.

config NET_IPV6_ND
	bool "Activate neighbor discovery"
	depends on NET_IPV6_NBR_CACHE
	select NET_IPV6_MLD if !NET_TEST
	default y
	help
	  The value depends on your network needs. ND should normally
	  be active.

config NET_IPV6_DAD
	bool "Activate duplicate address detection"
	depends on NET_IPV6_NBR_CACHE
	default y
	help
	  The value depends on your network needs. DAD should normally
	  be active.

config NET_IPV6_NS_TIMEOUT
	int "Timeout of Neighbor Solicitation messaging (in ms)"
	depends on NET_IPV6_NBR_CACHE
	default 1000
	help
	  The timeout in milliseconds between attempts to send a Neighbor
	  Solicitation message.

config NET_IPV6_RS_TIMEOUT
	int "Timeout of Router Solicitation messaging"
	depends on NET_IPV6_ND
	range 1 30
	default 1
	help
	  The timeout in seconds between attempts to send a Router
	  Solicitation message at startup.

config NET_IPV6_RA_RDNSS
	bool "Support RA RDNSS option"
	depends on NET_IPV6_ND
	depends on DNS_RESOLVER
	default y
	help
	  Support Router Advertisement Recursive DNS Server option.
	  See RFC 6106 for details. The value depends on your network needs.

choice NET_IPV6_IID_GENERATION
	prompt "IPv6 Interface Identifier (IID) generation"
	default NET_IPV6_IID_EUI_64
	help
	  Determines how the IPv6 Interface Identifier (IID) is generated.
	  By default the legacy format using EUI-64 (MAC address) specified in
	  RFC 4291 chapter 2.5.1 is used.
	  User can also choose to use stable IID specified in RFC 7217 in which
	  case a randomized IID is generated for each network interface.
	  The stable IID enhances privacy by having a different IID for each
	  network interface.

config NET_IPV6_IID_EUI_64
	bool "Generate IID using EUI-64"
	help
	  Generate IID from modified EUI-64 a.k.a MAC address. This is the
	  legacy way described in RFC 4291 chapter 2.5.1

config NET_IPV6_IID_STABLE
	bool "Generate stable IID [EXPERIMENTAL]"
	select MBEDTLS
	select MBEDTLS_MD
	select EXPERIMENTAL
	depends on !NET_6LO
	help
	  Generate a stable IID described in RFC 7217. This option specifies a
	  method for generating IPv6 Interface Identifiers to be used with
	  IPv6 Stateless Address Autoconfiguration (SLAAC), such that an IPv6
	  address configured using this method is stable within each subnet,
	  but the corresponding Interface Identifier changes when the host
	  moves from one network to another. This method is meant to be an
	  alternative to generating Interface Identifiers based on hardware
	  addresses (e.g., IEEE LAN Media Access Control (MAC) addresses),
	  such that the benefits of stable addresses can be achieved without
	  sacrificing the security and privacy of users.
	  Currently the stable IID generation is disabled for 6lo networks
	  because of header compression.

endchoice

config NET_IPV6_PE
	bool "Privacy extension (RFC 8981) support [EXPERIMENTAL]"
	select MBEDTLS
	select MBEDTLS_MD
	select EXPERIMENTAL
	select NET_MGMT
	select NET_MGMT_EVENT
	select NET_MGMT_EVENT_INFO
	help
	  This enables IPv6 privacy extension (RFC 8981) support.
	  The interface identifier is randomized and SLAAC addresses
	  generated from it will expire. This requires that applications are
	  prepared to use new IPv6 addresses when old ones will expire.
	  Note that you should make sure that the value of config option
	  CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT should be large enough so that
	  two PE generated IPv6 addresses can be added to the network interface
	  at the same time.

if NET_IPV6_PE

config NET_IPV6_PE_FILTER_PREFIX_COUNT
	int "Size of the IPv6 prefix filter list"
	default 0
	help
	  Size of the allow/deny filter list of IPv6 prefixes. User can
	  set filters at runtime and it is possible to enable or disable
	  privacy extension support according to this filter list.
	  By default no filters are enabled.

config NET_IPV6_PE_PREFER_PUBLIC_ADDRESSES
	bool "Prefer public preferred address over temporary one"
	help
	  Prefer public addresses over temporary addresses.

config NET_IPV6_PE_TEMP_VALID_LIFETIME
	int "Max lifetime for temporary address (in minutes)"
	default 1440
	help
	  No temporary address should ever remain valid for longer than this
	  value. The value is in minutes. Default value is 1 day (24*60).

config NET_IPV6_PE_TEMP_PREFERRED_LIFETIME
	int "Max preferred lifetime for temporary address (in minutes)"
	default 1380
	help
	  No temporary address should ever remain preferred for longer than this
	  value. The value is in minutes. Default value is 23 hours (23*60).

config NET_IPV6_PE_TEMP_IDGEN_RETRIES
	int "Max amount of failed DAD attempts"
	default 3
	help
	  The node MUST perform duplicate address detection (DAD) on the
	  generated temporary address. If after TEMP_IDGEN_RETRIES consecutive
	  attempts no non-unique address was generated then there will be no
	  attempt to generate temporary addresses for that interface.

endif

config NET_6LO
	bool "6lowpan IPv6 Compression library"
	default y if NET_L2_IEEE802154
	help
	  6lowpan compression and fragmentation. It is enabled by default
	  if 802.15.4 is present, since using IPv6 on it requires it.

	  You may disable this option if you wish to implement a non-IP
	  custom protocol on top of the 802.15.4 MAC (L2) layer.

config NET_6LO_CONTEXT
	bool "6lowpan context based compression"
	depends on NET_6LO
	help
	  Enables 6lowpan context based compression based on information
	  received in Router Advertisement (RA) message.

config NET_MAX_6LO_CONTEXTS
	int "Number of supported 6CO (6lowpan contexts options)"
	depends on NET_6LO_CONTEXT
	default 1
	range 1 16
	help
	  6lowpan context options table size. The value depends on your
	  network and memory consumption. More 6CO options uses more memory.

if NET_6LO
module = NET_6LO
module-dep = NET_LOG
module-str = Log level for 6LoWPAN library
module-help = Enables 6LoWPAN code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"
endif # NET_6LO

module = NET_IPV6
module-dep = NET_LOG
module-str = Log level for core IPv6
module-help = Enables core IPv6 code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

module = NET_IPV6_ND
module-dep = NET_LOG
module-str = Log level for IPv6 Neighbor Discovery
module-help = Enables IPv6 Neighbor Discovery code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

module = NET_IPV6_PE
module-dep = NET_LOG
module-str = Log level for IPv6 Privacy Extension
module-help = Enables IPv6 Privacy Extension code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

module = NET_ICMPV6
module-dep = NET_LOG
module-str = Log level for ICMPv6
module-help = Enables ICMPv6 code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

module = NET_IPV6_NBR_CACHE
module-dep = NET_LOG
module-str = Log level for IPv6 neighbor cache
module-help = Enables IPv6 Neighbor Cache code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

endif # NET_NATIVE_IPV6
endif # NET_IPV6
