From 27356da62d0a9c5cc6c18ee577f84ed961bb4f9a Mon Sep 17 00:00:00 2001 From: YueGuobin Date: Tue, 14 Jul 2026 23:51:52 +0800 Subject: [PATCH] fix(marker): set nio.markers on iou/dynamips/cloud nio update The PUT /nio (update) endpoints for iou, dynamips and cloud copied nio.filters from the request body but never copied nio.markers. So adding a marker (e.g. a project-level global definition) to an already-created link of these node types left nio.markers empty: no mark filter was installed on uBridge and no marker.match signal was emitted. vpcs/qemu/docker already set it; mirror them (getattr for the Union NIO types). --- gns3server/api/routes/compute/cloud_nodes.py | 2 ++ gns3server/api/routes/compute/dynamips_nodes.py | 1 + gns3server/api/routes/compute/iou_nodes.py | 2 ++ 3 files changed, 5 insertions(+) diff --git a/gns3server/api/routes/compute/cloud_nodes.py b/gns3server/api/routes/compute/cloud_nodes.py index 8453ba0d8..42e691235 100644 --- a/gns3server/api/routes/compute/cloud_nodes.py +++ b/gns3server/api/routes/compute/cloud_nodes.py @@ -184,6 +184,8 @@ async def update_cloud_nio( nio.filters.clear() if nio_data.filters: nio.filters = nio_data.filters + # NIO type is a Union (Ethernet/TAP/UDP); only UDPNIO carries markers. + nio.markers = getattr(nio_data, "markers", None) or {} await node.update_nio(port_number, nio) return nio.asdict() diff --git a/gns3server/api/routes/compute/dynamips_nodes.py b/gns3server/api/routes/compute/dynamips_nodes.py index 08eebb0d7..70d2b10c6 100644 --- a/gns3server/api/routes/compute/dynamips_nodes.py +++ b/gns3server/api/routes/compute/dynamips_nodes.py @@ -235,6 +235,7 @@ async def update_nio( nio.filters.clear() if nio_data.filters: nio.filters = nio_data.filters + nio.markers = nio_data.markers or {} await node.slot_update_nio_binding(adapter_number, port_number, nio) return nio.asdict() diff --git a/gns3server/api/routes/compute/iou_nodes.py b/gns3server/api/routes/compute/iou_nodes.py index 5be4fdd23..99544043d 100644 --- a/gns3server/api/routes/compute/iou_nodes.py +++ b/gns3server/api/routes/compute/iou_nodes.py @@ -254,6 +254,8 @@ async def update_iou_node_nio( nio.filters.clear() if nio_data.filters: nio.filters = nio_data.filters + # NIO type is a Union (Ethernet/TAP/UDP); only UDPNIO carries markers. + nio.markers = getattr(nio_data, "markers", None) or {} await node.adapter_update_nio_binding(adapter_number, port_number, nio) return nio.asdict()