# signetlabdei/desert_underwater architecture

> Architecture diagram of the GitHub repository signetlabdei/desert_underwater, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/signetlabdei/desert_underwater
- Repository: https://github.com/signetlabdei/desert_underwater

## Overview

DESERT Underwater is a C++ extension to NS-Miracle for designing and simulating underwater network protocols and carrying those protocols onto real-device experiments. The principal workflow is to configure an experiment, originate application traffic, route and deliver it through link and physical layers, and model or use an underwater channel. The README documents the ISO/OSI organization and real-device packers; sampled code also shows static routing, SUN path establishment, and multi-layer selection. Other protocol and modem variants are represented by their documented source-tree modules; their internal wiring was not inspected.

Main entry points: [`DESERT_Framework/DESERT/data_link/uwaloha/uwaloha.cpp`](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/data_link/uwaloha/uwaloha.cpp) (Data-link protocols), [`DESERT_Framework/DESERT/physical/uwphysical/uwphysical.cpp`](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/physical/uwphysical/uwphysical.cpp) (Physical layer), [`DESERT_Framework/DESERT/channel/uwem_channel/uwem-channel.cpp`](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/channel/uwem_channel/uwem-channel.cpp) (Underwater channels), [`DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy.cc`](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy.cc) (PHY controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_configuration["Experiment inputs"]
end

subgraph group_protocols["Protocol stack"]
  node_apps["Applications"]
  node_routing["Network routing"]
  node_sun["SUN routing"]
  node_link["Data-link protocols<br/>[uwaloha.cpp]"]
end

subgraph group_radio["Physical environment"]
  node_interference["Interference models<br/>[uwinterference.cpp]"]
  node_physical["Physical layer<br/>[uwphysical.cpp]"]
  node_channel["Underwater channels<br/>[uwem-channel.cpp]"]
  node_propagation["Propagation models"]
  node_mobility["Node mobility"]
end

subgraph group_adaptation["Device integration"]
  node_packers["Device packers"]
  node_modem["Modem interface"]
  node_position_input["Position feed<br/>[udpposition.cpp]"]
end

subgraph group_coordination["Cross-layer control"]
  node_multi_phy["Multi-PHY selection"]
  node_stack_controller["Stack switching"]
  node_phy_controller["PHY controller"]
  node_master["PHY master"]
  node_slave["PHY slave"]
end

node_experimenter(("Experiment designer"))
node_hardware{{"Real modem"}}
node_udp_peer(("Position sender"))

node_experimenter -->|"configures"| node_apps
node_apps -->|"sends packets"| node_routing
node_routing -->|"forwards packets"| node_link
node_sun -->|"forwards packets"| node_link
node_link -->|"passes frames"| node_physical
node_physical -->|"transmits"| node_channel
node_channel -->|"models propagation"| node_propagation
node_interference -->|"models interference"| node_physical
node_mobility -->|"supplies positions"| node_channel
node_packers -.->|"adapts traffic"| node_modem
node_modem -.->|"interfaces"| node_hardware
node_udp_peer -.->|"sends position"| node_position_input
node_position_input -.->|"updates position"| node_mobility
node_multi_phy -->|"selects MAC"| node_link
node_stack_controller -->|"dispatches packets"| node_link
node_phy_controller -->|"tracks PHY state"| node_physical
node_master -->|"extends controller"| node_phy_controller
node_slave -->|"extends controller"| node_phy_controller

click node_apps "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/application/uwApplication/uwApplication_module.cpp"
click node_routing "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/network/uwstaticrouting/uwstaticrouting.cpp"
click node_sun "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/network/uwsun/sun-ipr-node-pathest-search.cpp"
click node_link "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/data_link/uwaloha/uwaloha.cpp"
click node_interference "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/interference/uwinterference/uwinterference.cpp"
click node_physical "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/physical/uwphysical/uwphysical.cpp"
click node_channel "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/channel/uwem_channel/uwem-channel.cpp"
click node_propagation "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/propagation/uwem_propagation/uwem-mpropagation.cpp"
click node_mobility "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/mobility/uwdriftposition/uwdriftposition.cpp"
click node_packers "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/packer_uwApplication/packer_uwApplication.cc"
click node_modem "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/physical/uwevologicss2cmodem/uwevologicss2cmodem.cpp"
click node_multi_phy "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_traffic_control/uwmulti-multiphy-controller.cpp"
click node_stack_controller "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller.cc"
click node_phy_controller "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy.cc"
click node_master "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy-master.cc"
click node_slave "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy-slave.cc"
click node_position_input "https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/mobility_udpposition/udpposition.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_apps,node_routing,node_sun,node_link toneAmber
class node_interference,node_physical,node_channel,node_propagation,node_mobility toneMint
class node_packers,node_modem,node_position_input toneRose
class node_multi_phy,node_stack_controller,node_phy_controller,node_master,node_slave,node_experimenter,node_hardware,node_udp_peer toneIndigo
```

## Components

### Protocol stack

- [Applications](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/application/uwApplication/uwApplication_module.cpp): `DESERT_Framework/DESERT/application/uwApplication/uwApplication_module.cpp`
- [Network routing](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/network/uwstaticrouting/uwstaticrouting.cpp): `DESERT_Framework/DESERT/network/uwstaticrouting/uwstaticrouting.cpp`
- [SUN routing](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/network/uwsun/sun-ipr-node-pathest-search.cpp): `DESERT_Framework/DESERT/network/uwsun/sun-ipr-node-pathest-search.cpp`
- [Data-link protocols](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/data_link/uwaloha/uwaloha.cpp): `DESERT_Framework/DESERT/data_link/uwaloha/uwaloha.cpp`

### Physical environment

- [Interference models](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/interference/uwinterference/uwinterference.cpp): `DESERT_Framework/DESERT/interference/uwinterference/uwinterference.cpp`
- [Physical layer](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/physical/uwphysical/uwphysical.cpp): `DESERT_Framework/DESERT/physical/uwphysical/uwphysical.cpp`
- [Underwater channels](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/channel/uwem_channel/uwem-channel.cpp): `DESERT_Framework/DESERT/channel/uwem_channel/uwem-channel.cpp`
- [Propagation models](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/propagation/uwem_propagation/uwem-mpropagation.cpp): `DESERT_Framework/DESERT/propagation/uwem_propagation/uwem-mpropagation.cpp`
- [Node mobility](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/mobility/uwdriftposition/uwdriftposition.cpp): `DESERT_Framework/DESERT/mobility/uwdriftposition/uwdriftposition.cpp`

### Device integration

- [Device packers](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/packer_uwApplication/packer_uwApplication.cc): `DESERT_Addons/packer_uwApplication/packer_uwApplication.cc`
- [Modem interface](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Framework/DESERT/physical/uwevologicss2cmodem/uwevologicss2cmodem.cpp): `DESERT_Framework/DESERT/physical/uwevologicss2cmodem/uwevologicss2cmodem.cpp`
- [Position feed](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/mobility_udpposition/udpposition.cpp): `DESERT_Addons/mobility_udpposition/udpposition.cpp`

### Cross-layer control

- [Multi-PHY selection](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_traffic_control/uwmulti-multiphy-controller.cpp): `DESERT_Addons/uwmulti_traffic_control/uwmulti-multiphy-controller.cpp`
- [Stack switching](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller.cc): `DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller.cc`
- [PHY controller](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy.cc): `DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy.cc`
- [PHY master](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy-master.cc): `DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy-master.cc`
- [PHY slave](https://github.com/signetlabdei/desert_underwater/blob/master/DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy-slave.cc): `DESERT_Addons/uwmulti_stack_controller/uwmulti-stack-controller-phy-slave.cc`

### Other components

- **Experiment designer**
- **Real modem**
- **Position sender**

## Connections

- Experiment designer → Applications: configures
- Applications → Network routing: sends packets
- Network routing → Data-link protocols: forwards packets
- SUN routing → Data-link protocols: forwards packets
- Data-link protocols → Physical layer: passes frames
- Physical layer → Underwater channels: transmits
- Underwater channels → Propagation models: models propagation
- Interference models → Physical layer: models interference
- Node mobility → Underwater channels: supplies positions
- Device packers → Modem interface: adapts traffic
- Modem interface → Real modem: interfaces
- Position sender → Position feed: sends position
- Position feed → Node mobility: updates position
- Multi-PHY selection → Data-link protocols: selects MAC
- Stack switching → Data-link protocols: dispatches packets
- PHY controller → Physical layer: tracks PHY state
- PHY master → PHY controller: extends controller
- PHY slave → PHY controller: extends controller
