Skip to content
W

Wiki

Project ID: 38536

Hydra

Companion document

The companion document to our conference submission contains the following additions:

  1. Section 1 briefly re-introduces the notation and requirement definitions we will use for the rest of this document.
  2. Section 2 presents the bootstrapping algorithm for Hydra.
  3. 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.
  4. 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

  1. Clone the code repository (including submodules): git clone --recursive https://gitlab.ethz.ch/tec/public/hydra/hydra-code
  2. Follow the instructions in the Flora Wiki to compile and flash the code using the STMCubeIDE.
  3. 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

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:
  • To inject a fault, you only need to perform the following three steps:
    1. 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).
    2. 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.
    3. 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)
    • The IDE is based on Eclipse.
    • The main config file of the IDE project is stored in the .cproject file.
    • The architecture configurations (GPIOs etc.) are stored in the *.ioc file.

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.

Greek representation of Hydra
(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

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