Wiki
Hydra
Companion document
The companion document to our conference submission contains the following additions:
- Section 1 briefly re-introduces the notation and requirement definitions we will use for the rest of this document.
- Section 2 presents the bootstrapping algorithm for Hydra.
- Section 3 presents an extended version of Hydra’s algorithm as it has been implemented in software and contains a more detailed explanation of its components, including details on the technical implementation of Hydra.
- Section 4 contains the full formal proofs of Hydra.
Software
- The code for the communication board can be found in
/code
. - As this code has been primarily developed for testbed testing purposes, no application board is available.
Get started
- Clone the code repository (including submodules):
git clone --recursive https://gitlab.ethz.ch/tec/public/hydra/hydra-code
- Follow the instructions in the Flora Wiki to compile and flash the code using the STMCubeIDE.
- Clone the script repository to schedule tests and inspect the data:
git clone https://gitlab.ethz.ch/tec/public/hydra/hydra-scripts
Run Tests on FlockLab 2
- We provide scripts to run tests on the FlockLab 2 testbed.
- Shell script:
/code/Scripts/run_flocklab_test.sh
- Python script:
/scripts/bin/hydra-analysis.py
- Shell script:
Fault injection
- In Hydra, we inject faults using the GPIO actuation feature of FlockLab. All fault injections are limited in time and are directly embedded in the test configuration, thereby not requiring re-compilation of the firmware for different variations of the same failure type and keeping a record of the tested scenario in human-readable form.
- Before testing Hydra at its full capacity including bootstrapping, we recommend using the
SKIP_BOOTSTRAP
option to start with a network that is already synchronized and initialized with the correct membership flags. - There are different kinds of failures that can be simulated:
- Node failure: Reset - using the reset pin, a hardware failure is triggered while the pin is set low.
- Node failure: Delayed start - delays the start of the node until the pin is released for the first time.
- Link Failure: Packet drops in SN phase - exclusively drops packets with a given probability during the SN phase.
- Link Failure: Packet drops from ID - drops packets with a given probability if they originate from the described ID (can be set to all incoming packets or a selection).
- Link Failure: TX power reduction - changes the TX power used to transmit as well as the reception ability by removing boosted RX to simulate decreased link qualities to other nodes.
- Link Failure: Frequency shift - moves the node to another frequency band to simulate network separation.
- To inject a fault, you only need to perform the following three steps:
- Configure the firmware using the options linked above to tell the node how to react to the GPIO actuation (not required for resetting a node using the reset pin).
- Generate actuations for the test using either our provided script and copying the output or directly entering your desired actuations in the
/scripts/bin/flocklab_actuation.log
. - Schedule the test using
/scripts/bin/hydra_analysis.py -t
with either the-a
argument for normal actuation or the-r
argument for actuating the reset pin.
Software Development with STM32CubeIDE
- The project has been created and edited using the STM32CubeIDE (itself a combination of former Atollic TrueStudio and STM32CubeMX)
Hardware
More detailed schematics and layouts are available on request.
FAQ
Where does the name 'Hydra' originate?
In Greek mythology, Hydra is a gigantic water-snake-like monster with nine heads (source: Encyclopedia Britannica).
What is special about it is its ability to regenerate and emerge even stronger if an adversary attempts to behead it (Anyone who attempted to behead the Hydra found that as soon as one head was cut off, two more heads would emerge from the fresh wound.
).
The name stresses the protocol's ability to continue operation even under highly adversarial conditions, as concurrent coordination prevents the loss of a node from paralyzing the rest of the network.
(Source: J. Paul Getty Museum)
Publications
Documentation
- ETH Zurich Research Collection
- BibTeX:
@misc{biri2023hydra_companion, author = {Biri, Andreas and Da Forno, Reto and Kuonen, Tobias and Mager, Fabian and Zimmerling, Marco and Thiele, Lothar}, title = {Hydra - Companion Document}, publisher = {ETH Zürich} year = {2023}, doi = {10.3929/ethz-b-000602742}, url = {https://doi.org/10.3929/ethz-b-000602742} }
Software
- ETH Zurich Library Entry
- BibTeX:
@misc{biri2023hydra_code, author = {Biri, Andreas and Kuonen, Tobias and Da Forno, Reto}, title = {Hydra - Software}, publisher = {ETH Zürich}, year = {2023}, doi = {10.5905/ethz-1007-628}, url = {https://doi.org/10.5905/ethz-1007-628} }
- This software builds on Flora.
Conference publications
- Hydra: Concurrent Coordination for Fault-tolerant Networking, ACM, 2023.
- BibTeX:
@inproceedings{biri2023hydra, author = {Biri, Andreas and Da Forno, Reto and Kuonen, Tobias and Mager, Fabian and Zimmerling, Marco and Thiele, Lothar}, title = {Hydra: Concurrent Coordination for Fault-tolerant Networking}, year = {2023}, isbn = {9798400701184}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, url = {https://doi.org/10.1145/3583120.3587047}, doi = {10.1145/3583120.3587047}, booktitle = {The 22nd International Conference on Information Processing in Sensor Networks}, pages = {219-232}, numpages = {14}, location = {San Antonio, TX, USA}, series = {IPSN '23} }
- Conference presentation
- ETH Research Library
Student theses
- Kuonen, Tobias: Primus inter pares no more - Increasing the fault tolerance of wireless sensor networks, ETH Zurich, 2021.
Contact Information
Please contact us if you have feedback, proposals, bug reports, etc. :
Andreas Biri
PhD Student
Contributors
- Andreas Biri: PhD student
- Reto Da Forno: Technical staff
- Tobias Kuonen: Master thesis HS2020
Licensing
See License file.
Third-Party Software
Component | License | Location in repo | Contained in repo |
---|---|---|---|
SX126x Radio Drivers (by Semtech) | BSD-3-Clause | /code/Lib/radio/semtech |
no |
STM32CubeIDE generated code | Ultimate Liberty License SLA0044/SLA0048 or BSD 3-Clause |
/code/Drivers , /code/Startup , /code/Src , and /code/Inc
|
partially (only files in Startup , Src and Inc ) |
FreeRTOS | MIT license | /code/Middlewares/Third_Party/ |
no |