Description of various IP stack test applications
=================================================

echo_server
-----------

The echo server test implements a network server that listens
UDP sockets. If that socket receives data, the server reverses
the data and sends it back.

The echo client can be running in the host system in which
case you need to use SLIP to connect to qemu. This usage scenario
is described in net/ip/tools/README file. This is the default
if you type "make qemu" in echo_server test application directory.
The network IP stack hooks right under IP stack (network level)
and sends the IP packet to host using SLIP. The layer 2 is the
SLIP layer in this case, no radio layer is simulated or used.

The echo server qemu instance can also be running against echo
client that is running in another qemu. For this you need two
terminal windows. In terminal 1 go to echo_server directory
and type "make server". This will start the echo server and setup
qemu pipes in suitable way and it will also start monitor application
that will store the transferred network traffic into pcap file
for later analysis. Then in terminal 2 go to echo_client directory and
type "make client". This will start the echo client that will
start to send data to the server and verify that it has received
the data back correctly. In the two qemu case we are simulating
the whole radio network meaning that the saved pcap file will
contain 802.15.4 network packets.


echo_client
-----------

The echo client test implements a network client that will
send UDP data to the echo server. The client verifies that
it has received data to the sent message and that the data
is correct.

The echo server can be running in the host system in which case
you need to use SLIP to connect to qemu. This usage scenario
is described in net/ip/tools/README file. This is the default
if you type "make qemu" in echo_client test application directory.
The network IP stack hooks right under IP stack (network level)
and sends the IP packet to host using SLIP. The layer 2 is the
SLIP layer in this case, no radio layer is simulated or used.

The echo client qemu instance can also be running against echo
server that is running in another qemu. This test scenario is
described in echo_server chapter above.


zoap_server
-----------

The Zoap server application implements a trivial CoAP server
which exposes a single resource "a/light", that only provides the
GET method.

It can be run similar to the echo_server sample: using two terminals,
(1) for zoap_server, run 'make server' in its directory, (2) for
zoap_client, run 'make client' in the zoap_client test directory.


zoap_client
-----------

The Zoap client application does a single request against a 'a/light'
resource, which has the first response lost (so retransmissions are
basically verified).

Please refer to the section above about how to run these applications
together.
