197 lines
4.7 KiB
ReStructuredText
197 lines
4.7 KiB
ReStructuredText
.. _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)
|
|
=========== ===================================
|