Whitefield provides a simulation environment for wireless sensor network by combining realistic RF simulation with the native mode use of popular IoT stacks/OSes such as Contiki/RIOT/OpenThread. Thus one can use existing stack implementation as is and test it on top of realistic RF simulation.
Whitefield uses PHY/MAC layer provided by popular simulators (such as NS3) and loosely couples it with the constrained network stacks supported by Contiki/RIOT, thus providing the best of both worlds by simply glueing things. It provides common visualization and OAM tools (logs, pcap, shell) which simplifies monitoring and troubleshooting.
Typical use of Whitefield:
- Large scale testing of sensor networks
- Large scale interop testing between multitudes of stacks in same wireless environment. It can scale to thousands of nodes on general purpose server (even laptops).
- Validate RF phy/mac simulation against each other. For e.g. compare results in NS3 vs Castalia
- Regression tests using IdealAir(future).
Terminology:
Airline: Airline refers to PHY/MAC/RDC implementation provided by thirdparty simulators such as NS3/Castalia-Omnet++. Provides configuration management and OAM tools which works across any thirdpaty simulators. It interfaces with Commline to send/recv messages to/from Stackline.
Commline: Message queue and corresponding interfaces which decouples Airline and Stackline. All the messages be it the network payloads or OAM messages are handshaked using Commline.
Stackline: 6lowpan/Network layer and above protocol stack provided by thirdparty IoT OSes such as Contiki/RIOT. A new platform is added in such OSes to interface with Whitefield. The protocol stack with application will be used as-is from these OSes.
Tested on: Ubuntu 16.04 (xenial), Debian GNU/Linux 8.7 (jessie), Ubuntu 18.04 (bionic beaver)
System Requirements:
Disk Space: ~1.5GB Build Instructions:
Assumes Airline=NS3, Stackline=Contiki (example app=contiki/examples/ipv6/rpl-udp)
git clone https://github.com/whitefield-framework/whitefield
cd whitefield
git submodule update --init
git submodule foreach git pull origin master
./scripts/setup.sh
Execute Instructions:
#Start Whitefield
$./invoke_whitefield.sh config/wf.cfg
#Monitor whitefield status
$./scripts/monitor.sh
#View live network toplogy
$./canvas/canvas.py
#open http://localhost:8080/ in a browser
#Whitefield shell
$./scripts/wfshell help
#Stop whitefield
$./scripts/wfshell stop_whitefield