8101 Commits

Author SHA1 Message Date
Jeremy Grossmann
dd19d96fbf
Merge pull request #3029 from tikD1337/fix/qemu-tap-partial-csum
fix(qemu): open the adapter TAP with vnet_hdr=off so relay links carry finished checksums
2026-10-24 09:20:16 +02:00
tikD1337
156b77000c fix(qemu): open the adapter TAP without a vnet header
The TAP netdev kept QEMU's default vnet_hdr, so virtio-net, e1000e, igb
and vmxnet3 guests offload TCP/UDP checksums (and TSO) to the TAP: their
frames carry only the pseudo-header sum in the checksum field. A kernel
bridge link finishes them, but the uBridge relay (cloud, NAT, hub, ...)
reads the TAP with libpcap and forwards the frames as they are, so DNS
and TCP through a cloud fail while ICMP and DHCP work.

With vnet_hdr=off QEMU stops offering the offloads and the guest (or the
emulated NIC) sends finished frames, as with the 2.x socket netdev.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:28:53 +02:00
Jeremy Grossmann
2c10782635
Merge pull request #3026 from tikD1337/fix/node-names-adapter-type
fix: node names from templates with "+" and custom adapters with a null type
2026-10-23 14:08:47 +02:00
Jeremy Grossmann
efc77267fa
Merge pull request #3025 from tikD1337/fix/qemu-kvmclock-hyperv
fix(qemu): turn off kvmclock and TSC deadline timer on Hyper-V hosts without a usable TSC
2026-10-23 14:04:53 +02:00
tikD1337
7e9ecf2a61 docs(config): add the Qemu kvmclock setting to the sample config
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 13:50:04 +02:00
tikD1337
dd69a01fba fix(controller): make node names from template names valid hostnames
Creating a node from a template whose name has characters invalid in a
hostname, such as "MikroTik CCR1072-1G-8S+", failed on the compute with
"'MikroTikCCR1072-1G-8S+-1' is an invalid name to create a Qemu node":
the template name was only stripped of spaces.

Replace the other invalid characters by hyphens, following the rules the
compute validates node names with (RFC 1123 for Qemu and Docker, IOS for
Dynamips and IOU), as project import already does for existing nodes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 09:56:49 +02:00
tikD1337
b9cf9158ca fix(compute): ignore null settings of custom adapters
When only a port is renamed in a template's custom adapters, the adapter is
saved with "adapter_type": null. The emulators read it with
custom_adapter.get("adapter_type", self._adapter_type), which returns None
for a key set to null: QEMU was then started with "-device None,..." and
died ("'None' is not a valid device model name"), GNS3 only reporting
"Could not start Telnet QEMU console". VirtualBox and VMware read the
adapter type the same way.

Drop the null settings in _get_custom_adapter_settings so the node's own
adapter type (and MAC address) applies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 09:56:48 +02:00
Tikhon Ulyanov
23edfc0269
Merge branch '3.1' into fix/qemu-kvmclock-hyperv 2026-10-22 19:28:50 +02:00
Jeremy Grossmann
4d55cb1b9c
Merge pull request #3023 from GNS3/dependabot/pip/3.1/langchain-aws-gte-1.9.0
Update langchain-aws requirement from >=1.8.1 to >=1.9.0
2026-10-22 18:43:12 +02:00
dependabot[bot]
fdf6e36555
Update langchain-aws requirement from >=1.8.1 to >=1.9.0
Updates the requirements on [langchain-aws](https://github.com/langchain-ai/langchain-aws) to permit the latest version.
- [Release notes](https://github.com/langchain-ai/langchain-aws/releases)
- [Commits](https://github.com/langchain-ai/langchain-aws/compare/langchain-aws==1.8.1...langchain-aws==1.9.0)

---
updated-dependencies:
- dependency-name: langchain-aws
  dependency-version: 1.9.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-22 16:26:05 +00:00
Jeremy Grossmann
ab5eb192ad
Merge pull request #3024 from GNS3/dependabot/pip/3.1/sentry-sdk-gte-2.72.0-and-lt-3
Update sentry-sdk requirement from <3,>=2.70.0 to >=2.72.0,<3
2026-10-22 18:25:39 +02:00
Jeremy Grossmann
85493aad77
Merge pull request #3022 from GNS3/dependabot/pip/3.1/langchain-ollama-gte-1.1.0
Update langchain-ollama requirement from >=1.0.1 to >=1.1.0
2026-10-22 18:24:52 +02:00
Jeremy Grossmann
532b2cdf8d
Merge pull request #3021 from GNS3/dependabot/pip/3.1/rust-just-1.59.0
Bump rust-just from 1.58.0 to 1.59.0
2026-10-22 18:24:26 +02:00
Jeremy Grossmann
bd5e3c6412
Merge pull request #3020 from GNS3/dependabot/pip/3.1/nornir-gte-3.6.0
Update nornir requirement from >=3.5.0 to >=3.6.0
2026-10-22 18:24:03 +02:00
tikD1337
53164eccee fix(qemu): turn off kvmclock and TSC deadline timer on Hyper-V hosts without a usable TSC
When the compute is itself a Hyper-V guest without an invariant TSC (e.g.
the GNS3 VM on hosts whose CPU lacks TSC scaling), Linux falls back to the
hyperv_clocksource_tsc_page clocksource and the guest timekeeping KVM
derives from the TSC is broken with recent kernels:

- kvmclock runs thousands of times too fast: Linux guests (MikroTik
  RouterOS, ...) panic with "watchdog: BUG: soft lockup - CPU#0 stuck for
  29604s" and reboot in a loop right after boot;
- TSC deadline timers fire far too late: guests with -cpu host hang.

The only workaround so far was -machine accel=tcg, i.e. no KVM at all.

Add a kvmclock setting to the [Qemu] section (auto, enabled, disabled).
In auto mode, KVM guests started on a host whose clocksource is a Hyper-V
one get kvmclock and tsc-deadline turned off: on the -cpu given in the
additional options (unless it sets these features itself), otherwise on
QEMU's default CPU model.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:38:10 +02:00
dependabot[bot]
9549425924
Update sentry-sdk requirement from <3,>=2.70.0 to >=2.72.0,<3
Updates the requirements on [sentry-sdk](https://github.com/getsentry/sentry-python) to permit the latest version.
- [Release notes](https://github.com/getsentry/sentry-python/releases)
- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-python/compare/2.70.0...2.72.0)

---
updated-dependencies:
- dependency-name: sentry-sdk
  dependency-version: 2.72.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-22 11:22:58 +00:00
dependabot[bot]
3d304a01ea
Update langchain-ollama requirement from >=1.0.1 to >=1.1.0
Updates the requirements on [langchain-ollama](https://github.com/langchain-ai/langchain) to permit the latest version.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-ollama==1.0.1...langchain-ollama==1.1.0)

---
updated-dependencies:
- dependency-name: langchain-ollama
  dependency-version: 1.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-22 11:22:47 +00:00
dependabot[bot]
176fc4bb5d
Bump rust-just from 1.58.0 to 1.59.0
Bumps [rust-just](https://github.com/gnpaone/rust-just) from 1.58.0 to 1.59.0.
- [Release notes](https://github.com/gnpaone/rust-just/releases)
- [Changelog](https://github.com/gnpaone/rust-just/blob/master/CHANGELOG.md)
- [Commits](https://github.com/gnpaone/rust-just/compare/1.58.0...1.59.0)

---
updated-dependencies:
- dependency-name: rust-just
  dependency-version: 1.59.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-22 11:22:37 +00:00
dependabot[bot]
926900dd08
Update nornir requirement from >=3.5.0 to >=3.6.0
Updates the requirements on [nornir](https://github.com/nornir-automation/nornir) to permit the latest version.
- [Release notes](https://github.com/nornir-automation/nornir/releases)
- [Changelog](https://github.com/nornir-automation/nornir/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/nornir-automation/nornir/compare/v3.5.0...v3.6.0)

---
updated-dependencies:
- dependency-name: nornir
  dependency-version: 3.6.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-22 11:22:32 +00:00
grossmj
09ad486966
Development on 3.1.0.dev8 2026-10-21 16:04:23 +07:00
grossmj
2ea13ca49a
Release v3.1.0a7 v3.1.0a7 2026-10-21 15:47:16 +07:00
grossmj
179e7e0d17
Bundle web-ui v3.1.0a7 2026-10-21 15:24:00 +07:00
Jeremy Grossmann
c1fdd55cb3
Merge pull request #3018 from aastefanov/3.1
Change project creator on import
2026-10-21 04:44:35 +02:00
Albert Stefanov
cf2b455bf1 Reformat file
Signed-off-by: Albert Stefanov <aastefanov@outlook.com>
2026-10-20 20:44:21 +03:00
Albert Stefanov
63d7fec8a7 Change project creator on import
Fixes #3017

Signed-off-by: Albert Stefanov <aastefanov@outlook.com>
2026-10-20 20:29:51 +03:00
grossmj
68c929e224
Sync appliances 2026-10-20 18:53:07 +07:00
Jeremy Grossmann
ada64e39a1
Merge pull request #3016 from GNS3/qemu-minimum-version-support
Add QEMU support documentation and enforce minimum version requirement
2026-10-20 13:14:38 +02:00
grossmj
a82b06d676
feat: add QEMU support documentation and enforce minimum version requirement 2026-10-20 18:01:25 +07:00
Jeremy Grossmann
aab5432a5f
Merge pull request #3015 from GNS3/bugfix/3007
Fix SPICE socket binding failure
2026-10-20 12:23:59 +02:00
grossmj
cfba748677
fix: SPICE socket binding failure 2026-10-20 17:16:44 +07:00
Jeremy Grossmann
1498282c6b
Merge pull request #3014 from GNS3/remove-windows-code
Remove Windows code
2026-10-20 07:04:37 +02:00
grossmj
437f68961b
chore: clean up Windows specific code 2026-10-20 11:51:29 +07:00
Jeremy Grossmann
9e9f1316aa
Merge pull request #3009 from markparonyan/3.1
refactor(gns3server,tests): ruff fixes
2026-10-19 18:49:33 +02:00
grossmj
569b46d272
refactor: fix lint issues 2026-10-19 23:28:49 +07:00
Jeremy Grossmann
68b5e89bfa
Merge branch '3.1' into 3.1 2026-10-19 18:11:29 +02:00
Jeremy Grossmann
b956bba917
Merge pull request #3013 from cristian-ciobanu/feat-#2496
feat(cloud): attach TAP interfaces to existing Linux bridges
2026-10-19 17:34:34 +02:00
Cristi
53aa7ab0d9 fix(cloud): keep ports_mapping getter and setter adjacent 2026-10-19 16:02:39 +03:00
Cristi
a9f5306f16 feat(cloud): attach TAP interfaces to existing Linux bridges 2026-10-19 15:42:18 +03:00
Jeremy Grossmann
e57acfb7b1
Merge pull request #3011 from cristian-ciobanu/feat-#3049
feat(qemu): support two CD/DVD images and consistent ISO handling
2026-10-19 04:42:18 +02:00
Cristi
58e5591935 feat(qemu): support SATA CD-ROM interfaces
- Add per-drive IDE/SATA selection with backward-compatible IDE defaults
- Persist interfaces in nodes, templates, and appliance imports
- Add database migration support for versioned and unversioned databases
- Prevent partial updates when rejecting live interface changes
- Validate interfaces and support SATA media changes through the monitor
2026-10-18 22:07:37 +03:00
Jeremy Grossmann
a1e483b894
Merge pull request #3012 from yueguobin/fix/marker-replay-remote-computes
fix: fetch remote-compute marker pcaps in tag replay
2026-10-18 14:06:25 +02:00
YueGuobin
33b28a3b5f
fix: fetch remote-compute marker pcaps in tag replay
Marker pcaps are written by uBridge on the compute that hosts the capture
node. The tag replay only looked in the project folder on the controller.
So a source from a remote compute showed count 0 and no frames, with no
error. Its frame detail returned 404 and said nothing ever matched (#3010).

Each source now gets its pcap through the compute of its capture node.
Local files are read as before. Remote files are fetched over HTTP on
every acquire into a small cache (32 idle files, cleared at shutdown).
A file is replaced only when its bytes changed. This keeps the old mtime,
so the sharkd session for that file stays alive.

When a compute cannot be reached, its source now shows an error message
in the timeline instead of just showing nothing. The detail endpoint now
returns an error instead of 404.
2026-10-18 16:36:11 +08:00
Cristi
84b4c05b9f feat(qemu): support two CD/DVD images and consistent ISO handling 2026-10-17 23:08:11 +03:00
Jeremy Grossmann
d047ca0a5f
Merge pull request #3006 from yueguobin/feat/vxlan-cross-compute
feat: cross-compute VXLAN kernel datapath
2026-10-17 13:39:13 +02:00
Mark Paronyan
4c311baabf
refactor(gns3server,tests): StrEnum, ASYNC109 and others 2026-10-17 12:02:53 +03:00
Mark Paronyan
b7e6c02647
refactor: ruff autofixes 2026-10-17 11:43:36 +03:00
Mark Paronyan
54139dced2
chore(ruff): target version to py311 2026-10-17 11:43:20 +03:00
YueGuobin
0d91d9252b
feat: default vxlan_dstport to the IANA VXLAN port 4789
The custom 14789 was picked to keep our demux socket off the ports other
VXLAN software listens on, but a private default surprises operators and
blocks interop with gear that pins the standard port. Default to the
IANA-assigned 4789 instead; the gns3_server.conf override is unchanged
for computes where swarm overlay/flannel-style VXLAN already owns 4789.

Mixed-version deployments must pin the port on every compute until they
all run the new default, or the two tunnel ends will disagree.
2026-10-17 14:11:00 +08:00
YueGuobin
6679774de7
docs: spell out how the VXLAN lower device is chosen
Per tunnel, not a host setting: a connected UDP socket runs the
kernel's route lookup for the peer, the chosen source address is
matched back to its owning interface, and that interface becomes
the dev= (and with it the derived MTU and the outer source
address). Different peers may ride different lower devices with
independently derived MTUs; an unresolvable peer is a wiring error
that degrades the link to the relay. Re-creation re-resolves too,
so route changes ride the same node-start / link-recreation paths
as MTU changes.
2026-10-17 14:11:00 +08:00
YueGuobin
577be9b94e
docs: pin down the VXLAN MTU derivation and its re-derivation paths
Verified against the running kernel's sources (7.2.6): the 50-byte
headroom is 20 outer IPv4 + 8 UDP + 8 VXLAN + 14 inner Ethernet
header (vxlan_headroom(), include/net/vxlan.h); the vxlan driver has
no NETDEV_CHANGEMTU handler so a live tunnel never follows its lower
device, while the bridge does follow its ports at runtime
(NETDEV_CHANGEMTU -> br_mtu_auto_adjust). Document the operational
consequence: the wiring path re-creates the device on every node
start and link (re)creation, so raising the underlay MTU on both
computes and stop/start-ing the nodes is the fix — no manual
ip link needed.
2026-10-17 14:11:00 +08:00