zephyr/samples/net/dns_resolve
Anas Nashif ca0ad13a61 net: enable SLIP only on QEMU targets
In many networking tests we had to configure SLIP in the prj.conf
leaving those configurations Qemu specific. This change enables SLIP for
QEMU targets automatically and allows reuse of prj.conf for multiple
boards.

Additionally, the TUN options is removed. This option was not used
anywhere.

To enable self-contained networking tests that do not depend on SLIP, we
introduce the new option NET_TEST which disables TAP and allows testing
in QEMU without the need for a host interface.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2017-07-26 10:57:48 -04:00
..
src linker: move all linker headers to include/linker 2017-06-18 09:24:04 -05:00
Makefile samples: net: DNS resolving sample application 2017-03-24 17:31:42 +02:00
README.rst samples: net: Fix README.rst file documentation 2017-06-09 09:55:37 +03:00
prj_arduino_101.conf samples/dns: Add config file for Arduino-101 and FRDM-K64F 2017-04-28 15:01:09 +03:00
prj_frdm_k64f.conf net: fix wrong Kconfig 2017-07-05 12:43:13 -04:00
prj_qemu_x86.conf net: enable SLIP only on QEMU targets 2017-07-26 10:57:48 -04:00
sample.yaml tests: samples: convert testcase files to yaml 2017-06-21 20:56:53 -04:00

README.rst

.. _dns-resolve-sample:

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

Overview
********

The DNS resolver sample application implements a basic DNS resolver according
to RFC 1035. Supported DNS answers are IPv4/IPv6 addresses and CNAME.

If a CNAME is received, the DNS resolver will create another DNS query.
The number of additional queries is controlled by the
DNS_RESOLVER_ADDITIONAL_QUERIES Kconfig variable.

For more information about DNS configuration variables, see:
:file:`subsys/net/lib/dns/Kconfig`. The DNS resolver API can be found at
:file:`include/net/dns_resolve.h`. The sample code can be found at:
:file:`samples/net/dns_resolve`.

Requirements
************

- :ref:`networking_with_qemu`

- 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



Wiring
******

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)
===========	===================================


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_APP_MY_IPV6_ADDR="2001:db8::1"
	CONFIG_NET_APP_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
    $ ./dnsmasq.sh

('su' or 'sudo' may be required.)

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.

QEMU x86
========

To use QEMU for testing, follow the :ref:`networking_with_qemu` guide.


FRDM K64F
=========

Open a terminal window and type:

.. code-block:: console

    $ make BOARD=frdm_k64f


The FRDM K64F board is detected as a USB storage device. The board
must be mounted (i.e. to /mnt) to 'flash' the binary:

.. code-block:: console

    $ cp outdir/frdm_k64f/zephyr.bin /mnt


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:

.. code-block:: console

	$ make BOARD=arduino_101


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.