1. Class/
Contains the core classes and modules for the emulator.
- Core Classes:
Node.py: Base class for all nodes (satellites and ground stations).Orbit.py: Base class for handling satellite orbits using TLE data.Scenario.py: Manages the overall emulation scenario.
- Extended Classes:
Satellite.py: ExtendsNodeto represent satellites.Ground_Station.py: ExtendsNodeto represent ground stations.
- Orbit Propagation Models:
SGP4.py: Implements the SGP4 model for orbit propagation.TwoBody.py: Implements a two-body model for orbit propagation.
- Communication and Channels:
Channel.py: Handles communication channels between nodes.channel_threshold.py: Defines thresholds and parameters for channel configurations.
- Routing:
routing.py: Registry of mesh routing protocols (olsrd,babel) selected by[Routing]inconfig.toml— firewall gating of out-of-LOS peers and daemon start/stop.
- Orbital Data:
tle_generator.py: Generates TLE files for N satellites in one orbital plane (CLI and used by the MCPgenerate_tletool).
- Time Management:
Time_parameters.py: Manages time-related settings for the emulation.
- Server and Visualization:
Server.py: Flask server for Cesium visualization (port 5500).static/: Web dashboard assets (CSS, JS, fonts, icons).templates/: HTML and CZML templates for Cesium.
2. SatelliteEmulator.py
Interactive CLI entry point. Talks to the REST API to load configs, manage VMs, generate CZML, and launch or stop the simulation.
3. apiServer.py
REST API server (port 5050). Exposes the full emulator lifecycle over HTTP. Also starts the Cesium visualization server and the NTP server automatically on launch.
4. mcpServer.py
MCP server (port 8560). Exposes emulator control, VM management, and configuration generation as AI-callable tools. Enables full integration with AI agents such as Claude Desktop or Claude Code.
5. ntpserver.py
Simulation-aware NTP server. Serves emulator simulation time to nodes in the emulated network.
6. docker-compose.yml
Generated by Scenario.generate_docker_compose() from the loaded scenario: one service per type='container' node (real container_external nodes are never included — VSNES doesn’t manage them) plus a local registry service, on the olsr_net bridge (subnet derived from the first node’s ip_ext, typically 172.28.0.0/24). Regenerate it via POST /api/load-config {"isDockercompose": true} or POST /api/compose/generate — don’t hand-edit it.
7. docker/
Dockerfile: Debian 12 image with SSH, networking tools, and k3s pre-installed.entrypoint.sh: Container startup script.
8. config.toml
Configuration file defining the scenario: nodes, channels, time parameters, and network settings.