fix(controller): don't push the synthetic suspend filter to kernel links

update_suspend() piggybacks on the filter system: get_active_filters()
returns {"frequency_drop": [-1]} while a link is suspended so relay-based
node types drop all traffic at the uBridge filter. Kernel-datapath links
implement suspend natively via interface carrier, and pushing the
synthetic filter tripped the compute-side guard, making suspend fail
with 409 on every kernel link (and leaving controller/kernel state torn).
_get_node_filters() now returns empty filters for kernel links.
This commit is contained in:
YueGuobin committed 2026-10-06 00:21:07 +08:00
1 parent 37d7b9121e
commit 58b97b4ce5
2 files changed
+36

No files matched your search

+7
View File
@@ -88,6 +88,13 @@ class UDPLink(Link):
:returns: Tuple of (node1_filters, node2_filters)
"""
# Kernel-datapath links implement suspend natively (interface carrier
# driven by the NIO suspend flag). The synthetic frequency_drop filter
# that get_active_filters() injects for suspended links is a
# relay-datapath emulation mechanism — sending it would trip the
# compute-side kernel guard, so kernel links always push empty filters.
if self.kernel_datapath:
return {}, {}
filter_node = self._get_filter_node()
return (
self.get_active_filters() if filter_node == node1 else {},