RIOT networking example for M3 nodes

 

Difficulty: Medium

 Duration: 30 minutes

Prerequisites: Configure SSH access / Get and compile firmware for M3 nodes / Submit an experiment with M3 nodes using the web portal

Description: The aim of this tutorial is to run an experiment on the M3 nodes using the gnrc_networking example provided in the RIOT repository. It illustrates a ping echo request and echo reply between two M3 nodes. 

  1. Connect to the SSH frontend of Saclay :
    my_computer:~$ ssh <login>@saclay.iot-lab.info
  2. Compile the firmware
    <login>@<site>:~$ source /opt/riot.source
    <login>@<site>:~$ cd iot-lab/parts/RIOT/examples/gnrc_networking/
    <login>@<site>:~$ BOARD=iotlab-m3 make all
  3. Retrieve the generated binary firmware file on your computer (execute this scp command on your computer!)
    my_computer:$ scp <login>@saclay.iot-lab.info:iot-lab/parts/RIOT/examples/gnrc_networking/bin/iotlab-m3/gnrc_networking.elf gnrc_networking.elf
  4. Log into the Web portal with your account credentials
  5. Submit a new experiment:
    • Set an experiment name (no spaces nor funny chars in the experiment name)
    • Duration: 20 minutes and starting “As soon as possible
    • Choose nodes with Architecture m3 (at86rf231) / Site = saclay / Number = 2 and click “Add to experiment”
    • Add your binary firmware gnrc_networking.elf with nodes selected
  6. Wait experiment state Running in dashboard list. After click on experiment details and visualize which nodes you are booked and verify that you have Success in the deployment result
  7. In our example we have two nodes m3-9 and m3-14. You can interact with a node on the SSH frontend and type help to explore the available commands
    <login>@<site>:~$ nc m3-9 20000
    > help
    Command              Description
    ---------------------------------------
    udp                  send data over UDP and listen on UDP ports
    reboot               Reboot the node
    ps                   Prints information about running threads.
    ping6                Ping via ICMPv6
    random_init          initializes the PRNG
    random_get           returns 32 bit of pseudo randomness
    ifconfig             Configure network interfaces
    txtsnd               send raw data
    fibroute             Manipulate the FIB (info: 'fibroute [add|del]')
    ncache               manage neighbor cache by hand
    routers              IPv6 default router list
    rpl                  rpl configuration tool [help|init|rm|root|show]
  8. For instance, on a node, type ifconfig to get all configured addresses of the device
    <login>@<site>:~$ nc m3-9 20000
    > ifconfig
    Iface  7   HWaddr: 1d:12  Channel: 26  NID: 0x23  TX-Power: 0dBm  State: IDLE CSMA Retries: 4
               Long HWaddr: 36:32:48:33:46:d5:9d:12
               AUTOACK  CSMA  MTU:1280  HL:64  6LO  RTR  IPHC
               Source address length: 8
               Link type: wireless
               inet6 addr: ff02::1/128  scope: local [multicast]
               inet6 addr: fe80::3432:4833:46d5:9d12/64  scope: local
               inet6 addr: ff02::1:ffd5:9d12/128  scope: local [multicast]
  9. This node has the link-local IPv6 address fe80::3432:4833:46d5:9d12.Running the same command for node m3-14 reveals a link-local IPv6 address of fe80::3432:4833:46d9:962a.
  10. Now, we can perform pings between the two nodes. On one node, use the ping6 command to initiate the ping echo requests.
    <login>@<site>:~$ nc m3-9 20000
    > ping6 fe80::3432:4833:46d9:962a
    12 bytes from fe80::3432:4833:46d9:962a: id=84 seq=1 hop limit=64 time = 7.109 ms
    12 bytes from fe80::3432:4833:46d9:962a: id=84 seq=2 hop limit=64 time = 4.595 ms
    12 bytes from fe80::3432:4833:46d9:962a: id=84 seq=3 hop limit=64 time = 5.215 ms
    --- fe80::3432:4833:46d9:962a ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2.0622373 s
    rtt min/avg/max = 4.595/5.639/7.109 ms