From 4d85e517b4f0ca279b17e279087d9a036ca3e6ed Mon Sep 17 00:00:00 2001 From: grossmj Date: Tue, 24 Feb 2026 21:21:03 +0800 Subject: [PATCH 1/6] Development on 2.2.57.dev2 --- gns3server/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gns3server/version.py b/gns3server/version.py index b4b765e96..c520f0086 100644 --- a/gns3server/version.py +++ b/gns3server/version.py @@ -23,8 +23,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "2.2.56.1" -__version_info__ = (2, 2, 56, 0) +__version__ = "2.2.57.dev2" +__version_info__ = (2, 2, 57, 99) if "dev" in __version__: try: From b658f7ff68d64621d2967b2185fade8cc391961c Mon Sep 17 00:00:00 2001 From: grossmj Date: Mon, 9 Mar 2026 17:10:00 +0800 Subject: [PATCH 2/6] Make sure the node shows as stopped when the wrap console cannot be stopped. Ref https://github.com/GNS3/gns3-registry/pull/1010 --- gns3server/compute/base_node.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gns3server/compute/base_node.py b/gns3server/compute/base_node.py index c95138e4b..182e10f9b 100644 --- a/gns3server/compute/base_node.py +++ b/gns3server/compute/base_node.py @@ -312,8 +312,10 @@ class BaseNode: Stop the node process. """ - await self.stop_wrap_console() - self.status = "stopped" + try: + await self.stop_wrap_console() + finally: + self.status = "stopped" def suspend(self): """ From 0624c1b9457bc65ba5c324c3dd566addb91c8082 Mon Sep 17 00:00:00 2001 From: grossmj Date: Tue, 10 Mar 2026 20:28:00 +0800 Subject: [PATCH 3/6] Deactivate 'use default IOU values' by default and update RAM/NVRAM values --- gns3server/compute/iou/iou_vm.py | 6 +++--- gns3server/schemas/iou_template.py | 6 +++--- tests/compute/iou/test_iou_vm.py | 2 +- tests/handlers/api/compute/test_iou.py | 8 ++++---- tests/handlers/api/controller/test_template.py | 6 +++--- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/gns3server/compute/iou/iou_vm.py b/gns3server/compute/iou/iou_vm.py index d82776ba6..9089d8e68 100644 --- a/gns3server/compute/iou/iou_vm.py +++ b/gns3server/compute/iou/iou_vm.py @@ -87,11 +87,11 @@ class IOUVM(BaseNode): self._serial_adapters = [] self.ethernet_adapters = 2 # one adapter = 4 interfaces self.serial_adapters = 2 # one adapter = 4 interfaces - self._use_default_iou_values = True # for RAM & NVRAM values - self._nvram = 128 # Kilobytes + self._use_default_iou_values = False # for RAM & NVRAM values + self._nvram = 256 # Kilobytes self._startup_config = "" self._private_config = "" - self._ram = 256 # Megabytes + self._ram = 1024 # Megabytes self._application_id = application_id self._l1_keepalives = False # used to overcome the always-up Ethernet interfaces (not supported by all IOSes). diff --git a/gns3server/schemas/iou_template.py b/gns3server/schemas/iou_template.py index 769234ee5..0a5602658 100644 --- a/gns3server/schemas/iou_template.py +++ b/gns3server/schemas/iou_template.py @@ -43,17 +43,17 @@ IOU_TEMPLATE_PROPERTIES = { "ram": { "description": "RAM in MB", "type": "integer", - "default": 256 + "default": 1024 }, "nvram": { "description": "NVRAM in KB", "type": "integer", - "default": 128 + "default": 256 }, "use_default_iou_values": { "description": "Use default IOU values", "type": "boolean", - "default": True + "default": False }, "startup_config": { "description": "Startup-config of IOU", diff --git a/tests/compute/iou/test_iou_vm.py b/tests/compute/iou/test_iou_vm.py index d3026295a..835f91fcf 100644 --- a/tests/compute/iou/test_iou_vm.py +++ b/tests/compute/iou/test_iou_vm.py @@ -262,7 +262,7 @@ def test_create_netmap_config(vm): async def test_build_command(vm): - assert await vm._build_command() == [vm.path, str(vm.application_id)] + assert await vm._build_command() == [vm.path, "-n", "256", "-m", "1024", str(vm.application_id)] def test_get_startup_config(vm): diff --git a/tests/handlers/api/compute/test_iou.py b/tests/handlers/api/compute/test_iou.py index aadb4fa04..97230143b 100644 --- a/tests/handlers/api/compute/test_iou.py +++ b/tests/handlers/api/compute/test_iou.py @@ -69,8 +69,8 @@ async def test_iou_create(compute_api, compute_project, base_params): assert response.json["project_id"] == compute_project.id assert response.json["serial_adapters"] == 2 assert response.json["ethernet_adapters"] == 2 - assert response.json["ram"] == 256 - assert response.json["nvram"] == 128 + assert response.json["ram"] == 1024 + assert response.json["nvram"] == 256 assert response.json["l1_keepalives"] is False @@ -130,8 +130,8 @@ async def test_iou_get(compute_api, compute_project, vm): assert response.json["project_id"] == compute_project.id assert response.json["serial_adapters"] == 2 assert response.json["ethernet_adapters"] == 2 - assert response.json["ram"] == 256 - assert response.json["nvram"] == 128 + assert response.json["ram"] == 1024 + assert response.json["nvram"] == 256 assert response.json["l1_keepalives"] is False diff --git a/tests/handlers/api/controller/test_template.py b/tests/handlers/api/controller/test_template.py index a80d7d090..2accbffde 100644 --- a/tests/handlers/api/controller/test_template.py +++ b/tests/handlers/api/controller/test_template.py @@ -592,14 +592,14 @@ async def test_iou_template_create(controller_api): "default_name_format": "IOU{0}", "ethernet_adapters": 2, "name": "IOU template", - "nvram": 128, + "nvram": 256, "path": "/path/to/i86bi_linux-ipbase-ms-12.4.bin", "private_config": "", - "ram": 256, + "ram": 1024, "serial_adapters": 2, "startup_config": "iou_l3_base_startup-config.txt", "symbol": ":/symbols/multilayer_switch.svg", - "use_default_iou_values": True, + "use_default_iou_values": False, "l1_keepalives": False} for item, value in expected_response.items(): From ffcfa4ccb124b27afa788c3ab5b629e4be9bf89b Mon Sep 17 00:00:00 2001 From: YueGuobin Date: Sat, 14 Mar 2026 23:59:36 +0800 Subject: [PATCH 4/6] feat(telnet_server): improve error handling and connection management - Catch OSError alongside ConnectionError in connection processing to handle more network errors - Move client_info retrieval inside try block to prevent AttributeError on failed connections - Replace bare except with specific exceptions (OSError, ConnectionError, asyncio.TimeoutError) - Improve error logging to include specific exception details and client information --- gns3server/utils/asyncio/telnet_server.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gns3server/utils/asyncio/telnet_server.py b/gns3server/utils/asyncio/telnet_server.py index b13c405cd..cc34a29a6 100644 --- a/gns3server/utils/asyncio/telnet_server.py +++ b/gns3server/utils/asyncio/telnet_server.py @@ -215,7 +215,7 @@ class AsyncioTelnetServer: await self._write_intro(network_writer, echo=self._echo, binary=self._binary, naws=self._naws) await connection.connected() await self._process(network_reader, network_writer, connection) - except ConnectionError: + except (ConnectionError, OSError): async with self._lock: network_writer.close() # await network_writer.wait_closed() # this doesn't work in Python 3.6 @@ -308,14 +308,15 @@ class AsyncioTelnetServer: # Replicate the output on all clients for connection_key in list(self._connections.keys()): - client_info = connection_key.get_extra_info("socket").getpeername() connection = self._connections[connection_key] + client_info = None try: + client_info = connection_key.get_extra_info("socket").getpeername() connection.writer.write(data) await asyncio.wait_for(connection.writer.drain(), timeout=10) - except: - log.debug(f"Timeout while sending data to client: {client_info}, closing and removing from connection table.") + except (OSError, ConnectionError, asyncio.TimeoutError) as e: + log.debug(f"Error sending data to client {client_info}: {e}, closing and removing from connection table.") connection.close() del self._connections[connection_key] From 646ff00ade2c1a55cac976b139be1c8abf061eeb Mon Sep 17 00:00:00 2001 From: grossmj Date: Mon, 23 Mar 2026 09:37:15 +0800 Subject: [PATCH 5/6] Sync appliances --- gns3server/appliances/alpinet.gns3a | 21 ++ .../asterfusion-vAsterNOS-VPP.gns3a | 22 +- gns3server/appliances/cisco-iou-l2.gns3a | 52 ++--- gns3server/appliances/cisco-iou-l3.gns3a | 40 ++-- gns3server/appliances/home-assistant.gns3a | 60 ++++++ gns3server/appliances/infix.gns3a | 28 +++ .../appliances/juniper-vJunos-router.gns3a | 6 +- gns3server/appliances/openwrt.gns3a | 15 ++ gns3server/appliances/opnsense.gns3a | 27 +++ gns3server/appliances/rhel.gns3a | 201 +++++------------- gns3server/appliances/tinycore-linux.gns3a | 16 +- .../appliances/windows-11-dev-env.gns3a | 29 +-- 12 files changed, 291 insertions(+), 226 deletions(-) create mode 100644 gns3server/appliances/alpinet.gns3a create mode 100644 gns3server/appliances/home-assistant.gns3a diff --git a/gns3server/appliances/alpinet.gns3a b/gns3server/appliances/alpinet.gns3a new file mode 100644 index 000000000..7a7ecacbe --- /dev/null +++ b/gns3server/appliances/alpinet.gns3a @@ -0,0 +1,21 @@ +{ + "appliance_id": "a2209414-88a6-403b-a2e1-477a057ec954", + "name": "AlpiNet", + "category": "guest", + "description": "AlpiNet is a lightweight Alpine-based networking toolbox for GNS3.\n\nCOMPREHENSIVE TOOLKIT:\n• Network: ip, ifconfig, ping, traceroute, mtr, arping, nmap, tcpdump\n• Performance: iperf, iperf3\n• HTTP/Web: curl, wget\n• TCP/UDP: netcat, socat, telnet\n• Advanced: ethtool, bridge-utils, vlan\n• Firewall: iptables, ip6tables, nftables\n• File Transfer: FTP (lftp), TFTP, SSH (scp/sftp), rsync\n• DNS: host, nslookup, dig\n• System: nano, tmux, screen, htop, bash\n• Text Tools: grep, sed, awk, jq, less\n• Compression: tar, gzip\n• Utilities: tree, file, openssl\n\nType 'alpinet-tools' in the container for the complete tool list.\n\nOptimized for network testing, troubleshooting, and education.", + "vendor_name": "AlpiNet Project", + "vendor_url": "https://www.alpinelinux.org/", + "product_name": "AlpiNet", + "registry_version": 4, + "status": "stable", + "maintainer": "nazDridoy", + "maintainer_email": "nazdridoy399@gmail.com", + "usage": "The /root directory is persistent across restarts. Type 'alpinet-tools' to see all available utilities.", + "symbol": "AlpiNet.svg", + "docker": { + "adapters": 1, + "image": "gns3/alpinet:latest", + "console_type": "telnet", + "environment": "TERM=xterm" + } +} diff --git a/gns3server/appliances/asterfusion-vAsterNOS-VPP.gns3a b/gns3server/appliances/asterfusion-vAsterNOS-VPP.gns3a index d8f8ed557..86016b329 100644 --- a/gns3server/appliances/asterfusion-vAsterNOS-VPP.gns3a +++ b/gns3server/appliances/asterfusion-vAsterNOS-VPP.gns3a @@ -1,7 +1,8 @@ { + "appliance_id": "4aa78f74-c769-43e0-9ef1-5dd2cf1909c6", "name": "Asterfusion AsterNOS-VPP", "category": "router", - "description": "AsterNOS-VPP leverages SONiC’s robust routing features and management capability with VPP’s high-performance data forwarding. It supports L3 routing, NAT, PPPoE, and VPN services. Minimum requirements: 4 vCPUs and 4GB RAM.", + "description": "AsterNOS-VPP leverages SONiC’s robust routing features and management capability with VPP’s high-performance data forwarding. It supports L3 routing, NAT, PPPoE, and VPN services. Minimum requirements: 4 vCPUs and 8GB RAM.", "vendor_name": "Asterfusion", "vendor_url": "https://cloudswit.ch/product/sonic-enterprise-distribution/#vAsterNOS", "documentation_url": "https://docs.asternos.com/routing", @@ -10,23 +11,32 @@ "status": "stable", "maintainer": "Asterfusion Product Team", "maintainer_email": "bd@cloudswit.ch", + "availability": "with-registration", "images": [ { - "filename": "AsterNOS-VPP_V6.1-R0101P02_x86.img.gz", - "version": "V6.1", + "filename": "AsterNOS-VPP_V6.1-R0101P02_x86.img", + "version": "6.1", "md5sum": "55834c3e8849ab226144d79ef76acf81", "filesize": 1318201015, "download_url": "https://asternos.dev/api/file/b2c9fd83-a9d3-46f3-9676-6b49dd481d6c", - "comments": "Registration is required to download the image." + "compression": "gzip" } ], "qemu": { "adapter_type": "virtio-net-pci", "adapters": 4, - "ram": 4096, + "ram": 8192, "cpus": 4, "arch": "x86_64", "console_type": "telnet", "kvm": "require" - } + }, + "versions": [ + { + "name": "6.1", + "images": { + "hda_disk_image": "AsterNOS-VPP_V6.1-R0101P02_x86.img" + } + } + ] } diff --git a/gns3server/appliances/cisco-iou-l2.gns3a b/gns3server/appliances/cisco-iou-l2.gns3a index 0f6613ac3..daf98d7da 100644 --- a/gns3server/appliances/cisco-iou-l2.gns3a +++ b/gns3server/appliances/cisco-iou-l2.gns3a @@ -15,11 +15,17 @@ "iou": { "ethernet_adapters": 4, "serial_adapters": 0, - "nvram": 512, - "ram": 512, + "nvram": 256, + "ram": 1024, "startup_config": "iou_l2_base_startup-config.txt" }, "images": [ + { + "filename": "x86_64_crb_linux_l2-adventerprisek9-ms.17.16.1a.iol", + "version": "17.16.1a", + "md5sum": "d55879318e51c5401fb9314d45c67728", + "filesize": 244265240 + }, { "filename": "x86_64_crb_linux_l2-adventerprisek9-ms.iol", "version": "17.15.1", @@ -33,25 +39,25 @@ "filesize": 240355720 }, { - "filename": "i86bi-linux-l2-ipbasek9-15.1g.bin", - "version": "15.1g", - "md5sum": "0b8b9e14ca99b68c654e44c4296857ba", - "filesize": 62137336 + "filename": "i86bi_linux_l2-adventerprisek9-ms.SSA.high_iron_20190423.bin", + "version": "15.2(20190423)", + "md5sum": "ffe884f8e762b762d7886c51d8ee015c", + "filesize": 126249700 }, { - "filename": "i86bi-linux-l2-adventerprisek9-15.1a.bin", - "version": "15.1a", - "md5sum": "9549a20a7391fb849da32caa77a0d254", - "filesize": 72726092 - }, - { - "filename": "i86bi-linux-l2-adventerprisek9-15.2d.bin", - "version": "15.2d", - "md5sum": "f16db44433beb3e8c828db5ddad1de8a", - "filesize": 105036380 + "filename": "i86bi_LinuxL2-AdvEnterpriseK9-M_152_May_2018.bin", + "version": "15.2(20180510)", + "md5sum": "d704b68c5f4c4f92e56b754b49b92012", + "filesize": 126226692 } ], "versions": [ + { + "name": "17.16.1a", + "images": { + "image": "x86_64_crb_linux_l2-adventerprisek9-ms.17.16.1a.iol" + } + }, { "name": "17.15.1", "images": { @@ -65,21 +71,15 @@ } }, { - "name": "15.1g", + "name": "15.2(20190423)", "images": { - "image": "i86bi-linux-l2-ipbasek9-15.1g.bin" + "image": "i86bi_linux_l2-adventerprisek9-ms.SSA.high_iron_20190423.bin" } }, { - "name": "15.1a", + "name": "15.2(20180510)", "images": { - "image": "i86bi-linux-l2-adventerprisek9-15.1a.bin" - } - }, - { - "name": "15.2d", - "images": { - "image": "i86bi-linux-l2-adventerprisek9-15.2d.bin" + "image": "i86bi_LinuxL2-AdvEnterpriseK9-M_152_May_2018.bin" } } ] diff --git a/gns3server/appliances/cisco-iou-l3.gns3a b/gns3server/appliances/cisco-iou-l3.gns3a index 262019098..06935482a 100644 --- a/gns3server/appliances/cisco-iou-l3.gns3a +++ b/gns3server/appliances/cisco-iou-l3.gns3a @@ -15,11 +15,17 @@ "iou": { "ethernet_adapters": 2, "serial_adapters": 2, - "nvram": 512, - "ram": 512, + "nvram": 256, + "ram": 1024, "startup_config": "iou_l3_base_startup-config.txt" }, "images": [ + { + "filename": "x86_64_crb_linux-adventerprisek9-ms.17.16.1a.iol", + "version": "17.16.1a", + "md5sum": "39bdf959c3b99a3c81d66451f1cf0404", + "filesize": 293062920 + }, { "filename": "x86_64_crb_linux-adventerprisek9-ms.iol", "version": "17.15.1", @@ -37,21 +43,15 @@ "version": "15.7(3)M2", "md5sum": "d6874260c3daeeb96d10fc844ae0b93b", "filesize": 184759244 - }, - { - "filename": "i86bi-linux-l3-adventerprisek9-ms.155-2.T.bin", - "version": "155-2T", - "md5sum": "45e99761a95cbd3ee3924ecf0f3d89e5", - "filesize": 172982492 - }, - { - "filename": "i86bi-linux-l3-adventerprisek9-15.4.1T.bin", - "version": "15.4.1T", - "md5sum": "2eabae17778316c49cbc80e8e81262f9", - "filesize": 152677848 } ], "versions": [ + { + "name": "17.16.1a", + "images": { + "image": "x86_64_crb_linux-adventerprisek9-ms.17.16.1a.iol" + } + }, { "name": "17.15.1", "images": { @@ -69,18 +69,6 @@ "images": { "image": "i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin" } - }, - { - "name": "155-2T", - "images": { - "image": "i86bi-linux-l3-adventerprisek9-ms.155-2.T.bin" - } - }, - { - "name": "15.4.1T", - "images": { - "image": "i86bi-linux-l3-adventerprisek9-15.4.1T.bin" - } } ] } diff --git a/gns3server/appliances/home-assistant.gns3a b/gns3server/appliances/home-assistant.gns3a new file mode 100644 index 000000000..d6cb3a5ae --- /dev/null +++ b/gns3server/appliances/home-assistant.gns3a @@ -0,0 +1,60 @@ +{ + "appliance_id": "4ac0d5bc-714d-4a5a-8af5-8fb452046acd", + "name": "Home Assistant", + "category": "guest", + "description": "Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts.", + "vendor_name": "Open Home Foundation", + "vendor_url": "https://www.openhomefoundation.org/", + "vendor_logo_url": "https://www.openhomefoundation.org/assets/images/logo/open-home-foundation.svg", + "documentation_url": "https://www.home-assistant.io/installation/alternative", + "product_name": "haos", + "product_url": "https://www.home-assistant.io/", + "registry_version": 8, + "status": "stable", + "availability": "free", + "maintainer": "Neyder Achahuanco Apaza", + "maintainer_email": "gns3@neyder.net", + "usage": "You will be able to reach Home Assistant on homeassistant.local:8123, you might need to access Home Assistant at homeassistant:8123 or http://X.X.X.X:8123 (replace X.X.X.X with your virtual machine\u2019s IP address).\nYou can access trough console with root user without password.", + "symbol": "home-assistant-logomark-color-on-light.svg", + "default_username": "cisco", + "default_password": "admin", + "settings": [ + { + "name": "Default template settings", + "default": true, + "template_type": "qemu", + "template_properties": + { + "adapter_type": "virtio-net-pci", + "platform": "x86_64", + "adapters": 1, + "ram": 2048, + "cpus": 2, + "hda_disk_interface": "virtio", + "console_type": "telnet", + "boot_priority": "cd", + "on_close": "shutdown_signal", + "uefi": true + } + } + ], + "images": [ + { + "filename": "haos_ova-17.1.qcow2", + "version": "17.1", + "md5sum": "e1b950430045859a3ac035cb420df158", + "filesize": 1024393216, + "download_url": "https://www.home-assistant.io/installation/alternative", + "direct_download_url": "https://github.com/home-assistant/operating-system/releases/download/17.1/haos_ova-17.1.qcow2.xz", + "compression": "xz" + } + ], + "versions": [ + { + "images": { + "hda_disk_image": "haos_ova-17.1.qcow2" + }, + "name": "17.1" + } + ] +} \ No newline at end of file diff --git a/gns3server/appliances/infix.gns3a b/gns3server/appliances/infix.gns3a index d9ab0321f..f28a3d6a7 100644 --- a/gns3server/appliances/infix.gns3a +++ b/gns3server/appliances/infix.gns3a @@ -111,9 +111,37 @@ "md5sum": "e2eb1a4fff9d56815f37c2e82a6279fb", "version": "25.11.0", "direct_download_url": "https://github.com/kernelkit/infix/releases/download/v25.11.0/infix-x86_64-disk-25.11.0.qcow2" + }, + { + "filename": "infix-x86_64-v26.01.0.qcow2", + "filesize": 307363840, + "md5sum": "bd3b9c56f98ba264c36e4d6f69931546", + "version": "26.01.0", + "direct_download_url": "https://github.com/kernelkit/infix/releases/download/v26.01.0/infix-x86_64-v26.01.0.qcow2" + }, + { + "filename": "infix-x86_64-v26.02.1.qcow2", + "filesize": 316407808, + "md5sum": "0c4da508cfcb702c066f47227644b65f", + "version": "26.02.1", + "direct_download_url": "https://github.com/kernelkit/infix/releases/download/v26.02.1/infix-x86_64-v26.02.1.qcow2" } ], "versions": [ + { + "name": "26.02.1", + "images": { + "bios_image": "OVMF-edk2-stable202305.fd", + "hda_disk_image": "infix-x86_64-v26.02.1.qcow2" + } + }, + { + "name": "26.01.0", + "images": { + "bios_image": "OVMF-edk2-stable202305.fd", + "hda_disk_image": "infix-x86_64-v26.01.0.qcow2" + } + }, { "name": "25.11.0", "images": { diff --git a/gns3server/appliances/juniper-vJunos-router.gns3a b/gns3server/appliances/juniper-vJunos-router.gns3a index 9669079ac..8fecd0681 100644 --- a/gns3server/appliances/juniper-vJunos-router.gns3a +++ b/gns3server/appliances/juniper-vJunos-router.gns3a @@ -14,11 +14,11 @@ "maintainer_email": "github@sugarpapa.mozmail.com", "usage": "GNS3 SHOULD be a baremetal installation. Using the GNS3 VM MIGHT result in unwanted issues. Default user is root. No password is needed.", "symbol": "juniper-vmx.svg", - "first_port_name": "ge-0/0/0", + "first_port_name": "fxp0", "port_name_format": "ge-0/0/{port0}", "qemu": { "adapter_type": "virtio-net-pci", - "adapters": 17, + "adapters": 10, "ram": 5120, "cpus": 4, "hda_disk_interface": "virtio", @@ -72,4 +72,4 @@ "name": "23.2R1.15" } ] -} \ No newline at end of file +} diff --git a/gns3server/appliances/openwrt.gns3a b/gns3server/appliances/openwrt.gns3a index ac3711d3a..84e9e6b57 100644 --- a/gns3server/appliances/openwrt.gns3a +++ b/gns3server/appliances/openwrt.gns3a @@ -23,6 +23,15 @@ "kvm": "allow" }, "images": [ + { + "filename": "openwrt-25.12.0-x86-64-generic-ext4-combined.img", + "version": "25.12.0", + "md5sum": "8c0e01307fc47c1f862a5d0c9a51c2c5", + "filesize": 126353408, + "download_url": "https://downloads.openwrt.org/releases/25.12.0/targets/x86/64/", + "direct_download_url": "https://downloads.openwrt.org/releases/25.12.0/targets/x86/64/openwrt-25.12.0-x86-64-generic-ext4-combined.img.gz", + "compression": "gzip" + }, { "filename": "openwrt-24.10.2-x86-64-generic-ext4-combined.img", "version": "24.10.2", @@ -232,6 +241,12 @@ } ], "versions": [ + { + "name": "25.12.0", + "images": { + "hda_disk_image": "openwrt-25.12.0-x86-64-generic-ext4-combined.img" + } + }, { "name": "24.10.2", "images": { diff --git a/gns3server/appliances/opnsense.gns3a b/gns3server/appliances/opnsense.gns3a index 433b4f2de..7d3756052 100644 --- a/gns3server/appliances/opnsense.gns3a +++ b/gns3server/appliances/opnsense.gns3a @@ -25,6 +25,15 @@ "kvm": "require" }, "images": [ + { + "filename": "OPNsense-26.1-nano-amd64.img", + "version": "26.1", + "md5sum": "3b774e8fb651a5d00aa6fa3e0d1b1ff0", + "filesize": 3221225472, + "download_url": "https://opnsense.c0urier.net/releases/26.1/", + "direct_download_url": "https://opnsense.c0urier.net/releases/26.1/OPNsense-26.1-nano-amd64.img.bz2", + "compression": "bzip2" + }, { "filename": "OPNsense-25.7-nano-amd64.img", "version": "25.7", @@ -90,6 +99,24 @@ } ], "versions": [ + { + "name": "26.1", + "images": { + "hda_disk_image": "OPNsense-26.1-nano-amd64.img" + } + }, + { + "name": "25.7", + "images": { + "hda_disk_image": "OPNsense-25.7-nano-amd64.img" + } + }, + { + "name": "25.1", + "images": { + "hda_disk_image": "OPNsense-25.1-nano-amd64.img" + } + }, { "name": "24.7", "images": { diff --git a/gns3server/appliances/rhel.gns3a b/gns3server/appliances/rhel.gns3a index c383c4b4d..8ee8916a6 100644 --- a/gns3server/appliances/rhel.gns3a +++ b/gns3server/appliances/rhel.gns3a @@ -13,11 +13,11 @@ "availability": "service-contract", "maintainer": "Da-Geek", "maintainer_email": "dageek@dageeks-geeks.gg", - "usage": "You should download Red Hat Enterprise Linux KVM Guest Image from https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.5/x86_64/product-software attach/customize rhel-cloud-init.iso and start.\nusername: cloud-user\npassword: redhat", + "usage": "You should download Red Hat Enterprise Linux KVM Guest Image from https://access.redhat.com/downloads/content/rhel attach/customize rhel-cloud-init.iso and start.\nusername: cloud-user\npassword: redhat", "qemu": { "adapter_type": "virtio-net-pci", "adapters": 1, - "ram": 1024, + "ram": 1536, "hda_disk_interface": "virtio", "arch": "x86_64", "console_type": "telnet", @@ -27,11 +27,32 @@ }, "images": [ { - "filename": "rhel-9.5-x86_64-kvm.qcow2", - "version": "9.5", - "md5sum": "8174396d5cb47727c59dd04dd9a05418", - "filesize": 974389248, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.5/x86_64/product-software" + "filename": "rhel-10.1-x86_64-kvm.qcow2", + "version": "10.1", + "md5sum": "b2f35b1ac0600de31cadf30a622a2fef", + "filesize": 1010827264, + "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---10/10.1/x86_64/product-software" + }, + { + "filename": "rhel-10.0-x86_64-kvm.qcow2", + "version": "10.0", + "md5sum": "ea5918fa116ec53f9ef1ce4be69ae2be", + "filesize": 855506944, + "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---10/10.0/x86_64/product-software" + }, + { + "filename": "rhel-9.7-x86_64-kvm.qcow2", + "version": "9.7", + "md5sum": "abc2f42cc5daeea6b03d0d2d478a0d1c", + "filesize": 1229979648, + "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.7/x86_64/product-software" + }, + { + "filename": "rhel-9.6-x86_64-kvm.qcow2", + "version": "9.6", + "md5sum": "056648d716275053ebe77b1d4f68c862", + "filesize": 1060438016, + "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.6/x86_64/product-software" }, { "filename": "rhel-9.4-x86_64-kvm.qcow2", @@ -40,34 +61,6 @@ "filesize": 957218816, "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.4/x86_64/product-software" }, - { - "filename": "rhel-9.3-x86_64-kvm.qcow2", - "version": "9.3", - "md5sum": "409d8d15f5177db2617b0e3e02139b5c", - "filesize": 858193920, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---9/9.3/x86_64/product-software" - }, - { - "filename": "rhel-9.2-x86_64-kvm.qcow2", - "version": "9.2", - "md5sum": "f33845298b387dbcfbf162c6b4e3f8c8", - "filesize": 819265536, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.2/x86_64/product-software" - }, - { - "filename": "rhel-baseos-9.1-x86_64-kvm.qcow2", - "version": "9.1", - "md5sum": "622de743da83bcec1ad2959ecaedb8f4", - "filesize": 753401856, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.1/x86_64/product-software" - }, - { - "filename": "rhel-baseos-9.0-x86_64-kvm.qcow2", - "version": "9.0", - "md5sum": "4a41497d354fe99a4abf55f1ed73edcb", - "filesize": 696582144, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/9.0/x86_64/product-software" - }, { "filename": "rhel-8.10-x86_64-kvm.qcow2", "version": "8.10", @@ -75,13 +68,6 @@ "filesize": 1065091072, "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.10/x86_64/product-software" }, - { - "filename": "rhel-8.9-x86_64-kvm.qcow2", - "version": "8.9", - "md5sum": "23295fe508678cbdebfbdbd41ef6e6e2", - "filesize": 971833344, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.9/x86_64/product-software" - }, { "filename": "rhel-8.8-x86_64-kvm.qcow2", "version": "8.8", @@ -89,13 +75,6 @@ "filesize": 926810112, "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.8/x86_64/product-software" }, - { - "filename": "rhel-8.7-x86_64-kvm.qcow2", - "version": "8.7", - "md5sum": "ab71a2c4cc276441bf999f531e064507", - "filesize": 858128384, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.7/x86_64/product-software" - }, { "filename": "rhel-8.6-x86_64-kvm.qcow2", "version": "8.6", @@ -104,31 +83,10 @@ "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.6/x86_64/product-software" }, { - "filename": "rhel-8.5-x86_64-kvm.qcow2", - "version": "8.5", - "md5sum": "1efb78dbb2033ba4ac6589a06c95c2d4", - "filesize": 779419648, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.5/x86_64/product-software" - }, - { - "filename": "rhel-8.4-x86_64-kvm.qcow2", - "version": "8.4", - "md5sum": "db4c3a72857b784dc6e96120351f2894", - "filesize": 727449600, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.4/x86_64/product-software" - }, - { - "filename": "rhel-8.3-x86_64-kvm.qcow2", - "version": "8.3", - "md5sum": "dd554c059e0910379fff88f677f4a4b3", - "filesize": 1316683776, - "download_url": "https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.3/x86_64/product-software" - }, - { - "filename": "rhel-server-7.9-x86_64-kvm.qcow2", + "filename": "rhel-server-7.9-update-12-x86_64-kvm.qcow2", "version": "7.9", - "md5sum": "8d6669b3e2bb8df15b9b4280936cf950", - "filesize": 827777024, + "md5sum": "f77fc7e3cf31a210a8244e486466ce34", + "filesize": 838036992, "download_url": "https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software" }, { @@ -140,17 +98,39 @@ }, { "filename": "rhel-cloud-init.iso", - "version": "1.0", - "md5sum": "421745b0d13615ecd48696f98d8b6352", + "version": "1.1", + "md5sum": "f1f908d36e67f843dd94db1c2e8c8373", "filesize": 374784, - "download_url": "https://gitlab.com/neyder/rhel-cloud-init/raw/master/rhel-cloud-init.iso" + "download_url": "https://github.com/GNS3/gns3-registry/tree/master/cloud-init/rhel", + "direct_download_url": "https://github.com/GNS3/gns3-registry/raw/master/cloud-init/rhel/rhel-cloud-init.iso" } ], "versions": [ { - "name": "9.5", + "name": "10.1", "images": { - "hda_disk_image": "rhel-9.5-x86_64-kvm.qcow2", + "hda_disk_image": "rhel-10.1-x86_64-kvm.qcow2", + "cdrom_image": "rhel-cloud-init.iso" + } + }, + { + "name": "10.0", + "images": { + "hda_disk_image": "rhel-10.0-x86_64-kvm.qcow2", + "cdrom_image": "rhel-cloud-init.iso" + } + }, + { + "name": "9.7", + "images": { + "hda_disk_image": "rhel-9.7-x86_64-kvm.qcow2", + "cdrom_image": "rhel-cloud-init.iso" + } + }, + { + "name": "9.6", + "images": { + "hda_disk_image": "rhel-9.6-x86_64-kvm.qcow2", "cdrom_image": "rhel-cloud-init.iso" } }, @@ -161,34 +141,6 @@ "cdrom_image": "rhel-cloud-init.iso" } }, - { - "name": "9.3", - "images": { - "hda_disk_image": "rhel-9.3-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, - { - "name": "9.2", - "images": { - "hda_disk_image": "rhel-9.2-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, - { - "name": "9.1", - "images": { - "hda_disk_image": "rhel-baseos-9.1-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, - { - "name": "9.0", - "images": { - "hda_disk_image": "rhel-baseos-9.0-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, { "name": "8.10", "images": { @@ -196,13 +148,6 @@ "cdrom_image": "rhel-cloud-init.iso" } }, - { - "name": "8.9", - "images": { - "hda_disk_image": "rhel-8.9-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, { "name": "8.8", "images": { @@ -210,13 +155,6 @@ "cdrom_image": "rhel-cloud-init.iso" } }, - { - "name": "8.7", - "images": { - "hda_disk_image": "rhel-8.7-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, { "name": "8.6", "images": { @@ -224,31 +162,10 @@ "cdrom_image": "rhel-cloud-init.iso" } }, - { - "name": "8.5", - "images": { - "hda_disk_image": "rhel-8.5-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, - { - "name": "8.4", - "images": { - "hda_disk_image": "rhel-8.4-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, - { - "name": "8.3", - "images": { - "hda_disk_image": "rhel-8.3-x86_64-kvm.qcow2", - "cdrom_image": "rhel-cloud-init.iso" - } - }, { "name": "7.9", "images": { - "hda_disk_image": "rhel-server-7.9-x86_64-kvm.qcow2", + "hda_disk_image": "rhel-server-7.9-update-12-x86_64-kvm.qcow2", "cdrom_image": "rhel-cloud-init.iso" } }, diff --git a/gns3server/appliances/tinycore-linux.gns3a b/gns3server/appliances/tinycore-linux.gns3a index 7fa608326..f5fd5273e 100644 --- a/gns3server/appliances/tinycore-linux.gns3a +++ b/gns3server/appliances/tinycore-linux.gns3a @@ -2,7 +2,7 @@ "appliance_id": "ed6b9f98-7de2-4d61-a3ed-ad4c3e323ace", "name": "Tiny Core Linux", "category": "guest", - "description": "Core Linux is a smaller variant of Tiny Core without a graphical desktop.\n\nIt provides a complete Linux system using only a few MiB.", + "description": "TinyCore is a Linux system with a graphical desktop using only a few MiB.", "vendor_name": "Team Tiny Core", "vendor_url": "http://distro.ibiblio.org/tinycorelinux", "documentation_url": "http://wiki.tinycorelinux.net/", @@ -25,6 +25,14 @@ "options": "-vga std -usbdevice tablet" }, "images": [ + { + "filename": "linux-tinycore-17.0.qcow2", + "version": "17.0", + "md5sum": "6434d4da25dd0277cc90b000bb4ac8f1", + "filesize": 35061760, + "download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/", + "direct_download_url": "http://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/linux-tinycore-17.0.qcow2" + }, { "filename": "linux-tinycore-11.1.qcow2", "version": "11.1", @@ -51,6 +59,12 @@ } ], "versions": [ + { + "name": "17.0", + "images": { + "hda_disk_image": "linux-tinycore-17.0.qcow2" + } + }, { "name": "11.1", "images": { diff --git a/gns3server/appliances/windows-11-dev-env.gns3a b/gns3server/appliances/windows-11-dev-env.gns3a index b9b453e8a..f6bbecc65 100644 --- a/gns3server/appliances/windows-11-dev-env.gns3a +++ b/gns3server/appliances/windows-11-dev-env.gns3a @@ -30,19 +30,11 @@ }, "images": [ { - "filename": "WinDev2308Eval-disk1.vmdk", - "version": "2308", - "md5sum": "6a9b4ed6d7481f7bbf8a054c797b1eee", - "filesize": 24945341952, - "download_url": "https://download.microsoft.com/download/7/1/3/7135f2ab-8528-49fc-9252-8d5d94c697ef/WinDev2308Eval.VMWare.zip", - "compression": "zip" - }, - { - "filename": "WinDev2212Eval-disk1.vmdk", - "version": "2212", - "md5sum": "c79f393a067b92e01a513a118d455ac8", - "filesize": 24620493824, - "download_url": "https://aka.ms/windev_VM_vmware", + "filename": "WinDev2407Eval-disk1.vmdk", + "version": "2407", + "md5sum": "66e7233c7922ef128c5b7c957d20bcbe", + "filesize": 25984826368, + "download_url": "https://download.microsoft.com/download/e/e/c/eec4775f-f2e8-4476-98b2-ca51502a6429/WinDev2407Eval.VMWare.zip", "compression": "zip" }, { @@ -57,17 +49,10 @@ ], "versions": [ { - "name": "2308", + "name": "2407", "images": { "bios_image": "OVMF-edk2-stable202305.fd", - "hda_disk_image": "WinDev2308Eval-disk1.vmdk" - } - }, - { - "name": "2212", - "images": { - "bios_image": "OVMF-edk2-stable202305.fd", - "hda_disk_image": "WinDev2212Eval-disk1.vmdk" + "hda_disk_image": "WinDev2407Eval-disk1.vmdk" } } ] From 7adb0c52262eebf10a9d4d3aa5fc65155208e930 Mon Sep 17 00:00:00 2001 From: grossmj Date: Mon, 23 Mar 2026 09:45:46 +0800 Subject: [PATCH 6/6] Release v2.2.57 --- CHANGELOG | 10 ++++++++++ gns3server/crash_report.py | 2 +- gns3server/version.py | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 63db2f004..fc3331f3c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,15 @@ # Change Log +## 2.2.57 23/03/2026 + +* feat(telnet_server): improve error handling and connection management +* Deactivate 'use default IOU values' by default and update RAM/NVRAM values +* Make sure the node shows as stopped when the wrap console cannot be stopped +* tests(controller,port): short_name finishes successfully when port name is None +* fix(controller,port): handle None port name to prevent TypeError in short_name method +* fix: busybox static link detection on Alpine/musl +* Take populated disks into consideration when calculating PCI device ID + ## 2.2.56.1 28/01/2026 * Fix telnet keepalive options on macOS diff --git a/gns3server/crash_report.py b/gns3server/crash_report.py index 5898bbb7d..d9953ae27 100644 --- a/gns3server/crash_report.py +++ b/gns3server/crash_report.py @@ -57,7 +57,7 @@ class CrashReport: Report crash to a third party service """ - DSN = "https://5bfcec70239c428d44aafef68f3eea79@o19455.ingest.us.sentry.io/38482" + DSN = "https://b3291ad085cbcc85059160e74ce83ab6@o19455.ingest.us.sentry.io/38482" _instance = None def __init__(self): diff --git a/gns3server/version.py b/gns3server/version.py index c520f0086..4cd21a6b3 100644 --- a/gns3server/version.py +++ b/gns3server/version.py @@ -23,8 +23,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "2.2.57.dev2" -__version_info__ = (2, 2, 57, 99) +__version__ = "2.2.57" +__version_info__ = (2, 2, 57, 0) if "dev" in __version__: try: