mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-10-12 21:45:41 +03:00
Markers no longer disqualify the kernel datapath. They ride the NIO like on the relay path and attach to the veth host end through uBridge's marker add_kernel/delete_kernel/enable_kernel commands (AF_PACKET taps, same BPF/direction/signal semantics as the relay mark filter). - base_node: marker anchors are now polymorphic (relay bridge name or kernel veth host interface); the reconcile loop is datapath-agnostic and DockerVM overrides the add/delete/enable primitives to translate the commands. Marker-name validation extracted for both add paths. - docker_vm: kernel NIO connect/update apply markers on the veth anchor; link deletion tears markers down explicitly (the veth survives the link, unlike a relay bridge whose death drops its filters). - controller: eligibility and start_marker no longer exclude markers or project-level marker definitions; the kernel NIO carries the capture node's marker specs. - NIO creation accepts markers on kernel NIOs (filters still rejected).
68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
#
|
|
# Copyright (C) 2026 GNS3 Technologies Inc.
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
"""
|
|
Interface for kernel-datapath bridge NIOs.
|
|
|
|
A NIO of this type instructs the node to enslave its adapter's veth host end
|
|
into the named Linux kernel bridge instead of wiring a uBridge UDP relay.
|
|
Frames then flow entirely in the kernel (veth -> bridge -> veth). Packet
|
|
filters are not available on this datapath (they live in the uBridge relay);
|
|
markers and packet capture are served by uBridge's AF_PACKET modules on the
|
|
veth host end (marker add_kernel / capture start_kernel).
|
|
"""
|
|
|
|
from .nio import NIO
|
|
|
|
|
|
class NIOBridge(NIO):
|
|
|
|
"""
|
|
Kernel-bridge NIO.
|
|
|
|
:param bridge: name of the per-link Linux kernel bridge
|
|
"""
|
|
|
|
def __init__(self, bridge):
|
|
|
|
super().__init__()
|
|
self._bridge = bridge
|
|
|
|
@property
|
|
def bridge(self):
|
|
"""
|
|
Returns the kernel bridge name.
|
|
|
|
:returns: bridge name
|
|
"""
|
|
|
|
return self._bridge
|
|
|
|
def __str__(self):
|
|
|
|
return "NIO bridge"
|
|
|
|
def asdict(self):
|
|
|
|
return {
|
|
"type": "nio_bridge",
|
|
"bridge": self._bridge,
|
|
"suspend": self._suspended,
|
|
"filters": self._filters,
|
|
"markers": self._markers,
|
|
}
|