# 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 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 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.


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
