RPL provides packet routing for an LLN, and clearly is worth monitoring by a network operator. This page documents a study into how RPL is implemented in an OpenWSN-based LLN, particularly to identify useful performance indicators.
As a practical matter, our study begins simply by monitoring the RPL packets in the network. RPL constructs its DODAG via DIO ICMP packets.
DIOs at the root
OpenWSN's OpenVisualizer (OV) provides the DAG root logic. We configure OV to output ZEP packets for monitoring with Wireshark. Since we use a BeagleBone to host OpenVisualizer, we pipe the packets to a workstation running Wireshark. After starting OV, execute the commands below on the workstation, which are based on the instructions in the Wireshark Wiki. The only change is to specify use of OV's TUN interface for packet capture. Of course, ssh requires the appropriate host address for the BeagleBone Ethernet interface:
$ mkfifo /tmp/sharkfin $ wireshark -k -i /tmp/sharkfin & $ ssh root@beaglebone "dumpcap -P -w - -i tun0 -f 'not tcp port 22'" > /tmp/sharkfin
When only the DAG root node is active, we see the DIO packets advertising its DODAG sent every ten seconds. We make a few notes on packet contents below.
|IP destination||Uses broadcast address (ff:...:ff), but we expect all-rpl-nodes address|
|MOP||Uses 111(bin), but we expect 001(bin) for non-storing mode|
|DAG rank||Very valuable; must collect this value|
|ICMP checksum||Not correct|
Next we power up a second mote, which joins the DODAG as a child of the root. At the DAG root we now see DAO packets; however, we do not see DIOs from the child mote. According to OV, the child mote has a maximum DAG rank of 65535 (0xffff), so we do not expect it to send DIOs. However, we modified our 'rss' monitoring app on the child mote to include the current DAG rank. The 'rss' messages show the child's DAG rank is in the low 500's. It turns out that the DAG root node tosses the received DIOs because it also is in bridge mode when attached to OV.