164 lines
4.0 KiB
ReStructuredText
164 lines
4.0 KiB
ReStructuredText
.. zephyr:code-sample:: dns-resolve
|
|
:name: DNS resolve
|
|
:relevant-api: dns_resolve net_mgmt
|
|
|
|
Resolve an IP address for a given hostname.
|
|
|
|
Overview
|
|
********
|
|
|
|
This application will setup IP address for the device, and then
|
|
try to resolve various hostnames according to how the user has
|
|
configured the system.
|
|
|
|
- If IPv4 is enabled, then A record for ``www.zephyrproject.org`` is
|
|
resolved.
|
|
- If IPv6 is enabled, then AAAA record for ``www.zephyrproject.org`` is
|
|
resolved.
|
|
- If mDNS is enabled, then ``zephyr.local`` name is resolved.
|
|
|
|
Requirements
|
|
************
|
|
|
|
- :ref:`networking_with_host`
|
|
|
|
- screen terminal emulator or equivalent.
|
|
|
|
- For most boards without ethernet, the ENC28J60 Ethernet module is required.
|
|
|
|
- dnsmasq application. The dnsmasq version used in this sample is:
|
|
|
|
.. code-block:: console
|
|
|
|
dnsmasq -v
|
|
Dnsmasq version 2.76 Copyright (c) 2000-2016 Simon Kelley
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
Network Configuration
|
|
=====================
|
|
|
|
Open the project configuration file for your platform, for example:
|
|
:file:`prj_frdm_k64f.conf` is the configuration file for the
|
|
:zephyr:board:`frdm_k64f` board.
|
|
|
|
In this sample application, both static or DHCPv4 IP addresses are supported.
|
|
Static IP addresses are specified in the project configuration file,
|
|
for example:
|
|
|
|
.. code-block:: cfg
|
|
|
|
CONFIG_NET_CONFIG_MY_IPV6_ADDR="2001:db8::1"
|
|
CONFIG_NET_CONFIG_PEER_IPV6_ADDR="2001:db8::2"
|
|
|
|
are the IPv6 addresses for the DNS client running Zephyr and the DNS server,
|
|
respectively.
|
|
|
|
DNS server
|
|
==========
|
|
|
|
The dnsmasq tool may be used for testing purposes. On a Zephyr project default
|
|
installation, the sample dnsmasq start script can be found in the `net-tools`_
|
|
project or downloaded from https://github.com/zephyrproject-rtos/net-tools.
|
|
|
|
Open a terminal window and type:
|
|
|
|
.. code-block:: console
|
|
|
|
$ cd net-tools
|
|
$ sudo ./dnsmasq.sh
|
|
|
|
The default project configurations settings for this sample uses the public
|
|
Google DNS servers. In order to use the local dnsmasq server, please edit
|
|
the appropriate 'prj.conf' file and update the DNS server addresses. For
|
|
instance, if using the usual IP addresses assigned to testing, update them
|
|
to the following values:
|
|
|
|
.. code-block:: cfg
|
|
|
|
CONFIG_DNS_SERVER1="192.0.2.2:5353"
|
|
CONFIG_DNS_SERVER2="[2001:db8::2]:5353"
|
|
|
|
.. note::
|
|
DNS uses port 53 by default, but the dnsmasq.conf file provided by
|
|
net-tools uses port 5353 to allow executing the daemon without
|
|
superuser privileges.
|
|
|
|
If dnsmasq fails to start with an error like this:
|
|
|
|
.. code-block:: console
|
|
|
|
dnsmasq: failed to create listening socket for port 5353: Address already in use
|
|
|
|
Open a terminal window and type:
|
|
|
|
.. code-block:: console
|
|
|
|
$ killall -s KILL dnsmasq
|
|
|
|
Try to launch the dnsmasq application again.
|
|
|
|
For testing mDNS, use Avahi script in net-tools project:
|
|
|
|
.. code-block:: console
|
|
|
|
$ cd net-tools
|
|
$ ./avahi-daemon.sh
|
|
|
|
.. _`net-tools`: https://github.com/zephyrproject-rtos/net-tools
|
|
|
|
LLMNR Responder
|
|
===============
|
|
|
|
If you want Zephyr to respond to a LLMNR DNS request that Windows host is
|
|
sending, then following config options could be set:
|
|
|
|
.. code-block:: cfg
|
|
|
|
CONFIG_NET_HOSTNAME_ENABLE=y
|
|
CONFIG_NET_HOSTNAME="zephyr-device"
|
|
CONFIG_DNS_RESOLVER=y
|
|
CONFIG_LLMNR_RESPONDER=y
|
|
|
|
A Zephyr host needs a hostname assigned to it so that it can respond to a DNS
|
|
query. Note that the hostname should not have any dots in it.
|
|
|
|
|
|
QEMU x86
|
|
========
|
|
|
|
To use QEMU for testing, follow the :ref:`networking_with_qemu` guide.
|
|
|
|
|
|
FRDM K64F
|
|
=========
|
|
|
|
Open a terminal window and type:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/net/dns_resolve
|
|
:board: frdm_k64f
|
|
:goals: build flash
|
|
:compact:
|
|
|
|
See :zephyr:board:`Freedom-K64F board documentation <frdm_k64f>` for more information
|
|
about this board.
|
|
|
|
Open a terminal window and type:
|
|
|
|
.. code-block:: console
|
|
|
|
$ screen /dev/ttyACM0 115200
|
|
|
|
|
|
Use 'dmesg' to find the right USB device.
|
|
|
|
Once the binary is loaded into the FRDM board, press the RESET button.
|
|
|
|
Wi-Fi
|
|
=====
|
|
|
|
The IPv4 Wi-Fi support can be enabled in the sample with
|
|
:ref:`Wi-Fi snippet <snippet-wifi-ipv4>`.
|