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