# IPv4 Options

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

menuconfig NET_IPV4
	bool "IPv4"
	help
	  Enable IPv4 support. If this is enabled then the device is
	  able to send and receive IPv4 network packets.

if NET_IPV4

config NET_INITIAL_TTL
	int "Initial IPv4 time to live value for unicast packets"
	default 64
	range 0 255
	help
	  The value should normally be > 0. The device receiving the IPv4
	  packet will decrement the value and will drop the packet if the TTL
	  value is 0. When sending, the packet is dropped before transmitting
	  to network if TTL is 0.

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

config NET_IF_MAX_IPV4_COUNT
	int "Max number of IPv4 network interfaces in the system"
	default NET_VLAN_COUNT if NET_VLAN
	default 2 if NET_LOOPBACK
	default 1
	help
	  This tells how many network interfaces there will be in the system
	  that will have IPv4 enabled.

config NET_IF_UNICAST_IPV4_ADDR_COUNT
	int "Max number of unicast IPv4 addresses per network interface"
	default 2 if NET_IPV4_AUTO
	default 2 if NET_LOOPBACK
	default 1

config NET_IF_MCAST_IPV4_ADDR_COUNT
	int "Max number of multicast IPv4 addresses per network interface"
	default 2 if NET_IPV4_IGMP
	default 1

config NET_IF_MCAST_IPV4_SOURCE_COUNT
	int "Max number of IPv4 sources per mcast address to be included or excluded"
	default 1

config NET_ICMPV4_ACCEPT_BROADCAST
	bool "Accept broadcast ICMPv4 echo-request"
	help
	  If set, then respond to ICMPv4 echo-request that is sent to
	  broadcast address.

config NET_IPV4_ACCEPT_ZERO_BROADCAST
	bool "Accept 0.0.0.0 broadcast destination address"
	help
	  If set, then accept UDP packets destined to non-standard
	  0.0.0.0 broadcast address as described in RFC 1122 ch. 3.3.6

config NET_IPV4_IGMP
	bool "Internet Group Management Protocol (IGMPv2) support"
	select NET_IPV4_HDR_OPTIONS
	help
	  The value depends on your network needs. IGMP should normally be
	  enabled if IPv4 multicast support is needed. Currently we support
	  IGMPv2 and earlier versions. This requires IPv4 header support
	  because IP Router Alert option must be sent.
	  See RFC 2236 for details.

config NET_IPV4_IGMPV3
	bool "Internet Group Management Protocol version 3 (IGMPv3) support"
	depends on NET_IPV4_IGMP
	help
	  Use IGMPv3 for managing the multicast groups.

config NET_IPV4_AUTO
	bool "IPv4 autoconfiguration [EXPERIMENTAL]"
	depends on NET_ARP
	select EXPERIMENTAL
	help
	  Enables IPv4 auto IP address configuration (see RFC 3927)

config NET_IPV4_HDR_OPTIONS
	bool "IPv4 Header options support"
	help
	  Enables IPv4 header options support. Current support for only
	  ICMPv4 Echo request. Only RecordRoute and Timestamp are handled.

config NET_IPV4_FRAGMENT
	bool "Support IPv4 fragmentation"
	help
	  IPv4 fragmentation is disabled by default. This limits incoming and
	  outgoing packets to the MTU (1500 bytes for Ethernet). If you enable
	  fragmentation support, please increase amount of RX data buffers so
	  that larger packets can be received.

config NET_IPV4_FRAGMENT_MAX_COUNT
	int "How many packets to reassemble at a time"
	range 1 16
	default 1
	depends on NET_IPV4_FRAGMENT
	help
	  How many fragmented IPv4 packets can be waiting reassembly
	  simultaneously. You may need to increase the network buffer
	  count.

config NET_IPV4_FRAGMENT_MAX_PKT
	int "How many fragments can be handled to reassemble a packet"
	default 2
	depends on NET_IPV4_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.

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

config NET_IPV4_FRAGMENT_TIMEOUT
	int "How long to wait for fragments to be received"
	range 1 60
	default 5
	depends on NET_IPV4_FRAGMENT
	help
	  How long to wait for IPv4 fragment to arrive before the reassembly
	  will timeout. This value is in seconds.

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

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

if NET_IPV4_AUTO
module = NET_IPV4_AUTO
module-dep = NET_LOG
module-str = Log level for IPv4 autoconf client
module-help = Enable debug diagnostic from IPv4 autoconf client.
source "subsys/net/Kconfig.template.log_config.net"
endif # NET_IPV4_AUTO

endif # NET_IPV4
