57 Commits

Author SHA1 Message Date
YueGuobin
c62b9b0283
refactor(marker): converge to filter single-path model, remove dual-apply endpoints
Markers now follow exactly the same apply pattern as packet filters:
state lives in Link._markers, application goes through NIO
(update() -> PUT /nio -> _ubridge_apply_markers). The former
immediate-apply REST endpoints (/markers/start, /markers/stop on
the compute side) and the per-node start_marker/stop_marker methods
are removed — they were a legacy of the original capture-inspired
design and have been superseded by the NIO flow.

Changes:
- controller/udp_link: start_marker/stop_marker/update_marker now
  set _markers state + call self.update() (mirrors update_filters).
  Removed _marker_capture_nodes runtime dict and its helpers.
- controller/project: _create_link_from_topology_data restores
  _markers directly from persisted data (with BPF validation,
  like filter reload). No long calls start_marker during load.
- compute: _ubridge_apply_markers swallows BPF compile errors
  (warn+skip), matching _ubridge_apply_filters behaviour so a
  single bad expression cannot break link creation / node restart.
- Removed: /markers/start,stop endpoints (6 handlers across
  vpcs/qemu/docker route files), node start_marker/stop_marker
  methods (3 VM files), _ubridge_delete_marker_filter,
  _marker_capture_nodes, MarkerDelete schema.

Net: ~280 lines of dead code removed; marker and packet filter now
share a single, unified apply path via the NIO.
2026-07-16 00:39:51 +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
grossmj
bc1016474e Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
2023-12-05 22:15:50 +10:00
grossmj
24bb0ca419 Add custom executable paths on Windows 2023-12-05 21:24:40 +10:00
grossmj
27d9063e56 Merge 2.2 2023-01-05 12:38:00 +08:00
grossmj
b3a6b9173b Fix reset console. Fixes #1619 2022-12-31 09:43:17 +08:00
grossmj
1148dbc48e Fix issue when calling reset_console with running VPCS and Qemu nodes. Ref #1619 2022-12-30 20:54:37 +08:00
grossmj
cefab8d362 Rename __json__() to asdict() 2021-04-17 23:34:28 +09:30
grossmj
c021e21309 Use black with -l 120 param. 2021-04-13 18:46:50 +09:30
grossmj
f928738bd5 Use pyupgrade with --py36-plus param. 2021-04-13 18:37:58 +09:30
grossmj
30ebae207f Use Pydantic to validate the server config file. 2021-04-12 17:02:23 +09:30
grossmj
9e6ccc3f61 Fix bug when starting of vpcs stopped with "quit". Fixes https://github.com/GNS3/gns3-gui/issues/3110 2021-02-14 13:50:10 +10:30
grossmj
128e494134 Stop uBridge if VPCS node has been terminated. Ref https://github.com/GNS3/gns3-gui/issues/3110 2021-01-27 21:03:19 +10:30
grossmj
a17119187b Fix remote packet capture for Dynamips. 2019-04-01 20:58:18 +07:00
grossmj
4cc5dbc228 Fix remote packet capture and make sure packet capture is stopped when deleting an NIO. Fixes https://github.com/GNS3/gns3-gui/issues/2753 2019-04-01 19:47:31 +07:00
grossmj
380224dca1 Change how VPCS executable is searched. 2019-03-06 23:15:05 +07:00
grossmj
456ef1348b Fix DeprecationWarning: invalid escape sequence. Fixes https://github.com/GNS3/gns3-gui/issues/2670 2019-01-17 18:01:58 +07:00
grossmj
2764828f38 Refactor how clients access PCAP capture files. Fixes https://github.com/GNS3/gns3-gui/issues/2438.
* The PCAP file is directly accessed if controller and client are on the same host.
* The PCAP file is streamed from the compute server to the client with the controller as a proxy when the controller is remote for the client.
2018-10-27 14:47:17 +07:00
grossmj
76af98404a Drop Python 3.4 and switch to async / await syntax for asyncio. Fixes #1425 2018-10-15 17:05:49 +07:00
grossmj
9de13c570c Merge branch '2.1' into 2.2
# Conflicts:
#	gns3server/compute/builtin/nodes/cloud.py
#	gns3server/compute/docker/docker_vm.py
#	gns3server/compute/dynamips/nodes/ethernet_switch.py
#	gns3server/compute/iou/iou_vm.py
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/compute/virtualbox/virtualbox_vm.py
#	gns3server/compute/vmware/vmware_vm.py
#	gns3server/controller/__init__.py
#	gns3server/version.py
#	gns3server/web/web_server.py
2018-10-04 15:44:13 +02:00
grossmj
4d95e0b51f Catch some exceptions. 2018-09-28 15:04:38 +02:00
grossmj
21a1800edc Merge branch '2.1' into 2.2
# Conflicts:
#	gns3server/controller/__init__.py
#	gns3server/controller/export_project.py
#	gns3server/controller/import_project.py
#	gns3server/controller/project.py
#	gns3server/version.py
2018-04-28 19:41:12 +07:00
grossmj
20294e284c Fix exception from send_signal() on Windows. 2018-04-27 17:00:28 +07:00
grossmj
e52775fa3a Support for console type "none". 2018-03-24 18:11:21 +07:00
grossmj
90ce6093d8 Some spring cleaning. 2018-03-15 14:17:39 +07:00
grossmj
5f14f8eb46 Default VPCS name format is now PC-{0}. 2018-01-09 23:40:35 +07:00
ziajka
3d85bba9d4 Don't create directory structure during json dump. Fixes #2270 2017-10-02 10:41:57 +02:00
Julien Duponchelle
0854c04687
API for duplication a Node
Support:
* VPCS
* Dynamips router
* Ethernet switch

Ref #1065
2017-07-24 10:08:22 +02:00
Julien Duponchelle
9e2759a3f2 Merge branch '2.1' into remove_use_ubrige 2017-07-12 12:46:10 +02:00
Julien Duponchelle
86f1201276
Support packet filtering for dynamips
Fix #1109
2017-07-12 12:08:02 +02:00
Julien Duponchelle
04303ca00c
Fix VPCS ubridge usage 2017-07-12 09:55:23 +02:00
Julien Duponchelle
d112da400e
Remove use_ubridge flag
Ref #1115
2017-07-11 13:58:59 +02:00
Julien Duponchelle
557924e91a
Use ubridge for dynamips routers
Ref #1109
2017-07-10 20:38:28 +02:00
Julien Duponchelle
4097bab565
Apply feedback from @grossmj 2017-07-05 16:36:39 +02:00
Julien Duponchelle
08423eff96
Support packet filtering for VPCS
https://github.com/GNS3/gns3-gui/issues/765
2017-07-04 15:12:26 +02:00
Julien Duponchelle
bb8097a052
Merge remote-tracking branch 'origin/master' into 2.1 2017-06-19 10:44:52 +02:00
ziajka
7235a312ab Escaping VPCS name in regex #1067 2017-06-09 09:14:25 +02:00
Julien Duponchelle
1ab9ca2333
Merge branch '2.0' into 2.1 2017-02-28 14:25:38 +01:00
Julien Duponchelle
70e2b87ff0
Patch hostname in configuration file even if name is unsync
Ref https://github.com/GNS3/gns3-gui/issues/1889
2017-02-27 12:48:05 +01:00
Julien Duponchelle
7407ab88b3
Fix a failing test on Python 3.6 2017-02-20 10:56:48 +01:00
Julien Duponchelle
e892e5dfab
Manage base configuration on server
Fix #786
2017-02-03 13:19:14 +01:00
Julien Duponchelle
1ed88eda85
Fix version check for VPCS 2017-01-23 21:11:52 +01:00
Julien Duponchelle
f7d87f09f1
Fix VPCS configuration is overwritten on project load
Fix https://github.com/GNS3/gns3-gui/issues/1766
2017-01-09 17:07:42 +01:00
Julien Duponchelle
d0f65aebff
Fix Can't delete link between docker VM after they were in use
Fix #818
2016-12-14 12:01:34 +01:00
Julien Duponchelle
db8296f548
Support multiple client connected to the same VPCS console
Ref #770
2016-11-08 19:44:12 +01:00
Julien Duponchelle
66a789672d
Merge branch 'master' into 2.0 2016-10-19 17:06:43 +02:00
Julien Duponchelle
72fe5d3489
Merge branch 'master' into 2.0 2016-08-29 14:08:23 +02:00
grossmj
d79fb231d3 Use uBridge for VirtualBox connections plus some cleaning. Ref #267. 2016-06-24 18:35:39 -06:00
grossmj
04022677bd Use uBridge for Qemu connections. Ref #267.
Handle packet captures for VPCS & Qemu nodes. Fixes #548.
2016-06-23 16:56:06 -06:00
Julien Duponchelle
4c3bfde97e
Fix test suite after VPCS changes for using ubridge 2016-06-23 12:10:18 +02:00