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

config DNS_RESOLVER
	bool
	prompt "DNS resolver"
	default n
	help
	  This option enables the DNS client side support for Zephyr

if DNS_RESOLVER

config MDNS_RESOLVER
	bool "Enable mDNS support"
	default n
	help
	  This option enables multicast DNS client side support.
	  See RFC 6762 for details.

config DNS_RESOLVER_ADDITIONAL_BUF_CTR
	int
	prompt "Additional DNS buffers"
	default 0
	help
	  Number of additional buffers available for the DNS resolver.
	  The DNS resolver requires at least one buffer. This option
	  enables additional buffers required for multiple concurrent
	  DNS connections.

config DNS_RESOLVER_ADDITIONAL_QUERIES
	int
	prompt "Additional DNS queries"
	range 0 2
	default 1
	help
	  Number of additional DNS queries that the DNS resolver may
	  generate when the RR ANSWER only contains CNAME(s).
	  The maximum value of this variable is constrained to avoid
	  'alias loops'.

config DNS_RESOLVER_MAX_SERVERS
	int "Number of DNS server addresses"
	range 1 NET_MAX_CONTEXTS
	default 1
	help
	  Max number of DNS servers that we can connect to. Normally one
	  DNS server is enough. Each connection to DNS server will use one
	  network context.

menuconfig DNS_SERVER_IP_ADDRESSES
	bool "Set DNS server IP addresses"
	default n
	help
	  Allow DNS IP addresses to be set in config file for
	  networking applications.

if DNS_SERVER_IP_ADDRESSES

config DNS_SERVER1
	string "DNS server 1"
	default ""
	help
	  DNS server IP address 1. The address can be either IPv4 or IPv6
	  address. An optional port number can be given.
	  Following syntax is supported:
	  192.0.2.1
	  192.0.2.1:5353
	  2001:db8::1
	  [2001:db8::1]:5353
	  It is not mandatory to use this Kconfig option at all.
	  The one calling dns_resolve_init() can use this option or not
	  to populate the server list. If the DNS server addresses are
	  set here, then we automatically create default DNS context
	  for the user.

config DNS_SERVER2
	string "DNS server 2"
	default ""
	help
	  See help in "DNS server 1" option.

config DNS_SERVER3
	string "DNS server 3"
	default ""
	help
	  See help in "DNS server 1" option.

config DNS_SERVER4
	string "DNS server 4"
	default ""
	help
	  See help in "DNS server 1" option.

config DNS_SERVER5
	string "DNS server 5"
	default ""
	help
	  See help in "DNS server 1" option.

endif # DNS_SERVER_IP_ADDRESSES

config DNS_NUM_CONCUR_QUERIES
	int "Number of simultaneous DNS queries per one DNS context"
	default 1
	help
	  This defines how many concurrent DNS queries can be generated using
	  same DNS context. Normally 1 is a good default value.

config NET_DEBUG_DNS_RESOLVE
	bool "Debug DNS resolver"
	default n
	default y if NET_LOG_GLOBAL
	help
	  Enables DNS resolver code to output debug messages

endif # DNS_RESOLVER

config MDNS_RESPONDER
	bool "mDNS responder"
	default n
	select NET_IPV6_MLD if NET_IPV6
	depends on NET_HOSTNAME_ENABLE
	help
	  This option enables the mDNS responder support for Zephyr.
	  It will listen well-known address ff02::fb and 224.0.0.251.
	  Currently this only returns IP address information.
	  You must set CONFIG_NET_HOSTNAME to some meaningful value and
	  then mDNS will start to respond to <hostname>.local mDNS queries.
	  See RFC 6762 for more details about mDNS.

if MDNS_RESPONDER

config MDNS_RESPONDER_TTL
	int "Time-to-Live of returned DNS name"
	default 600
	help
	  DNS answers will use the TTL (in seconds).

config MDNS_RESPONDER_INIT_PRIO
	int "Startup priority for the mDNS responder init"
	default 96
	help
	  Note that if NET_APP_AUTO_INIT is enabled, then this value
	  should be bigger than its value.

config NET_DEBUG_MDNS_RESPONDER
	bool "Debug mDNS responder"
	default n
	default y if NET_LOG_GLOBAL
	help
	  Enables mDNS responder code to output debug messages

config MDNS_RESOLVER_ADDITIONAL_BUF_CTR
	int
	prompt "Additional DNS buffers"
	default 0
	help
	  Number of additional buffers available for the mDNS responder.

endif # MDNS_RESPONDER
