# sudomesh/babeld-lab architecture

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

- Interactive diagram: https://gitdiagram.com/sudomesh/babeld-lab
- Repository: https://github.com/sudomesh/babeld-lab

## Overview

babeld-lab is a command-line virtual network lab for experimenting with Babel routing across Linux network namespaces. The main workflow is to create a configurable mesh, bring its interfaces up, start babeld in each namespace, and inspect convergence through routes or packet captures; users can then stop daemons and remove the network. The README documents these interactions, but no source excerpts were provided, so the graph does not infer internal shell-function boundaries or undocumented behavior.

Main entry points: [`babeld-lab.sh`](https://github.com/sudomesh/babeld-lab/blob/master/babeld-lab.sh) (Lab commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_lab["Lab lifecycle"]
  node_cli["Lab commands<br/>[babeld-lab.sh]"]
  node_topology["Virtual mesh<br/>[babeld-lab.sh]"]
  node_namespaces["Node namespaces<br/>[babeld-lab.sh]"]
  node_linuxnet["Linux networking tools"]
end

subgraph group_routing["Routing experiment"]
  node_babeld["babeld nodes"]
  node_routes["Routing tables"]
end

subgraph group_observation["Network observation"]
  node_capture["Packet capture"]
end

node_user(("Experimenter"))

node_user -->|"runs commands"| node_cli
node_cli -->|"creates mesh"| node_linuxnet
node_cli -->|"configures interfaces"| node_topology
node_topology -->|"connects nodes"| node_namespaces
node_cli -->|"starts nodes"| node_babeld
node_babeld -->|"installs routes"| node_routes
node_capture -->|"monitors chatter"| node_topology
node_cli -->|"stops nodes"| node_babeld
node_cli -->|"removes interfaces"| node_topology

click node_cli "https://github.com/sudomesh/babeld-lab/blob/master/babeld-lab.sh"
click node_topology "https://github.com/sudomesh/babeld-lab/blob/master/babeld-lab.sh"
click node_namespaces "https://github.com/sudomesh/babeld-lab/blob/master/babeld-lab.sh"

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_cli,node_topology,node_namespaces,node_linuxnet toneBlue
class node_babeld,node_routes toneAmber
class node_capture toneMint
class node_user toneIndigo
```

## Components

### Lab lifecycle

- [Lab commands](https://github.com/sudomesh/babeld-lab/blob/master/babeld-lab.sh): `babeld-lab.sh`
- [Virtual mesh](https://github.com/sudomesh/babeld-lab/blob/master/babeld-lab.sh): `babeld-lab.sh`
- [Node namespaces](https://github.com/sudomesh/babeld-lab/blob/master/babeld-lab.sh): `babeld-lab.sh`
- **Linux networking tools**

### Routing experiment

- **babeld nodes**
- **Routing tables**

### Network observation

- **Packet capture**

### Other components

- **Experimenter**

## Connections

- Experimenter → Lab commands: runs commands (evidence: `README.md`)
- Lab commands → Linux networking tools: creates mesh (evidence: `README.md`)
- Lab commands → Virtual mesh: configures interfaces (evidence: `README.md`)
- Virtual mesh → Node namespaces: connects nodes (evidence: `README.md`)
- Lab commands → babeld nodes: starts nodes (evidence: `README.md`)
- babeld nodes → Routing tables: installs routes (evidence: `README.md`)
- Packet capture → Virtual mesh: monitors chatter (evidence: `README.md`)
- Lab commands → babeld nodes: stops nodes (evidence: `README.md`)
- Lab commands → Virtual mesh: removes interfaces (evidence: `README.md`)
