Cristi
2abc7e09a3
Adds controller and compute API support for explicitly pulling or updating Docker images.
2026-07-24 16:40:20 +03:00
Cristi
dd497e4308
(feat): Implement functional Layer 1 keepalive support for IOU/IOL nodes
2026-07-22 10:47:09 +03:00
YueGuobin
4943567962
feat(builtin): NAT node returns its interface IP info in asdict()
...
NAT now includes an 'interfaces' field in its response, filtered to
contain only the mapped NAT interface (virbr0 on Linux, vmnet8 on
macOS/Windows). This lets connected nodes discover the NAT subnet
and gateway address without needing to list all host interfaces.
The field format mirrors Cloud.asdict(): name, type, special, and
ip_addresses list (both IPv4 and IPv6).
2026-07-19 18:10:51 +08:00
YueGuobin
794bfef450
fix(marker): per-link attribution via link field in MARK signals
...
A uBridge MARK signal carries only node= and filter= (no bridge/link field), so when one node is the capture side for several links that share a marker name (always the case for global-{name} definitions on a multi-interface node) the signals were indistinguishable and the (node, filter) registry collapsed them to a single link.
The mark filter is now stamped with its link id (mark <bpf> ... link <link_id>); uBridge echoes it verbatim (link=<link_id>) and the listener uses the signal's link= as the authoritative link_id of the marker.match event, falling back to the registry only for legacy signals without it. base_node and iou apply paths pass link_id; covered by two new listener tests.
2026-07-16 00:39:52 +08:00
YueGuobin
d2e9823e6c
feat: implement traffic insight marker backend (ubridge mark filter)
...
Add compute-side marker subsystem that receives ubridge UDP MARK signals
and forwards them as project-scoped notifications to the web UI for
real-time traffic coloring. Matched packets are always saved to per-link
pcaps for future replay.
Key components:
- gns3server/compute/marker/: MarkerManager (singleton, UDP listener +
O(1) registry keyed by (node_id, filter_name)) + MarkerListener
(DatagramProtocol parsing MARK lines per ubridge integration contract)
- gns3server/compute/base_node.py: marker sink/node config at ubridge
startup; shared _ubridge_add_marker_filter / _ubridge_delete_marker_filter
- Per-node start_marker/stop_marker: VPCS (VPCS-{id}), QEMU
(QEMU-{id}-{adapter}), Docker (bridge{adapter})
- Compute REST /markers/start + /markers/stop (vpcs/qemu/docker route files)
- Controller Link._markers state + UDPLink.start_marker/stop_marker/
update_marker (mirror capture pattern: BPF validation, _choose_capture_side,
node.post forwarding, topology persistence)
- Controller REST GET/POST/DELETE/PUT /v3/projects/{p}/links/{l}/markers
- Config: marker_listen_host / marker_listen_port in ServerSettings
- Signal routing: creation-time registry O(1) lookup, no node-table scan;
project-scoped WS stream (not global); event payload always carries
project_id for frontend scoping
Tests: 14 unit tests (registry, listener parsing, UDP round-trip);
562 existing tests pass with zero regressions.
2026-07-16 00:39:51 +08:00
YueGuobin
9721660cc3
Expose full interface address list and link state in cloud node API
...
Each host interface surfaced by the cloud node now reports:
- ip_addresses: every IPv4 and IPv6 address (previously only a single
IPv4 was collected internally and then dropped before the response)
- status / speed / mtu / flags: operational state and link attributes
sourced from psutil.net_if_stats(), with flags normalized to a list
The legacy ip_address / netmask / mac_address fields are preserved so
existing callers (compute link detection, GNS3 VM, VMware, has_netmask)
keep working. The new fields travel through the existing interfaces
payload that the controller forwards verbatim, so no controller-side
change is required and the PUT / ports_mapping flow is unaffected.
2026-07-10 13:56:07 +08:00
YueGuobin
ce95c89b64
Fix _fix_permissions test: set process.returncode=0 and update assertion
...
- Set returncode=0 on mock process to follow the success path
- Update assertion to include stderr=asyncio.subprocess.PIPE parameter
2026-06-10 00:44:12 +08:00
grossmj
0aa6566e50
Prevent router to be duplicated when running and add tests
2026-03-17 12:49:38 +08:00
grossmj
27ce1a4e25
Merge remote-tracking branch 'origin/2.2' into 3.0
...
# Conflicts:
# gns3server/schemas/iou_template.py
# tests/handlers/api/compute/test_iou.py
# tests/handlers/api/controller/test_template.py
2026-03-12 14:11:05 +08:00
grossmj
0624c1b945
Deactivate 'use default IOU values' by default and update RAM/NVRAM values
2026-03-10 20:28:00 +08:00
grossmj
c5b9f379fe
Merge remote-tracking branch 'origin/2.2' into 3.0
...
# Conflicts:
# Dockerfile
# dev-requirements.txt
# gns3server/compute/qemu/qemu_vm.py
# gns3server/version.py
# requirements.txt
2026-02-20 16:28:53 +08:00
grossmj
715b7032bc
Fix tests
2026-02-20 15:51:49 +08:00
grossmj
1d45df6613
Upgrade dependencies
2026-01-24 21:38:58 +08:00
grossmj
60c10e7ecc
Merge remote-tracking branch 'origin/2.2' into 3.0
...
# Conflicts:
# .github/workflows/testing.yml
# CHANGELOG
# README.md
# gns3server/appliances/infix.gns3a
# gns3server/compute/docker/__init__.py
# gns3server/compute/docker/docker_vm.py
# gns3server/crash_report.py
# gns3server/version.py
# gns3server/web/web_server.py
# setup.py
# tests/controller/test_project.py
2025-11-29 11:42:02 +10:00
grossmj
f2aaf5ab38
Docker API version requirements and process to handle older daemons
2025-11-17 22:26:18 +10:00
grossmj
bae6221991
Set name of container in Docker
2025-11-17 10:59:05 +10:00
grossmj
232b9c2806
Fix tests
2025-05-25 17:35:45 +02:00
grossmj
2bf3eff143
Remove debug message in tests
2025-05-13 20:47:38 +02:00
grossmj
2b96e54629
Fix tests and require Qemu version >= 2.4
2025-04-30 13:38:52 +07:00
grossmj
d9dcc2738d
Merge remote-tracking branch 'origin/2.2' into 3.0
...
# Conflicts:
# CHANGELOG
# Dockerfile
# README.md
# gns3server/appliances/infix.gns3a
# gns3server/compute/docker/docker_vm.py
# gns3server/compute/qemu/qemu_vm.py
# gns3server/controller/gns3vm/virtualbox_gns3_vm.py
# gns3server/crash_report.py
# gns3server/static/web-ui/index.html
# gns3server/static/web-ui/main.9bcf455e62558dedfd48.js
# gns3server/version.py
2025-04-21 20:13:31 +07:00
grossmj
2b7eb91694
Add edk2-stable202502 UEFI firmwares and try to first use firmwares from the ovmf package if installed. Fixes #2494
2025-04-18 17:13:29 +07:00
grossmj
ba4e0c945d
Refactor tests and upgrade dev package requirements
2025-01-17 19:12:44 +10:00
grossmj
5e1b8814b6
Merge branch '2.2' into 3.0
...
# Conflicts:
# gns3server/compute/iou/iou_vm.py
2024-12-17 15:08:45 +07:00
grossmj
df56955bf0
Use license instead of licence
2024-12-17 15:01:01 +07:00
grossmj
f38efd311a
Merge branch '2.2' into 3.0
2024-12-16 18:14:16 +07:00
grossmj
91e9fa1cbc
Fix tests
2024-12-16 18:13:51 +07:00
grossmj
cbaa563996
Merge branch '2.2' into 3.0
...
# Conflicts:
# CHANGELOG
# gns3server/crash_report.py
# gns3server/static/web-ui/index.html
# gns3server/static/web-ui/main.9297104511b6616fc55c.js
# gns3server/utils/images.py
# gns3server/version.py
# tests/api/routes/compute/test_dynamips_nodes.py
# tests/handlers/api/compute/test_qemu.py
# tests/utils/test_images.py
2024-12-02 12:16:34 +10:00
grossmj
af7fbe6bb4
Fix tests
2024-11-27 15:18:49 +10:00
grossmj
b37db57bb9
Fix tests
2024-11-17 15:00:13 +10:00
grossmj
ec9dbd20b8
Merge branch '2.2' into 3.0
...
# Conflicts:
# gns3server/compute/base_node.py
# gns3server/compute/docker/docker_vm.py
# gns3server/compute/qemu/qemu_vm.py
# gns3server/crash_report.py
# gns3server/version.py
2024-11-07 23:18:42 +10:00
grossmj
52a7696618
Fix tests
2024-11-07 14:48:57 +10:00
grossmj
7bf17392dd
Do not use "ide" if there is a disk image and no interface type has been explicitly configured.
2024-11-07 14:37:26 +10:00
grossmj
8c7c17b889
Upgrade dependencies and fix Pydantic warnings
2024-10-31 17:09:52 +10:00
grossmj
7e902726bf
Fix issues after merge
2024-10-31 13:06:17 +10:00
grossmj
c4fcb43e78
Merge branch '2.2' into 3.0
...
# Conflicts:
# .github/workflows/testing.yml
# CHANGELOG
# README.md
# dev-requirements.txt
# gns3server/compute/docker/docker_vm.py
# gns3server/controller/export_project.py
# gns3server/controller/import_project.py
# gns3server/controller/project.py
# gns3server/crash_report.py
# gns3server/static/web-ui/index.html
# gns3server/static/web-ui/main.df8c319a3da6fb0e3629.js
# gns3server/version.py
# requirements.txt
# setup.py
# tests/compute/docker/test_docker_vm.py
# tests/controller/test_import_project.py
2024-10-31 12:54:35 +10:00
grossmj
48b7e6ca50
Fix run Docker containers with user namespaces enabled. Fixes #2414
2024-10-26 19:03:05 +10:00
grossmj
a7b56739a9
Fixes after merging
2024-09-23 14:08:24 +07:00
grossmj
8ce0cbf7f7
Merge branch '2.2' into 3.0
...
# Conflicts:
# gns3server/compute/base_node.py
# gns3server/compute/docker/docker_vm.py
# gns3server/compute/dynamips/nodes/c1700.py
# gns3server/compute/dynamips/nodes/c2600.py
# gns3server/compute/dynamips/nodes/c2691.py
# gns3server/compute/dynamips/nodes/c3600.py
# gns3server/compute/dynamips/nodes/c3725.py
# gns3server/compute/dynamips/nodes/c3745.py
# gns3server/compute/dynamips/nodes/c7200.py
# gns3server/compute/dynamips/nodes/router.py
# gns3server/compute/qemu/qemu_vm.py
# gns3server/controller/node.py
# gns3server/controller/topology.py
# gns3server/handlers/api/compute/docker_handler.py
# gns3server/handlers/api/compute/dynamips_vm_handler.py
# gns3server/handlers/api/compute/qemu_handler.py
# gns3server/schemas/docker.py
# gns3server/schemas/docker_template.py
# gns3server/schemas/dynamips_template.py
# gns3server/schemas/dynamips_vm.py
# gns3server/schemas/node.py
# gns3server/schemas/qemu.py
# gns3server/schemas/qemu_template.py
2024-09-23 13:28:56 +07:00
Jeremy Grossmann
af6f34b2ca
Revert "Backport auxiliary console support for Qemu, Docker and Dynamips nodes"
2024-09-23 13:10:58 +07:00
grossmj
d3138daa23
Fix Docker tests
2024-09-22 22:12:40 +07:00
grossmj
7619080a50
Merge branch '2.2' into 3.0
...
# Conflicts:
# gns3server/compute/base_node.py
# gns3server/compute/docker/docker_vm.py
# gns3server/compute/dynamips/nodes/c1700.py
# gns3server/compute/dynamips/nodes/c2600.py
# gns3server/compute/dynamips/nodes/c2691.py
# gns3server/compute/dynamips/nodes/c3600.py
# gns3server/compute/dynamips/nodes/c3725.py
# gns3server/compute/dynamips/nodes/c3745.py
# gns3server/compute/dynamips/nodes/c7200.py
# gns3server/compute/dynamips/nodes/router.py
# gns3server/compute/qemu/qemu_vm.py
# gns3server/controller/node.py
# gns3server/handlers/api/compute/docker_handler.py
# gns3server/handlers/api/compute/dynamips_vm_handler.py
# gns3server/handlers/api/compute/qemu_handler.py
# gns3server/schemas/docker.py
# gns3server/schemas/docker_template.py
# gns3server/schemas/dynamips_template.py
# gns3server/schemas/dynamips_vm.py
# gns3server/schemas/node.py
# gns3server/schemas/qemu.py
# gns3server/schemas/qemu_template.py
2024-09-22 22:01:06 +07:00
grossmj
c41c11eb34
Backport auxiliary console support for Qemu, Docker and Dynamips nodes
2024-09-22 18:29:04 +07:00
grossmj
22f022cc22
Fix for running Docker containers with user namespaces enabled
2024-09-19 10:40:22 +07:00
grossmj
8429494280
Test base MAC address for Docker VMs
2024-09-19 10:19:07 +07:00
grossmj
3214f52e9e
Merge branch '2.2' into 3.0
...
# Conflicts:
# gns3server/compute/docker/docker_vm.py
# gns3server/handlers/api/compute/docker_handler.py
# gns3server/schemas/docker.py
# gns3server/schemas/docker_template.py
# tests/compute/docker/test_docker_vm.py
2024-09-18 17:29:06 +07:00
grossmj
3792901dc7
Support for configuring MAC address in Docker containers
2024-09-18 16:30:22 +07:00
grossmj
6ed18c561f
Merge branch '2.2' into 3.0
...
# Conflicts:
# gns3server/compute/qemu/qemu_vm.py
# gns3server/config_samples/gns3_server.conf
# gns3server/controller/export_project.py
# gns3server/controller/project.py
# gns3server/controller/snapshot.py
# gns3server/handlers/api/controller/project_handler.py
# tests/controller/test_export_project.py
# tests/controller/test_import_project.py
# tests/controller/test_snapshot.py
2024-07-07 19:04:50 +02:00
grossmj
b194e48649
Forbid unsafe Qemu additional options
2024-07-06 12:24:22 +02:00
grossmj
d3860ba84b
Merge branch '2.2' into 3.0
...
# Conflicts:
# CHANGELOG
# dev-requirements.txt
# gns3server/compute/qemu/__init__.py
# gns3server/compute/vmware/__init__.py
# gns3server/controller/snapshot.py
# gns3server/crash_report.py
# gns3server/handlers/api/compute/atm_switch_handler.py
# gns3server/run.py
# gns3server/static/web-ui/26.77d4bfd104f37c42e028.js
# gns3server/static/web-ui/index.html
# gns3server/static/web-ui/runtime.415291667f70565cd8ef.js
# gns3server/utils/__init__.py
# gns3server/utils/images.py
# gns3server/utils/interfaces.py
# gns3server/version.py
# gns3server/web/web_server.py
# pytest.ini
# requirements.txt
# scripts/update-bundled-web-ui.sh
# setup.py
# tests/api/routes/compute/test_dynamips_nodes.py
# tests/compute/builtin/nodes/test_cloud.py
# tests/compute/docker/test_docker.py
# tests/compute/docker/test_docker_vm.py
# tests/compute/dynamips/test_dynamips_manager.py
# tests/compute/dynamips/test_dynamips_router.py
# tests/compute/iou/test_iou_vm.py
# tests/compute/qemu/test_qcow2.py
# tests/compute/qemu/test_qemu_manager.py
# tests/compute/qemu/test_qemu_vm.py
# tests/compute/test_base_node.py
# tests/compute/test_manager.py
# tests/compute/test_project.py
# tests/compute/traceng/test_traceng_vm.py
# tests/compute/virtualbox/test_virtualbox_manager.py
# tests/compute/virtualbox/test_virtualbox_vm.py
# tests/compute/vmware/test_vmware_manager.py
# tests/compute/vmware/test_vmware_vm.py
# tests/compute/vpcs/test_vpcs_vm.py
# tests/conftest.py
# tests/controller/gns3vm/test_remote_gns3_vm.py
# tests/controller/gns3vm/test_virtualbox_gns3_vm.py
# tests/controller/gns3vm/test_vmware_gns3_vm.py
# tests/controller/test_export_project.py
# tests/controller/test_gns3vm.py
# tests/controller/test_import_project.py
# tests/test_config.py
# tests/utils/test_asyncio.py
# tests/utils/test_images.py
# tests/web/test_response.py
2024-05-16 17:53:39 +07:00
grossmj
46a9fdb61d
Remove event_loop
2024-05-09 17:53:02 +07:00