There are multiple layers, specifically:
TODO: Diagram
All items within a layer should extend the base class provided in the related base.py file, and tests should go within the tests/ folder for that layer.
The following are supported for alpha:
| Driver | RF Supported | Notes |
|---|---|---|
| KillerBee | IEEE 802.15.4 | Supports ApiMote, TI CC2531EMK, Atmel RZUSBSTICK, and others. |
| USRP SDR via GNU Radio | IEEE 802.15.4 | Omits the PHY header, allowing it to be generated by TumbleRF. |
These items are meant to allow control and monitoring of the target, in order to both:
- know when a target is in a valid or invalid state
- reset the device to a valid state (reboot, restart service, etc)
A user may select to use one harness for monitoring and another for reset, if appropriate.
The following are supported for alpha:
| Driver | Devices Supported | Notes |
|---|---|---|
| Arduino Serial | Arduinos | Uses an Arduino to monitor pin levels and capture serial from a target. Serial capture is less reliable than the FTDI based harness. |
| Serial | FTDI Adapters | Uses an FTDI adapter to process serial looking for specific messages. |
| RF Interface | Any RF Interface Supporting rx_poll |
This is where the fun comes in, to implement the fuzzing technique that you want to try against a target.
Typically you must only implement the yield_test_case and yield_control_case functions (plus any initialization code you need) in your class.
| Driver | RF Target | Notes |
|---|---|---|
| Isotope Preamble | IEEE 802.15.4 | Varies the number of nibbles in a preamble before a beacon request frame. See the Isotope paper for more detail. |
| Isotope Franconian Notch | IEEE 802.15.4 | Varies the values of nibbles in a preamble before a beacon request frame. See the Isotope paper for more detail. |
| Random Payload | IEEE 802.15.4 | Provides random content in a data frame. |