Commit Graph
61 Commits
Author SHA1 Message Date
YueGuobin c7ffe919dc feat: VPCS kernel datapath
A VPCS node's single adapter anchors on a persistent TAP the server
creates (tap create + set_owner via uBridge) and the vpcs process
attaches to by name: -e -d <gp{id8}e0p0> -n, the same
server-creates/guest-attaches shape as QEMU's netdev. -n (a vpcs fork
feature) keeps the guest's ip command from ifconfig'ing the anchor on
the host; the vpcs build is probed once per binary identity
(vpcs_tap capability, usage scan) and gates kernel links together
with ubridge_tap — anything else keeps the node on the relay (the
legacy local UDP tunnel on a stock binary, an AF_PACKET endpoint on
the anchor with a capable one).

VPCSVM takes KernelDatapathMixin: _connect_nio dispatches kernel
(enslave into the per-link bridge) / relay-on-anchor / legacy,
captures pick capture start_kernel vs the bridge engine, stop runs
under an execute lock and terminates the process before deleting the
anchor TAPs (a held device refuses deletion), and the duplicate-port
guard backstops the controller's. The NIO routes accept nio_bridge
and write suspend back on update.

_delete_anchor_taps verifies each tap is gone from sysfs and retries
a bounded three times: a holder can release its fd a moment after its
process was reaped (vpcs's daemon parent kills its console child and
exits first), so the unconditional delete raced EBUSY and leaked the
anchor intermittently.

The vpcs side needs IFNAMSIZ (16) instead of its own IFNAMESIZ (12)
for the -d name buffer — anchor names are 14 chars and truncated to a
nonexistent device, which TUNSETIFF then tries to create without
CAP_NET_ADMIN (fixed in the vpcs fork).

e2e (tests/e2e/test_vpcs_kernel_datapath.py): kernel and relay
scenarios green against the real binary — real ICMP both ways, §E.1/§
E.2 on the anchors, delay/suspend/capture, link delete/re-create,
node stop/restart self-heal, zero leftovers; the relay control passes
with both the fork binary and a stock one.
2026-10-12 17:19:57 +08:00
Mark Paronyan 552c0ca3e0 refactor: use f-strings in remaining compute modules 2026-10-03 19:44:01 +03:00
Mark Paronyan b622ccae7b refactor: declare explicit public API in package __init__ modules 2026-10-03 19:43:59 +03:00
Mark Paronyan b9cdac487c style: sort imports in compute, db and services modules 2026-10-02 12:43:26 +03:00
Mark Paronyan 2542ad4647 fix(typing): resolve mypy errors in compute.vpcs.vpcs_vm 2026-09-29 09:38:24 +03:00
Mark Paronyan a0450b6bce refactor: ruff autofixes 2026-09-27 15:55:10 +03:00
grossmj bc1016474e Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
2023-12-05 22:15:50 +10:00
grossmj 24bb0ca419 Add custom executable paths on Windows 2023-12-05 21:24:40 +10:00
grossmj 27d9063e56 Merge 2.2 2023-01-05 12:38:00 +08:00
grossmj b3a6b9173b Fix reset console. Fixes #1619 2022-12-31 09:43:17 +08:00
grossmj 1148dbc48e Fix issue when calling reset_console with running VPCS and Qemu nodes. Ref #1619 2022-12-30 20:54:37 +08:00
grossmj cefab8d362 Rename __json__() to asdict() 2021-04-17 23:34:28 +09:30
grossmj c021e21309 Use black with -l 120 param. 2021-04-13 18:46:50 +09:30
grossmj f928738bd5 Use pyupgrade with --py36-plus param. 2021-04-13 18:37:58 +09:30
grossmj 30ebae207f Use Pydantic to validate the server config file. 2021-04-12 17:02:23 +09:30
grossmj 9e6ccc3f61 Fix bug when starting of vpcs stopped with "quit". Fixes https://github.com/GNS3/gns3-gui/issues/3110 2021-02-14 13:50:10 +10:30
grossmj 128e494134 Stop uBridge if VPCS node has been terminated. Ref https://github.com/GNS3/gns3-gui/issues/3110 2021-01-27 21:03:19 +10:30
grossmj a17119187b Fix remote packet capture for Dynamips. 2019-04-01 20:58:18 +07:00
grossmj 4cc5dbc228 Fix remote packet capture and make sure packet capture is stopped when deleting an NIO. Fixes https://github.com/GNS3/gns3-gui/issues/2753 2019-04-01 19:47:31 +07:00
grossmj 380224dca1 Change how VPCS executable is searched. 2019-03-06 23:15:05 +07:00
grossmj 456ef1348b Fix DeprecationWarning: invalid escape sequence. Fixes https://github.com/GNS3/gns3-gui/issues/2670 2019-01-17 18:01:58 +07:00
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 9de13c570c Merge branch '2.1' into 2.2
# Conflicts:
#	gns3server/compute/builtin/nodes/cloud.py
#	gns3server/compute/docker/docker_vm.py
#	gns3server/compute/dynamips/nodes/ethernet_switch.py
#	gns3server/compute/iou/iou_vm.py
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/compute/virtualbox/virtualbox_vm.py
#	gns3server/compute/vmware/vmware_vm.py
#	gns3server/controller/__init__.py
#	gns3server/version.py
#	gns3server/web/web_server.py
2018-10-04 15:44:13 +02:00
grossmj 4d95e0b51f Catch some exceptions. 2018-09-28 15:04:38 +02:00
grossmj 21a1800edc Merge branch '2.1' into 2.2
# Conflicts:
#	gns3server/controller/__init__.py
#	gns3server/controller/export_project.py
#	gns3server/controller/import_project.py
#	gns3server/controller/project.py
#	gns3server/version.py
2018-04-28 19:41:12 +07:00
grossmj 20294e284c Fix exception from send_signal() on Windows. 2018-04-27 17:00:28 +07:00
grossmj e52775fa3a Support for console type "none". 2018-03-24 18:11:21 +07:00
grossmj 90ce6093d8 Some spring cleaning. 2018-03-15 14:17:39 +07:00
grossmj 5f14f8eb46 Default VPCS name format is now PC-{0}. 2018-01-09 23:40:35 +07:00
ziajka 3d85bba9d4 Don't create directory structure during json dump. Fixes #2270 2017-10-02 10:41:57 +02:00
Julien Duponchelle 0854c04687 API for duplication a Node
Support:
* VPCS
* Dynamips router
* Ethernet switch

Ref #1065
2017-07-24 10:08:22 +02:00
Julien Duponchelle 9e2759a3f2 Merge branch '2.1' into remove_use_ubrige 2017-07-12 12:46:10 +02:00
Julien Duponchelle 86f1201276 Support packet filtering for dynamips
Fix #1109
2017-07-12 12:08:02 +02:00
Julien Duponchelle 04303ca00c Fix VPCS ubridge usage 2017-07-12 09:55:23 +02:00
Julien Duponchelle d112da400e Remove use_ubridge flag
Ref #1115
2017-07-11 13:58:59 +02:00
Julien Duponchelle 557924e91a Use ubridge for dynamips routers
Ref #1109
2017-07-10 20:38:28 +02:00
Julien Duponchelle 4097bab565 Apply feedback from @grossmj 2017-07-05 16:36:39 +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 bb8097a052 Merge remote-tracking branch 'origin/master' into 2.1 2017-06-19 10:44:52 +02:00
ziajka 7235a312ab Escaping VPCS name in regex #1067 2017-06-09 09:14:25 +02:00
Julien Duponchelle 1ab9ca2333 Merge branch '2.0' into 2.1 2017-02-28 14:25:38 +01:00
Julien Duponchelle 70e2b87ff0 Patch hostname in configuration file even if name is unsync
Ref https://github.com/GNS3/gns3-gui/issues/1889
2017-02-27 12:48:05 +01:00
Julien Duponchelle 7407ab88b3 Fix a failing test on Python 3.6 2017-02-20 10:56:48 +01:00
Julien Duponchelle e892e5dfab Manage base configuration on server
Fix #786
2017-02-03 13:19:14 +01:00
Julien Duponchelle 1ed88eda85 Fix version check for VPCS 2017-01-23 21:11:52 +01:00
Julien Duponchelle f7d87f09f1 Fix VPCS configuration is overwritten on project load
Fix https://github.com/GNS3/gns3-gui/issues/1766
2017-01-09 17:07:42 +01:00
Julien Duponchelle d0f65aebff Fix Can't delete link between docker VM after they were in use
Fix #818
2016-12-14 12:01:34 +01:00
Julien Duponchelle db8296f548 Support multiple client connected to the same VPCS console
Ref #770
2016-11-08 19:44:12 +01:00
Julien Duponchelle 66a789672d Merge branch 'master' into 2.0 2016-10-19 17:06:43 +02:00