net: dns: Initialize DNS resolver if DNS servers are set
If the config file contains DNS server addresses, then configure the DNS resolver to use them. Change-Id: Ie7f2bdcf7ac4bb7ee0ecf7fb5b7bd2df3379cdc3 Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit is contained in:
parent
79cd66f40c
commit
8dc01261ea
4 changed files with 130 additions and 9 deletions
|
@ -223,6 +223,25 @@ int dns_resolve_name(struct dns_resolve_context *ctx,
|
||||||
void *user_data,
|
void *user_data,
|
||||||
int32_t timeout);
|
int32_t timeout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get default DNS context.
|
||||||
|
*
|
||||||
|
* @detail The system level DNS context uses DNS servers that are
|
||||||
|
* defined in project config file. If no DNS servers are defined by the
|
||||||
|
* user, then resolving DNS names using default DNS context will do nothing.
|
||||||
|
* The configuration options are described in subsys/net/lib/dns/Kconfig file.
|
||||||
|
*
|
||||||
|
* @return Default DNS context.
|
||||||
|
*/
|
||||||
|
struct dns_resolve_context *dns_resolve_get_default(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize DNS subsystem.
|
||||||
|
*/
|
||||||
|
void dns_init_resolver(void);
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define dns_init_resolver(...)
|
||||||
#endif /* CONFIG_DNS_RESOLVER */
|
#endif /* CONFIG_DNS_RESOLVER */
|
||||||
|
|
||||||
#endif /* _DNS_RESOLVE_H */
|
#endif /* _DNS_RESOLVE_H */
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <net/arp.h>
|
#include <net/arp.h>
|
||||||
#include <net/nbuf.h>
|
#include <net/nbuf.h>
|
||||||
#include <net/net_core.h>
|
#include <net/net_core.h>
|
||||||
|
#include <net/dns_resolve.h>
|
||||||
|
|
||||||
#include "net_private.h"
|
#include "net_private.h"
|
||||||
#include "net_shell.h"
|
#include "net_shell.h"
|
||||||
|
@ -766,6 +767,8 @@ static inline void l3_init(void)
|
||||||
|
|
||||||
net_route_init();
|
net_route_init();
|
||||||
|
|
||||||
|
dns_init_resolver();
|
||||||
|
|
||||||
NET_DBG("Network L3 init done");
|
NET_DBG("Network L3 init done");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,19 +36,71 @@ config DNS_RESOLVER_ADDITIONAL_QUERIES
|
||||||
|
|
||||||
config DNS_RESOLVER_MAX_SERVERS
|
config DNS_RESOLVER_MAX_SERVERS
|
||||||
int "Number of DNS server addresses"
|
int "Number of DNS server addresses"
|
||||||
default 1
|
|
||||||
help
|
|
||||||
Max number of DNS servers that we can connect to. Normally one
|
|
||||||
DNS server is enough.
|
|
||||||
|
|
||||||
config DNS_NUM_CONCUR_QUERIES
|
|
||||||
int "Number of simultaneous DNS queries per one DNS context"
|
|
||||||
range 1 NET_MAX_CONTEXTS
|
range 1 NET_MAX_CONTEXTS
|
||||||
default 1
|
default 1
|
||||||
help
|
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
|
This defines how many concurrent DNS queries can be generated using
|
||||||
same DNS context. Normally 1 is a good default value. Each query
|
same DNS context. Normally 1 is a good default value.
|
||||||
will use one network context.
|
|
||||||
|
|
||||||
config NET_DEBUG_DNS_RESOLVE
|
config NET_DEBUG_DNS_RESOLVE
|
||||||
bool "Debug DNS resolver"
|
bool "Debug DNS resolver"
|
||||||
|
|
|
@ -69,6 +69,8 @@ NET_BUF_POOL_DEFINE(dns_msg_pool, DNS_RESOLVER_BUF_CTR,
|
||||||
NET_BUF_POOL_DEFINE(dns_qname_pool, DNS_RESOLVER_BUF_CTR, DNS_MAX_NAME_LEN,
|
NET_BUF_POOL_DEFINE(dns_qname_pool, DNS_RESOLVER_BUF_CTR, DNS_MAX_NAME_LEN,
|
||||||
0, NULL);
|
0, NULL);
|
||||||
|
|
||||||
|
static struct dns_resolve_context dns_default_ctx;
|
||||||
|
|
||||||
int dns_resolve_init(struct dns_resolve_context *ctx, const char *servers[])
|
int dns_resolve_init(struct dns_resolve_context *ctx, const char *servers[])
|
||||||
{
|
{
|
||||||
#if defined(CONFIG_NET_IPV6)
|
#if defined(CONFIG_NET_IPV6)
|
||||||
|
@ -858,3 +860,48 @@ int dns_resolve_close(struct dns_resolve_context *ctx)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct dns_resolve_context *dns_resolve_get_default(void)
|
||||||
|
{
|
||||||
|
return &dns_default_ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dns_init_resolver(void)
|
||||||
|
{
|
||||||
|
#if defined(CONFIG_DNS_SERVER_IP_ADDRESSES)
|
||||||
|
static const char *dns_servers[CONFIG_DNS_RESOLVER_MAX_SERVERS + 1];
|
||||||
|
int count = CONFIG_DNS_RESOLVER_MAX_SERVERS;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (count > 5) {
|
||||||
|
count = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (count) {
|
||||||
|
case 5:
|
||||||
|
dns_servers[4] = CONFIG_DNS_SERVER5;
|
||||||
|
/* fallthrough */
|
||||||
|
case 4:
|
||||||
|
dns_servers[3] = CONFIG_DNS_SERVER4;
|
||||||
|
/* fallthrough */
|
||||||
|
case 3:
|
||||||
|
dns_servers[2] = CONFIG_DNS_SERVER3;
|
||||||
|
/* fallthrough */
|
||||||
|
case 2:
|
||||||
|
dns_servers[1] = CONFIG_DNS_SERVER2;
|
||||||
|
/* fallthrough */
|
||||||
|
case 1:
|
||||||
|
dns_servers[0] = CONFIG_DNS_SERVER1;
|
||||||
|
/* fallthrough */
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
dns_servers[CONFIG_DNS_RESOLVER_MAX_SERVERS] = NULL;
|
||||||
|
|
||||||
|
ret = dns_resolve_init(dns_resolve_get_default(), dns_servers);
|
||||||
|
if (ret < 0) {
|
||||||
|
NET_WARN("Cannot initialize DNS resolver (%d)", ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue