mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
marker: drop deleted marker from port NIO cache to stop empty pcap on restart
Deleting a marker while its node was stopped, then starting the node, recreated
an empty pcap. Root cause: delete_marker_capture removed the uBridge filter and
the pcap file but not the marker spec cached on the port NIO (nio.markers) —
the data source _ubridge_apply_markers reads on node start. The stale spec
reinstalled the marker when uBridge came up.
This was a regression from switching stop_marker off update() (which re-sent
the NIO and implicitly refreshed nio.markers) to the fine-grained
node.delete(/markers/{name}) path.
Fix: make the delete port-aware so the compute can locate the NIO. The DELETE
marker route becomes /adapters/{a}/ports/{p}/markers/{name} across all six
node types; the handler resolves the NIO via get_nio and passes it to
delete_marker_capture, which now pops the marker from nio.markers. get_nio
works regardless of uBridge state, so the stopped-node case is covered. The
controller's stop_marker targets the capture side's adapter/port.
This commit is contained in:
10 files changed
+80
-21
No files matched your search
@@ -273,6 +273,20 @@ async def test_delete_marker_capture_sends_delete_filter(compute_project, manage
|
||||
assert ("m", "L1") not in node._marker_filter_bridges
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_delete_marker_capture_drops_from_nio_markers(compute_project, manager):
|
||||
# The marker spec cached on the port NIO (nio.markers) is what
|
||||
# _ubridge_apply_markers reads on node start. delete_marker_capture must drop
|
||||
# it, else deleting a marker while the node is stopped leaves the spec in
|
||||
# nio.markers and starting the node reinstalls it (empty pcap reappears).
|
||||
node = VPCSVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager)
|
||||
nio = NIOUDP(1234, "127.0.0.1", 4321)
|
||||
nio.markers = {"m": {"bpf": "icmp", "tag": None, "link_id": "L1",
|
||||
"direction": None, "enabled": True}}
|
||||
await node.delete_marker_capture("m", "L1", nio)
|
||||
assert "m" not in nio.markers
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_rebuild_marker_filter_delete_then_add(compute_project, manager):
|
||||
# rebuild re-installs a single filter (delete_packet_filter + add) with the
|
||||
|
||||
Reference in new issue
Block a user