36 Commits

Author SHA1 Message Date
YueGuobin
72dc10a669
controller: allow markers and packet filters on Ethernet switch links
The brctl Ethernet switch runs a per-port uBridge relay, so it can host
the mark filter and packet filters like any uBridge-backed node. Add
ethernet_switch to _MARKER_CAPABLE_TYPES and _get_filter_node, narrow the
UDPLink.update() NIO-PUT skip down to the Dynamips-hosted ethernet_hub,
and expose the matching compute endpoints: PUT nio (filter/marker
reapply) plus the per-marker toggle/pause/resume/delete/rebuild routes.

The ethernet_hub keeps its exclusion: its routes still wire into the
Dynamips hub, which has no uBridge of its own.
2026-08-21 21:41:51 +08:00
YueGuobin
350f2b24e7
fix: UDP port allocation race causing link self-loop (one-way links)
PortManager.get_free_udp_port had an unguarded find-then-add sequence.
A link allocates both ends concurrently (asyncio.gather in
UDPLink._prepare -> two POST /ports/udp) and FastAPI runs the sync
route handler in a threadpool, so both threads could probe the same
'free' port before either recorded it — handing lport == rport to both
ends. uBridge sets SO_REUSEADDR on UDP NIO sockets, so the double bind
succeeds silently and the kernel delivers everything to the last-bound
socket: one node starves, the other echoes to itself.

Make every TCP/UDP allocate/reserve/release path atomic with an RLock,
and rebuild _link_data in UDPLink._prepare so reset() commits the fresh
port pair instead of re-sending the stale, already-released one.

Regression tests: threaded barrier allocation never returns duplicates
(red on the old code, UDP and TCP); reset() leaves exactly one mirrored
NIO pair per side with lport != rport (red on the old code).
2026-08-14 21:31:58 +08:00
YueGuobin
7c90fa9e64
fix(marker): ride markers on NIO so they survive node restart and project reload
Mirror the packet-filter lifecycle: marker specs now live on the NIO
(next to filters), ride in link_data from controller to compute on
every NIO create/update, and are reapplied by _ubridge_apply_markers
in add_ubridge_udp_connection (bridge creation / node restart) and
update_ubridge_udp_connection (NIO update — following the preceding
reset_packet_filters so markers survive filter changes).

Changes:
- NIO / NIOUDP: _markers property + asdict
- schemas/compute/nios.py: UDPNIO.markers field
- base_manager.create_nio: nio.markers from settings
- PUT /nio routes (vpcs/qemu/docker): nio.markers update
- base_node: _ubridge_apply_markers(bridge_name, nio) iterates
  nio.markers, computes pcap path, calls _ubridge_add_marker_filter
  + MarkerManager.register; called after _ubridge_apply_filters
- controller udp_link: _get_node_markers + _markers_for_node (route
  by capture_node_id); markers in create() and update() link_data
- /markers/start,stop endpoints: mirror spec onto nio.markers so
  the marker survives a subsequent node stop/start without a PUT
- tests: add markers field to NIO data expectations

This covers:
- Node restart: NIO persists, add_ubridge_udp_connection re-applies
- Filter update: reset wipes markers, _ubridge_apply_markers re-adds
- Project reload: create() carries markers in link_data → create_nio
- Immediate create: endpoint sets nio.markers immediately
2026-07-16 00:39:51 +08:00
YueGuobin
92a0fa6cd7
Fix packet filter validation tests: use correct ubridge filter type names 2026-05-31 00:38:03 +08:00
grossmj
5797de8f2d Fix tests 2021-12-02 19:14:55 +10:30
grossmj
eb3cb8a41f Migration to FastAPI 2020-10-02 16:07:50 +09:30
grossmj
d3ea67da24 Refactor tests
* Use pytest-aiohttp
* Use the async def / await syntax.
* Fix tests to run with Python 3.8
2020-06-16 13:59:03 +09:30
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
279b4d7b20 Fix link filters/suspend tests. 2018-03-19 18:25:56 +07:00
Julien Duponchelle
5fd842e54d
Suspend link 2017-07-19 17:30:25 +02:00
Julien Duponchelle
8a8de1e2df
BPF filter support
Fix https://github.com/GNS3/gns3-gui/issues/765
2017-07-11 17:30:29 +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
875051d05e
Prevent capture on non running node
Fix https://github.com/GNS3/gns3-gui/issues/1656
2016-11-22 16:05:57 +01:00
Julien Duponchelle
15d190d911
Increase timeout for link creation 2016-11-08 09:54:59 +01:00
Julien Duponchelle
4a5066c2a5
Fix Error while creating link: Port 0 is not allocated. when you have an invalid interface
Fix #744
2016-10-27 19:09:27 +02:00
Julien Duponchelle
99bdf37ec3
Prevent connect a node to himself
Fix https://github.com/GNS3/gns3-gui/issues/1553
2016-10-03 12:31:01 +02:00
Julien Duponchelle
da5e3d0e54
Dissallow serial to ethernet connection
Fix #678
2016-09-15 14:51:40 +02:00
Julien Duponchelle
3ce3f925ae
Fix creation of link when reloading a project
Fix https://github.com/GNS3/gns3-gui/issues/1457
2016-09-02 14:39:38 +02:00
Julien Duponchelle
134fed8fc5
Smart choice of host for UDP link 2016-08-25 19:14:29 +02:00
Julien Duponchelle
9b499dc51e
Export project with the GNS3VM 2016-07-21 20:17:36 +02:00
Julien Duponchelle
bda1812811
Avoid duplicate node name when reloading a project 2016-07-18 19:09:08 +02:00
Julien Duponchelle
91ec61b88d
Check topology schema when loading/saving it
Fix #583
2016-07-11 15:36:52 +02:00
Julien Duponchelle
4c3bfde97e
Fix test suite after VPCS changes for using ubridge 2016-06-23 12:10:18 +02:00
grossmj
2bde02d459 Controller side unique node name allocation. Ref #541. 2016-06-11 17:31:30 -06:00
Julien Duponchelle
54747ee618
Support for link event, fix link not correctly deleted 2016-05-18 18:37:18 +02:00
grossmj
ef7b4ef020 Fixes tests and some PEP8. 2016-05-11 15:19:00 -06:00
grossmj
5a76f81271 Refactoring to use a common node class for all VMs and other (future) objects. 2016-05-11 11:35:36 -06:00
Julien Duponchelle
264254e657
Captures written in the captures directory on the controller 2016-04-26 17:10:33 +02:00
Julien Duponchelle
1ce576c020
Stream pcap from compute to controller to client 2016-04-22 16:22:03 +02:00
Julien Duponchelle
1a22fb9250
Expose the capture status in controller link API 2016-04-21 16:11:42 +02:00
Julien Duponchelle
04a1b2df3b
Method for start / stop capture on a link
Ref https://github.com/GNS3/gns3-gui/issues/1117
2016-04-21 12:14:09 +02:00
Julien Duponchelle
58d4a529d4
Rename hypervisor to compute
Fix #487
2016-04-15 17:59:59 +02:00
Julien Duponchelle
ed291da566
Rebuild doc 2016-03-14 20:37:07 +01:00
Julien Duponchelle
9062490be3
API for deleting a list 2016-03-14 17:40:27 +01:00
Julien Duponchelle
65099b9364
Link API should work now need to implement the client 2016-03-11 20:13:52 +01:00