# DHCPv4 implementation for Zephyr

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

config NET_DHCPV4
	bool "DHCPv4 client"
	select NET_MGMT
	select NET_MGMT_EVENT
	depends on NET_IPV4 && NET_UDP

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"

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_DHCPV4_OPTION_CALLBACKS
	bool "Option callbacks"
	depends on NET_DHCPV4
	help
	  If set, custom callbacks for arbitrary DHCP options
	  can be added. These can be used to support otherwise
	  DHCP options not used by the rest of the system.

config NET_DHCPV4_ACCEPT_UNICAST
	bool "Accept unicast DHCPv4 traffic"
	depends on NET_DHCPV4
	default y
	help
	  If set, the network stack will accept unicast DHCPv4 responses from
	  servers, before the assigned address is configured on the interface.

endif # NET_DHCPV4

config NET_DHCPV4_SERVER
	bool "DHCPv4 server"
	depends on NET_IPV4 && NET_UDP
	select NET_SOCKETS
	select NET_SOCKETS_SERVICE

if NET_DHCPV4_SERVER

module = NET_DHCPV4_SERVER
module-dep = NET_LOG
module-str = Log level for DHCPv4 server
module-help = Enables DHCPv4 server output debug messages
source "subsys/net/Kconfig.template.log_config.net"

config NET_DHCPV4_SERVER_INSTANCES
	int "Maximum number of DHCPv4 server instances"
	default 1
	help
	  Maximum number of DHCPv4 server instances supported by the system.
	  Each network interface that wants to act as a DHCPv4 server requires
	  a separate instance.

config NET_DHCPV4_SERVER_ADDR_COUNT
	int "Number of IPv4 addresses that can be assigned by the server"
	default 4
	help
	  Maximum number of IPv4 addresses that can be assigned by the DHCPv4
	  server instance. The base IPv4 address in the address pool is provided
	  at runtime, during server initialization. Consecutive addresses in the
	  pool have the lowest address octet incremented.

config NET_DHCPV4_SERVER_ADDR_LEASE_TIME
	int "Lease time for IPv4 addresses assigned by the server (seconds)"
	default 86400
	help
	  Lease time in seconds for IPv4 addresses assigned by the server.
	  The lease time determines when the IPv4 address lease expires if the
	  client does not renew it.

config NET_DHCPV4_SERVER_ICMP_PROBE_TIMEOUT
	int "Timeout for ICMP probes sent by the server (miliseconds)"
	default 1000
	help
	  DHCPv4 server will probe the offered IP address (send ICMP echo
	  request) and wait for the time specific by this config before offering
	  the address. If set to 0, ICMP probing will be disabled.

endif # NET_DHCPV4_SERVER
