zephyr/samples/net/dns_resolve
Anas Nashif 3ae52624ff license: cleanup: add SPDX Apache-2.0 license identifier
Update the files which contain no license information with the
'Apache-2.0' SPDX license identifier.  Many source files in the tree are
missing licensing information, which makes it harder for compliance
tools to determine the correct license.

By default all files without license information are under the default
license of Zephyr, which is Apache version 2.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 08:45:22 -04:00
..
src
CMakeLists.txt license: cleanup: add SPDX Apache-2.0 license identifier 2019-04-07 08:45:22 -04:00
README.rst
prj.conf
sample.yaml samples: add test identifier 2019-03-29 17:44:11 -04:00

README.rst

.. _dns-resolve-sample:

DNS Resolve Application
#######################

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 the Arduino 101 board, 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
:ref:`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:: console

	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. Sample dnsmasq start
script can be downloaded from the zephyrproject-rtos/net-tools project area:
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:: console

    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


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:: console

    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 :ref:`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.

Arduino 101
===========

Open a terminal window and type:

.. zephyr-app-commands::
   :zephyr-app: samples/net/dns_resolve
   :board: arduino_101
   :goals: build
   :compact:

To load the binary in the development board follow the steps
in :ref:`arduino_101`.

Open a terminal window and type:

.. code-block:: console

    $ screen /dev/ttyUSB0 115200


Use 'dmesg' to find the right USB device.

Once the binary is loaded into the Arduino 101 board, press the RESET button.

The ENC28J60 module is an Ethernet device with SPI interface.
The following pins must be connected from the ENC28J60 device to the
Arduino 101 board:

===========    ===================================
Arduino 101    ENC28J60 (pin numbers on the board)
===========    ===================================
D13            SCK  (1)
D12            SO   (3)
D11            SI   (2)
D10            CS   (7)
D04            INT  (5)
3.3V           VCC  (10)
GDN            GND  (9)
===========    ===================================