# 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 time to live for a connection"
	default 64
	help
	  The value should be > 0

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_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 (IGMP) 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_DHCPV4
	bool "DHCPv4 client"
	select NET_MGMT
	select NET_MGMT_EVENT
	depends on NET_UDP

config NET_DHCPV4_INITIAL_DELAY_MAX
	int "Maximum time out for initial discover request"
	depends on NET_DHCPV4
	default 10
	range 2 10
	help
	  As per RFC2131 4.1.1, we wait a random period between
	  1 and 10 seconds before sending the initial discover.

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_DHCPV4
module = NET_DHCPV4
module-dep = NET_LOG
module-str = Log level for DHCPv4 client
module-help = Enable debug diagnostic from DHCPV4 client.
source "subsys/net/Kconfig.template.log_config.net"
endif # NET_DHCPV4

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
