From ae3ae46151c2dcd197ef89f3b45af0c0e4899a42 Mon Sep 17 00:00:00 2001 From: grossmj Date: Sun, 12 Apr 2026 21:17:17 +0800 Subject: [PATCH 01/10] Development on 2.2.59.dev2 --- gns3server/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gns3server/version.py b/gns3server/version.py index 5161fb7b4..e2acb08ee 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.58.1" -__version_info__ = (2, 2, 58, -99) +__version__ = "2.2.59.dev2" +__version_info__ = (2, 2, 59, 99) if "dev" in __version__: try: From de0d0506890df757009a7830c2ba7d8ce62e8c22 Mon Sep 17 00:00:00 2001 From: arl1984 Date: Thu, 16 Apr 2026 14:46:49 +0000 Subject: [PATCH 02/10] Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The run() cleanup block was guarded by `except (ConnectionError, OSError):`, so exits via asyncio.CancelledError or any other exception type skipped cleanup. Result: `_reader_process` stays pinned to the dead reader and `_get_reader()` returns None for every subsequent client — the silent-proxy symptom described in #2344. Convert the except block to try/finally so cleanup always runs, regardless of how `_process()` exits. Also: - catch asyncio.CancelledError + generic Exception (with log.exception) so unexpected failures don't swallow the cleanup - reset `_current_read = None` after cancellation - use `dict.pop(..., None)` instead of `del` to avoid KeyError races if the broadcast loop's timeout handler already removed the entry Triggering pattern observed in practice: a diagnostic tool opens a console, sends a few commands, and closes abruptly (e.g. from a test harness or orchestration script that cancels its Task). If the `_process()` task was awaiting on one of the `network_read` / `reader_read` futures at the time of cancellation, the CancelledError propagates up through `run()` and bypasses the ConnectionError-only except clause. The proxy accepts future connections (the listen socket is still alive) but never forwards any data because `_reader_process` never got reset. Validated against gns3/gns3-server:latest (2.2.56.1) running a 10-scenario sequential regression batch that previously hung reliably on the 4th sp_v1 / L3VPN scenario and now completes cleanly across all 10. --- gns3server/utils/asyncio/telnet_server.py | 28 ++++++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/gns3server/utils/asyncio/telnet_server.py b/gns3server/utils/asyncio/telnet_server.py index cc34a29a6..2f8652a52 100644 --- a/gns3server/utils/asyncio/telnet_server.py +++ b/gns3server/utils/asyncio/telnet_server.py @@ -215,18 +215,34 @@ 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, OSError): + except (ConnectionError, OSError, asyncio.CancelledError): + pass + except Exception: + # Catch any unexpected exception so the cleanup below still runs. + # Without the try/finally, an uncaught exception here would leave + # _reader_process pinned to a dead reader, and subsequent client + # connections would see _get_reader() return None and never + # receive node output -- the "silent proxy" hang (issue #2344). + log.exception("Unexpected error in telnet proxy; cleaning up client connection") + finally: async with self._lock: - network_writer.close() - # await network_writer.wait_closed() # this doesn't work in Python 3.6 + try: + network_writer.close() + except Exception: + pass if self._reader_process == network_reader: self._reader_process = None # Cancel current read from this reader if self._current_read is not None: self._current_read.cancel() - - await connection.disconnected() - del self._connections[network_writer] + self._current_read = None + try: + await connection.disconnected() + except Exception: + pass + # pop() instead of del to avoid KeyError if already removed + # elsewhere (e.g. by the broadcast loop's timeout handler). + self._connections.pop(network_writer, None) async def close(self): for writer, connection in self._connections.items(): From 6551bf56f83b2702cbd56c05ed3049a5ae8c3561 Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 8 May 2026 15:36:40 +0800 Subject: [PATCH 03/10] Tweak and merge changes from 3.0 branch --- gns3server/utils/asyncio/telnet_server.py | 28 +++++++++++------------ 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/gns3server/utils/asyncio/telnet_server.py b/gns3server/utils/asyncio/telnet_server.py index 2f8652a52..267a429d1 100644 --- a/gns3server/utils/asyncio/telnet_server.py +++ b/gns3server/utils/asyncio/telnet_server.py @@ -223,26 +223,24 @@ class AsyncioTelnetServer: # _reader_process pinned to a dead reader, and subsequent client # connections would see _get_reader() return None and never # receive node output -- the "silent proxy" hang (issue #2344). - log.exception("Unexpected error in telnet proxy; cleaning up client connection") + log.exception("Unexpected error in telnet proxy; cleaning up client connection...") finally: async with self._lock: try: network_writer.close() - except Exception: - pass - if self._reader_process == network_reader: - self._reader_process = None - # Cancel current read from this reader - if self._current_read is not None: - self._current_read.cancel() - self._current_read = None + finally: + if self._reader_process == network_reader: + self._reader_process = None + # Cancel current read from this reader + if self._current_read is not None: + self._current_read.cancel() + self._current_read = None try: await connection.disconnected() - except Exception: - pass - # pop() instead of del to avoid KeyError if already removed - # elsewhere (e.g. by the broadcast loop's timeout handler). - self._connections.pop(network_writer, None) + finally: + # Use pop() to avoid KeyError if connection was already removed + # elsewhere (e.g. by the broadcast loop's timeout handler) + self._connections.pop(network_writer, None) async def close(self): for writer, connection in self._connections.items(): @@ -334,7 +332,7 @@ class AsyncioTelnetServer: 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] + self._connections.pop(connection_key, None) async def _read(self, cmd, buffer, location, reader): """ Reads next op from the buffer or reader""" From 72f64ee60b2e997f6ad7b99324eb906226f87e06 Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 8 May 2026 16:37:06 +0800 Subject: [PATCH 04/10] Warn to use 64-bit IOU images. Fixes #2716 32-bit IOU image support has been removed from the GNS3 VM. --- gns3server/compute/iou/iou_vm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gns3server/compute/iou/iou_vm.py b/gns3server/compute/iou/iou_vm.py index 9089d8e68..dab44d41d 100644 --- a/gns3server/compute/iou/iou_vm.py +++ b/gns3server/compute/iou/iou_vm.py @@ -578,7 +578,7 @@ class IOUVM(BaseNode): callback = functools.partial(self._termination_callback, "IOU") gns3server.utils.asyncio.monitor_process(self._iou_process, callback) except FileNotFoundError as e: - raise IOUError("Could not start IOU: {}: 32-bit binary support is probably not installed".format(e)) + raise IOUError("Could not start IOU: {}: 32-bit binary support is probably not installed, it is recommended to use a 64-bit image instead".format(e)) except (OSError, subprocess.SubprocessError) as e: iou_stdout = self.read_iou_stdout() log.error("Could not start IOU {}: {}\n{}".format(self._path, e, iou_stdout)) From 163d4e0534c8d039036effa3b153c723ba932283 Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 8 May 2026 17:01:10 +0800 Subject: [PATCH 05/10] Update requirements.txt & python_requires --- requirements.txt | 9 +++++---- setup.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index 9c322ec53..7b5ce620b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,11 @@ -jsonschema>=4.25.1,<4.26 # version 4.25.1 is the last to support Python 3.9 -aiohttp>=3.13.3,<3.14 +jsonschema==4.25.1; python_version == '3.9' # version 4.25.1 is the last to support Python 3.9 +jsonschema>=4.26.0,<4.27; python_version >= '3.10' +aiohttp>=3.13.5,<3.14 aiohttp-cors>=0.8.1,<0.9 aiofiles>=25.1.0,<26.0 Jinja2>=3.1.6,<3.2 -sentry-sdk>=2.50.0,<3 # optional dependency -psutil>=7.2.1 +sentry-sdk>=2.59.0,<3 # optional dependency +psutil>=7.2.2 async-timeout>=5.0.1,<5.1 # this library has effectively been upstreamed into Python 3.11+ distro>=1.9.0 py-cpuinfo>=9.0.0,<10.0 diff --git a/setup.py b/setup.py index 2cc398f69..44dee23c6 100644 --- a/setup.py +++ b/setup.py @@ -64,7 +64,7 @@ setup( include_package_data=True, zip_safe=False, platforms="any", - python_requires=">=3.8", + python_requires=">=3.9", setup_requires=["setuptools>=45.2"], classifiers=[ "Development Status :: 5 - Production/Stable", From b304511b5e1b1aa3df6a93cfcf570a089224900e Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 8 May 2026 18:47:47 +0800 Subject: [PATCH 06/10] Fix snapshot restore does not work after export/import of project --- gns3server/controller/import_project.py | 13 ++++++++++++- gns3server/controller/snapshot.py | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gns3server/controller/import_project.py b/gns3server/controller/import_project.py index 6efcc2b70..7c73bbe86 100644 --- a/gns3server/controller/import_project.py +++ b/gns3server/controller/import_project.py @@ -122,6 +122,17 @@ async def import_project( if not restoring_snapshot: # Do not re-generate IDs if we are restoring a snapshot because they should be the same in a project regenerate_topology_ids(topology, path, reset_mac_addresses=reset_mac_addresses) + else: + for node in topology["topology"]["nodes"]: + node_id = node["node_id"] + root = os.path.join(path, "project-files") + if os.path.exists(root): + for dirname in os.listdir(root): + module_dir = os.path.join(root, dirname) + if os.path.isdir(module_dir): + node_dir = os.path.join(module_dir, node_id) + log.debug("Restoring node ID {} in snapshot, moving files from {} to {}".format(node_id, node_dir, os.path.join(module_dir, node_id))) + shutil.move(node_dir, os.path.join(module_dir, node_id)) # Modify the compute id of the node depending on compute capacity if not keep_compute_ids: @@ -316,7 +327,7 @@ async def update_snapshots(snapshots_dir, project_path, project_name, project_id topology = json.load(f) topology["name"] = project_name topology["project_id"] = project_id - regenerate_topology_ids(topology, project_path, reset_mac_addresses) + regenerate_topology_ids(topology, tmpdir, reset_mac_addresses) with open(topology_file_path, "w+", encoding="utf-8") as f: json.dump(topology, f, indent=4, sort_keys=True) except OSError as e: diff --git a/gns3server/controller/snapshot.py b/gns3server/controller/snapshot.py index 8bd44e94c..9f4b2796a 100644 --- a/gns3server/controller/snapshot.py +++ b/gns3server/controller/snapshot.py @@ -139,7 +139,7 @@ class Snapshot: # delete the current project files project_files_path = os.path.join(self._project.path, "project-files") if os.path.exists(project_files_path): - await wait_run_in_executor(shutil.rmtree, project_files_path) + await wait_run_in_executor(shutil.rmtree, project_files_path, ignore_errors=True) with open(self._path, "rb") as f: project = await import_project( self._project.controller, From b1c8ce8b58c337297c7838ec2551e9f8f7a4f73f Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 8 May 2026 18:56:56 +0800 Subject: [PATCH 07/10] Remove unneeded code --- gns3server/controller/import_project.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/gns3server/controller/import_project.py b/gns3server/controller/import_project.py index 7c73bbe86..a0f95bf00 100644 --- a/gns3server/controller/import_project.py +++ b/gns3server/controller/import_project.py @@ -122,17 +122,6 @@ async def import_project( if not restoring_snapshot: # Do not re-generate IDs if we are restoring a snapshot because they should be the same in a project regenerate_topology_ids(topology, path, reset_mac_addresses=reset_mac_addresses) - else: - for node in topology["topology"]["nodes"]: - node_id = node["node_id"] - root = os.path.join(path, "project-files") - if os.path.exists(root): - for dirname in os.listdir(root): - module_dir = os.path.join(root, dirname) - if os.path.isdir(module_dir): - node_dir = os.path.join(module_dir, node_id) - log.debug("Restoring node ID {} in snapshot, moving files from {} to {}".format(node_id, node_dir, os.path.join(module_dir, node_id))) - shutil.move(node_dir, os.path.join(module_dir, node_id)) # Modify the compute id of the node depending on compute capacity if not keep_compute_ids: From e34a7afe7959ea7425bc1a618d42c23f3eb2ff9c Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 8 May 2026 19:03:14 +0800 Subject: [PATCH 08/10] Sync appliances --- gns3server/appliances/almalinux.gns3a | 45 +++++++++ gns3server/appliances/centos-cloud.gns3a | 28 +++--- gns3server/appliances/cisco-1700.gns3a | 1 + gns3server/appliances/cisco-2600.gns3a | 1 + gns3server/appliances/cisco-2691.gns3a | 1 + gns3server/appliances/cisco-3620.gns3a | 1 + gns3server/appliances/cisco-3640.gns3a | 1 + gns3server/appliances/cisco-3660.gns3a | 1 + gns3server/appliances/cisco-3725.gns3a | 1 + gns3server/appliances/cisco-3745.gns3a | 1 + gns3server/appliances/cisco-7200.gns3a | 1 + gns3server/appliances/cisco-asav.gns3a | 13 +++ gns3server/appliances/cisco-csr1000v.gns3a | 2 +- gns3server/appliances/cisco-iosv.gns3a | 17 +++- gns3server/appliances/cisco-iosvl2.gns3a | 1 + gns3server/appliances/cisco-iosxrv9k.gns3a | 16 +++- gns3server/appliances/cisco-iou-l2.gns3a | 25 +---- gns3server/appliances/cisco-iou-l3.gns3a | 13 +-- .../appliances/cisco-nxosv9k-lite.gns3a | 69 ++++++++++++++ gns3server/appliances/cisco-nxosv9k.gns3a | 28 ++++++ gns3server/appliances/fedora-cloud.gns3a | 90 +++++++++--------- gns3server/appliances/huawei-ce12800.gns3a | 1 + .../appliances/oracle-linux-cloud.gns3a | 95 +++++-------------- gns3server/appliances/rockylinux.gns3a | 32 ++++++- gns3server/appliances/westermo-weos.gns3a | 72 ++++++++++++++ 25 files changed, 387 insertions(+), 169 deletions(-) create mode 100644 gns3server/appliances/cisco-nxosv9k-lite.gns3a create mode 100644 gns3server/appliances/westermo-weos.gns3a diff --git a/gns3server/appliances/almalinux.gns3a b/gns3server/appliances/almalinux.gns3a index a8a2091ba..97ae3334a 100644 --- a/gns3server/appliances/almalinux.gns3a +++ b/gns3server/appliances/almalinux.gns3a @@ -25,6 +25,30 @@ "options": "-cpu host -nographic" }, "images": [ + { + "filename": "AlmaLinux-10-GenericCloud-10.0-20250528.0.x86_64.qcow2", + "version": "10.0", + "md5sum": "e5099e33f16014b6cc851482d865720d", + "filesize": 460062720, + "download_url": "https://vault.almalinux.org/10.0/cloud/x86_64/images/", + "direct_download_url": "https://vault.almalinux.org/10.0/cloud/x86_64/images/AlmaLinux-10-GenericCloud-10.0-20250528.0.x86_64.qcow2" + }, + { + "filename": "AlmaLinux-9-GenericCloud-9.6-20250522.x86_64.qcow2", + "version": "9.6", + "md5sum": "ae02074389961caf08bbe44439603061", + "filesize": 530776064, + "download_url": "https://vault.almalinux.org/9.6/cloud/x86_64/images/", + "direct_download_url": "https://vault.almalinux.org/9.6/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.6-20250522.x86_64.qcow2" + }, + { + "filename": "AlmaLinux-9-GenericCloud-9.5-20241120.x86_64.qcow2", + "version": "9.5", + "md5sum": "cb48bc1c609a1d3d62f48397acdd038e", + "filesize": 490995712, + "download_url": "https://vault.almalinux.org/9.5/cloud/x86_64/images/", + "direct_download_url": "https://vault.almalinux.org/9.5/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.5-20241120.x86_64" + }, { "filename": "AlmaLinux-9-GenericCloud-9.4-20240805.x86_64.qcow2", "version": "9.4", @@ -75,6 +99,27 @@ } ], "versions": [ + { + "name": "10.0", + "images": { + "hda_disk_image": "AlmaLinux-10-GenericCloud-10.0-20250528.0.x86_64.qcow2", + "cdrom_image": "almalinux-cloud-init-data.iso" + } + }, + { + "name": "9.6", + "images": { + "hda_disk_image": "AlmaLinux-9-GenericCloud-9.6-20250522.x86_64.qcow2", + "cdrom_image": "almalinux-cloud-init-data.iso" + } + }, + { + "name": "9.5", + "images": { + "hda_disk_image": "AlmaLinux-9-GenericCloud-9.5-20241120.x86_64.qcow2", + "cdrom_image": "almalinux-cloud-init-data.iso" + } + }, { "name": "9.4", "images": { diff --git a/gns3server/appliances/centos-cloud.gns3a b/gns3server/appliances/centos-cloud.gns3a index e8061267c..4bd373c10 100644 --- a/gns3server/appliances/centos-cloud.gns3a +++ b/gns3server/appliances/centos-cloud.gns3a @@ -27,20 +27,20 @@ }, "images": [ { - "filename": "CentOS-Stream-GenericCloud-x86_64-10-20250331.0.x86_64.qcow2", - "version": "Stream-10 (20250331.0)", - "md5sum": "776033371ca346001dd6390f0cbaf0d0", - "filesize": 952041472, + "filename": "CentOS-Stream-GenericCloud-10-20260504.0.x86_64.qcow2", + "version": "Stream-10 (20260504.0)", + "md5sum": "932b0bcc7e5c7404f91432979dc95314", + "filesize": 2173501440, "download_url": "https://cloud.centos.org/centos/10-stream/x86_64/images", - "direct_download_url": "https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-x86_64-10-20250331.0.x86_64.qcow2" + "direct_download_url": "https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-10-20260504.0.x86_64.qcow2" }, { - "filename": "CentOS-Stream-GenericCloud-9-20250331.0.x86_64.qcow2", - "version": "Stream-9 (20250331.0)", - "md5sum": "4aaeddc6ca497065522c75a7471f9bfd", - "filesize": 1250625536, + "filename": "CentOS-Stream-GenericCloud-9-20260504.0.x86_64.qcow2", + "version": "Stream-9 (20260504.0)", + "md5sum": "ebfbbd23ba7b85bbaf83c6c0626c2b70", + "filesize": 1877251072, "download_url": "https://cloud.centos.org/centos/9-stream/x86_64/images", - "direct_download_url": "https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-20250331.0.x86_64.qcow2" + "direct_download_url": "https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-20260504.0.x86_64.qcow2" }, { "filename": "CentOS-Stream-GenericCloud-8-20240603.0.x86_64.qcow2", @@ -61,16 +61,16 @@ ], "versions": [ { - "name": "Stream-10 (20250331.0)", + "name": "Stream-10 (20260504.0)", "images": { - "hda_disk_image": "CentOS-Stream-GenericCloud-x86_64-10-20250331.0.x86_64.qcow2", + "hda_disk_image": "CentOS-Stream-GenericCloud-10-20260504.0.x86_64.qcow2", "cdrom_image": "centos-cloud-init-data.iso" } }, { - "name": "Stream-9 (20250331.0)", + "name": "Stream-9 (20260504.0)", "images": { - "hda_disk_image": "CentOS-Stream-GenericCloud-9-20250331.0.x86_64.qcow2", + "hda_disk_image": "CentOS-Stream-GenericCloud-9-20260504.0.x86_64.qcow2", "cdrom_image": "centos-cloud-init-data.iso" } }, diff --git a/gns3server/appliances/cisco-1700.gns3a b/gns3server/appliances/cisco-1700.gns3a index 655778197..2a9f47708 100644 --- a/gns3server/appliances/cisco-1700.gns3a +++ b/gns3server/appliances/cisco-1700.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "cc2b1802-3520-4963-8ff7-c19b1f6418c5", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 1700", "category": "router", "description": "Cisco 1700 Router", diff --git a/gns3server/appliances/cisco-2600.gns3a b/gns3server/appliances/cisco-2600.gns3a index d565a086c..adbe05044 100644 --- a/gns3server/appliances/cisco-2600.gns3a +++ b/gns3server/appliances/cisco-2600.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "ed474fea-cd3b-4e2e-be84-a855a133060a", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 2600", "category": "router", "description": "Cisco 2600 Router", diff --git a/gns3server/appliances/cisco-2691.gns3a b/gns3server/appliances/cisco-2691.gns3a index 2fd995e65..3c9792eed 100644 --- a/gns3server/appliances/cisco-2691.gns3a +++ b/gns3server/appliances/cisco-2691.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "ed0f079e-a506-4cb4-b46c-714a80bbe2d3", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 2691", "category": "router", "description": "Cisco 2691 Router", diff --git a/gns3server/appliances/cisco-3620.gns3a b/gns3server/appliances/cisco-3620.gns3a index 9519d072c..9ba77bafb 100644 --- a/gns3server/appliances/cisco-3620.gns3a +++ b/gns3server/appliances/cisco-3620.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "7ada6336-7280-4306-9f32-6b1e242ae989", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 3620", "category": "router", "description": "Cisco 3620 Router", diff --git a/gns3server/appliances/cisco-3640.gns3a b/gns3server/appliances/cisco-3640.gns3a index bcfff3fdd..4d3efe89f 100644 --- a/gns3server/appliances/cisco-3640.gns3a +++ b/gns3server/appliances/cisco-3640.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "ef119e49-19fe-4239-9c6b-16ea12f6ec01", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 3640", "category": "router", "description": "Cisco 3640 Router", diff --git a/gns3server/appliances/cisco-3660.gns3a b/gns3server/appliances/cisco-3660.gns3a index ebb1f34b4..1f261a4d5 100644 --- a/gns3server/appliances/cisco-3660.gns3a +++ b/gns3server/appliances/cisco-3660.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "ac460a9c-9274-4ccf-a056-af50b699925f", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 3660", "category": "router", "description": "Cisco 3660 Router", diff --git a/gns3server/appliances/cisco-3725.gns3a b/gns3server/appliances/cisco-3725.gns3a index 1b0c7b3c9..6fed55eed 100644 --- a/gns3server/appliances/cisco-3725.gns3a +++ b/gns3server/appliances/cisco-3725.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "5b9c5293-a5a7-47a3-9df4-6cf658f2f378", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 3725", "category": "router", "description": "Cisco 3725 Router", diff --git a/gns3server/appliances/cisco-3745.gns3a b/gns3server/appliances/cisco-3745.gns3a index d0c6f2407..83c5cf22a 100644 --- a/gns3server/appliances/cisco-3745.gns3a +++ b/gns3server/appliances/cisco-3745.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "18737edb-e43f-4fb0-8a0f-88982cff58b1", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 3745", "category": "router", "description": "Cisco 3745 Multiservice Access Router", diff --git a/gns3server/appliances/cisco-7200.gns3a b/gns3server/appliances/cisco-7200.gns3a index 78d0be865..1441f7751 100644 --- a/gns3server/appliances/cisco-7200.gns3a +++ b/gns3server/appliances/cisco-7200.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "38aa3135-f169-4131-9b64-73605787b5ef", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco 7200", "category": "router", "description": "Cisco 7200 Router", diff --git a/gns3server/appliances/cisco-asav.gns3a b/gns3server/appliances/cisco-asav.gns3a index dadd94561..6f1830986 100644 --- a/gns3server/appliances/cisco-asav.gns3a +++ b/gns3server/appliances/cisco-asav.gns3a @@ -26,6 +26,13 @@ "kvm": "require" }, "images": [ + { + "filename": "asav9-23-1.qcow2", + "version": "9.23.1 CML", + "md5sum": "30454794b46fe07d1cd6a3ee72b511e1", + "filesize": 400687104, + "download_url": "https://u.cisco.com/my-learning/my-account" + }, { "filename": "asav9-22-1-1.qcow2", "version": "9.22.1.1 CML", @@ -133,6 +140,12 @@ } ], "versions": [ + { + "name": "9.23.1 CML", + "images": { + "hda_disk_image": "asav9-23-1.qcow2" + } + }, { "name": "9.22.1.1 CML", "images": { diff --git a/gns3server/appliances/cisco-csr1000v.gns3a b/gns3server/appliances/cisco-csr1000v.gns3a index 7906077e2..77d35a269 100644 --- a/gns3server/appliances/cisco-csr1000v.gns3a +++ b/gns3server/appliances/cisco-csr1000v.gns3a @@ -17,7 +17,7 @@ "qemu": { "adapter_type": "vmxnet3", "adapters": 4, - "ram": 3072, + "ram": 4096, "hda_disk_interface": "ide", "arch": "x86_64", "console_type": "telnet", diff --git a/gns3server/appliances/cisco-iosv.gns3a b/gns3server/appliances/cisco-iosv.gns3a index abde6b8b7..4ddc6cbc5 100644 --- a/gns3server/appliances/cisco-iosv.gns3a +++ b/gns3server/appliances/cisco-iosv.gns3a @@ -1,11 +1,12 @@ { "appliance_id": "3bf492b6-5717-4257-9bfd-b34617c6f133", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco IOSv", "category": "router", "description": "Cisco Virtual IOS allows user to run IOS on a standard computer.", "vendor_name": "Cisco", "vendor_url": "http://www.cisco.com/", - "documentation_url": "https://developer.cisco.com/docs/modeling-labs/iol/", + "documentation_url": "https://developer.cisco.com/docs/modeling-labs/iosv/", "product_name": "IOSv", "product_url": "https://developer.cisco.com/modeling-labs/", "registry_version": 4, @@ -25,6 +26,13 @@ "kvm": "require" }, "images": [ + { + "filename": "vios-adventerprisek9-m.spa.159-3.m10.qcow2", + "version": "15.9(3)M10", + "md5sum": "960ff630ce3fc030f6155a8e77d64105", + "filesize": 57323520, + "download_url": "https://u.cisco.com/my-learning/my-account" + }, { "filename": "vios-adventerprisek9-m.spa.159-3.m9.qcow2", "version": "15.9(3)M9", @@ -112,6 +120,13 @@ } ], "versions": [ + { + "name": "15.9(3)M10", + "images": { + "hda_disk_image": "vios-adventerprisek9-m.spa.159-3.m10.qcow2", + "hdb_disk_image": "IOSv_startup_config.img" + } + }, { "name": "15.9(3)M9", "images": { diff --git a/gns3server/appliances/cisco-iosvl2.gns3a b/gns3server/appliances/cisco-iosvl2.gns3a index 6fa65af5c..f279bf75f 100644 --- a/gns3server/appliances/cisco-iosvl2.gns3a +++ b/gns3server/appliances/cisco-iosvl2.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "4368f802-ddec-4863-adbd-a36a6d83cd4c", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco IOSvL2", "category": "multilayer_switch", "description": "Cisco Virtual IOS L2 allows user to run a IOS switching image on a standard computer.", diff --git a/gns3server/appliances/cisco-iosxrv9k.gns3a b/gns3server/appliances/cisco-iosxrv9k.gns3a index ef9e1fbb6..952049028 100644 --- a/gns3server/appliances/cisco-iosxrv9k.gns3a +++ b/gns3server/appliances/cisco-iosxrv9k.gns3a @@ -19,13 +19,21 @@ "adapter_type": "virtio-net-pci", "adapters": 7, "ram": 16384, + "cpus": 4, "hda_disk_interface": "ide", "arch": "x86_64", "console_type": "telnet", "kvm": "require", - "options": "-smp 4 -cpu host" + "options": "-cpu host" }, "images": [ + { + "filename": "xrv9k-fullk9-x-25.1.1.qcow2", + "version": "25.1.1", + "md5sum": "554d795d495badf90b6c75a2a342b409", + "filesize": 2002911232, + "download_url": "https://u.cisco.com/my-learning/my-account" + }, { "filename": "xrv9k-fullk9-x-24.3.1.qcow2", "version": "24.3.1", @@ -49,6 +57,12 @@ } ], "versions": [ + { + "name": "25.1.1", + "images": { + "hda_disk_image": "xrv9k-fullk9-x-25.1.1.qcow2" + } + }, { "name": "24.3.1", "images": { diff --git a/gns3server/appliances/cisco-iou-l2.gns3a b/gns3server/appliances/cisco-iou-l2.gns3a index daf98d7da..dd5966dd2 100644 --- a/gns3server/appliances/cisco-iou-l2.gns3a +++ b/gns3server/appliances/cisco-iou-l2.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "9593db48-558a-4914-bb78-a20605f39c65", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco IOU L2", "category": "multilayer_switch", "description": "Cisco IOS on UNIX Layer 2 image.", @@ -37,18 +38,6 @@ "version": "17.12.1", "md5sum": "2b5055e4cef8fd257416d74a94adb626", "filesize": 240355720 - }, - { - "filename": "i86bi_linux_l2-adventerprisek9-ms.SSA.high_iron_20190423.bin", - "version": "15.2(20190423)", - "md5sum": "ffe884f8e762b762d7886c51d8ee015c", - "filesize": 126249700 - }, - { - "filename": "i86bi_LinuxL2-AdvEnterpriseK9-M_152_May_2018.bin", - "version": "15.2(20180510)", - "md5sum": "d704b68c5f4c4f92e56b754b49b92012", - "filesize": 126226692 } ], "versions": [ @@ -69,18 +58,6 @@ "images": { "image": "x86_64_crb_linux_l2-adventerprisek9-ms" } - }, - { - "name": "15.2(20190423)", - "images": { - "image": "i86bi_linux_l2-adventerprisek9-ms.SSA.high_iron_20190423.bin" - } - }, - { - "name": "15.2(20180510)", - "images": { - "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 06935482a..ae8273616 100644 --- a/gns3server/appliances/cisco-iou-l3.gns3a +++ b/gns3server/appliances/cisco-iou-l3.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "87bf6f58-1e5a-4ee2-afe7-715dabffcf18", + "tags": ["device_type:cisco_ios_telnet"], "name": "Cisco IOU L3", "category": "router", "description": "Cisco IOS on UNIX Layer 3 image.", @@ -37,12 +38,6 @@ "version": "17.12.1", "md5sum": "4a2fce8de21d1831fbceffd155e41ae7", "filesize": 288947184 - }, - { - "filename": "i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin", - "version": "15.7(3)M2", - "md5sum": "d6874260c3daeeb96d10fc844ae0b93b", - "filesize": 184759244 } ], "versions": [ @@ -63,12 +58,6 @@ "images": { "image": "x86_64_crb_linux-adventerprisek9-ms" } - }, - { - "name": "15.7(3)M2", - "images": { - "image": "i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin" - } } ] } diff --git a/gns3server/appliances/cisco-nxosv9k-lite.gns3a b/gns3server/appliances/cisco-nxosv9k-lite.gns3a new file mode 100644 index 000000000..e309f0ec3 --- /dev/null +++ b/gns3server/appliances/cisco-nxosv9k-lite.gns3a @@ -0,0 +1,69 @@ +{ + "appliance_id": "4c7fd5da-be86-4168-8484-7071dc9c71fb", + "name": "Cisco NX-OSv 9000 Lite", + "category": "multilayer_switch", + "description": "The NX-OSv 9000 is a virtual platform that is designed to simulate the control plane aspects of a network element running Cisco Nexus 9000 software. The NX-OSv 9000 shares the same software image running on Cisco Nexus 9000 hardware platform although no specific hardware emulation is implemented. When the software runs as a virtual machine, line card (LC) ASIC provisioning or any interaction from the control plane to hardware ASIC is handled by the NX-OSv 9000 software data plane.\nThe NX-OSv 9000 for the Cisco Nexus 9000 Series provides a useful tool to enable the devops model and rapidly test changes to the infrastructure or to infrastructure automation tools. This enables network simulations in large scale for customers to validate configuration changes on a simulated network prior to applying them on a production network. Some users have also expressed interest in using the simulation system for feature test ,verification, and automation tooling development and test simualtion prior to deployment. NX-OSv 9000 can be used as a programmability vehicle to validate software defined networks (SDNs) and Network Function Virtualization (NFV) based solutions.\nThe lite version has a reduced memory footprint, resulting in a much smaller image size than the earlier images for Cisco Nexus 9300v and 9500v.", + "vendor_name": "Cisco", + "vendor_url": "http://www.cisco.com/", + "documentation_url": "https://developer.cisco.com/docs/modeling-labs/nx-os-9000/", + "product_name": "NX-OSv 9000", + "product_url": "https://developer.cisco.com/modeling-labs/", + "registry_version": 4, + "status": "stable", + "availability": "service-contract", + "maintainer": "GNS3 Team", + "maintainer_email": "developers@gns3.net", + "first_port_name": "mgmt0", + "port_name_format": "Ethernet1/{port1}", + "qemu": { + "adapter_type": "e1000", + "adapters": 10, + "ram": 6144, + "cpus": 2, + "hda_disk_interface": "sata", + "arch": "x86_64", + "console_type": "telnet", + "kvm": "require" + }, + "images": [ + { + "filename": "nexus9500v64-lite.10.5.5.M.qcow2", + "version": "9500v lite 10.5.5.M", + "md5sum": "a9aafd88f36a7f44a5a2ef3322cd9bde", + "filesize": 2617638912, + "download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(5)" + }, + { + "filename": "nexus9300v64-lite.10.5.5.M.qcow2", + "version": "9300v lite 10.5.5.M", + "md5sum": "78610953005faab9505252baf4c86b78", + "filesize": 2617573376, + "download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(5)" + }, + { + "filename": "OVMF-edk2-stable202305.fd", + "version": "stable202305", + "md5sum": "6c4cf1519fec4a4b95525d9ae562963a", + "filesize": 4194304, + "download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/", + "direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/OVMF-edk2-stable202305.fd.zip/download", + "compression": "zip" + } + ], + "versions": [ + { + "name": "9500v lite 10.5.5.M", + "images": { + "bios_image": "OVMF-edk2-stable202305.fd", + "hda_disk_image": "nexus9500v64-lite.10.5.5.M.qcow2" + } + }, + { + "name": "9300v lite 10.5.5.M", + "images": { + "bios_image": "OVMF-edk2-stable202305.fd", + "hda_disk_image": "nexus9300v64-lite.10.5.5.M.qcow2" + } + } + ] +} diff --git a/gns3server/appliances/cisco-nxosv9k.gns3a b/gns3server/appliances/cisco-nxosv9k.gns3a index 7798233ed..20d96baef 100644 --- a/gns3server/appliances/cisco-nxosv9k.gns3a +++ b/gns3server/appliances/cisco-nxosv9k.gns3a @@ -27,6 +27,20 @@ "kvm": "require" }, "images": [ + { + "filename": "nexus9500v64.10.5.5.M.qcow2", + "version": "9500v 10.5.5.M", + "md5sum": "c1d34bb3331d958d3219a56b6885150e", + "filesize": 2919170048, + "download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(5)" + }, + { + "filename": "nexus9300v64.10.5.5.M.qcow2", + "version": "9300v 10.5.5.M", + "md5sum": "f1cc2342b920320654d232b68551ccfd", + "filesize": 2919104512, + "download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/10.5(5)" + }, { "filename": "nexus9500v64.10.5.1.F.qcow2", "version": "9500v 10.5.1.F", @@ -80,6 +94,20 @@ } ], "versions": [ + { + "name": "9500v 10.5.5.M", + "images": { + "bios_image": "OVMF-edk2-stable202305.fd", + "hda_disk_image": "nexus9500v64.10.5.5.M.qcow2" + } + }, + { + "name": "9300v 10.5.5.M", + "images": { + "bios_image": "OVMF-edk2-stable202305.fd", + "hda_disk_image": "nexus9300v64.10.5.5.M.qcow2" + } + }, { "name": "9500v 10.5.1.F", "images": { diff --git a/gns3server/appliances/fedora-cloud.gns3a b/gns3server/appliances/fedora-cloud.gns3a index 70c334001..3b408ded9 100644 --- a/gns3server/appliances/fedora-cloud.gns3a +++ b/gns3server/appliances/fedora-cloud.gns3a @@ -26,6 +26,30 @@ "options": "-nographic" }, "images": [ + { + "filename": "Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2", + "version": "44-1.7", + "md5sum": "49784011eb752291bfead24d3be8163f", + "filesize": 583729152, + "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/x86_64/images", + "direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/44/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2" + }, + { + "filename": "Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2", + "version": "43-1.6", + "md5sum": "f2f671db53fae58b79bb2e2259fa3622", + "filesize": 583335936, + "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/43/Cloud/x86_64/images", + "direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/43/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2" + }, + { + "filename": "Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2", + "version": "42-1.1", + "md5sum": "2d660d2adc20b1fe793df5cb66f1d868", + "filesize": 532217856, + "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/42/Cloud/x86_64/images", + "direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2" + }, { "filename": "Fedora-Cloud-Base-Generic-41-1.4.x86_64.qcow2", "version": "41-1.4", @@ -34,30 +58,6 @@ "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/41/Cloud/x86_64/images", "direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/41/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-41-1.4.x86_64.qcow2" }, - { - "filename": "Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2", - "version": "40-1.14", - "md5sum": "3eed4b1a9de35208ed30d9bb72c1522d", - "filesize": 397475840, - "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/40/Cloud/x86_64/images", - "direct_download_url": "https://fedora.mirrorservice.org/fedora/linux/releases/40/Cloud/x86_64/images/Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2" - }, - { - "filename": "Fedora-Cloud-Base-39-1.5.x86_64.qcow2", - "version": "39-1.5", - "md5sum": "800a10df2d369891ed65900bcacacd47", - "filesize": 544604160, - "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Cloud/x86_64/images", - "direct_download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Cloud/x86_64/images/Fedora-Cloud-Base-39-1.5.x86_64.qcow2" - }, - { - "filename": "Fedora-Cloud-Base-38-1.6.x86_64.qcow2", - "version": "38-1.6", - "md5sum": "53ddfe7b28666d5ddc55e93ff06abad2", - "filesize": 497287168, - "download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/38/Cloud/x86_64/images", - "direct_download_url": "https://download.fedoraproject.org/pub/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2" - }, { "filename": "fedora-cloud-init-data.iso", "version": "1.0", @@ -68,33 +68,33 @@ } ], "versions": [ + { + "name": "44-1.7", + "images": { + "hda_disk_image": "Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2", + "cdrom_image": "fedora-cloud-init-data.iso" + } + }, + { + "name": "43-1.6", + "images": { + "hda_disk_image": "Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2", + "cdrom_image": "fedora-cloud-init-data.iso" + } + }, + { + "name": "42-1.1", + "images": { + "hda_disk_image": "Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2", + "cdrom_image": "fedora-cloud-init-data.iso" + } + }, { "name": "41-1.4", "images": { "hda_disk_image": "Fedora-Cloud-Base-Generic-41-1.4.x86_64.qcow2", "cdrom_image": "fedora-cloud-init-data.iso" } - }, - { - "name": "40-1.14", - "images": { - "hda_disk_image": "Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2", - "cdrom_image": "fedora-cloud-init-data.iso" - } - }, - { - "name": "39-1.5", - "images": { - "hda_disk_image": "Fedora-Cloud-Base-39-1.5.x86_64.qcow2", - "cdrom_image": "fedora-cloud-init-data.iso" - } - }, - { - "name": "38-1.6", - "images": { - "hda_disk_image": "Fedora-Cloud-Base-38-1.6.x86_64.qcow2", - "cdrom_image": "fedora-cloud-init-data.iso" - } } ] } diff --git a/gns3server/appliances/huawei-ce12800.gns3a b/gns3server/appliances/huawei-ce12800.gns3a index 8d05abeb2..bdb5433d1 100644 --- a/gns3server/appliances/huawei-ce12800.gns3a +++ b/gns3server/appliances/huawei-ce12800.gns3a @@ -1,5 +1,6 @@ { "appliance_id": "bd86792e-9870-4b42-8f16-cb2776f1d5d5", + "tags": ["device_type:gns3_huawei_telnet_ce"], "name": "HuaWei CE12800", "category": "multilayer_switch", "description": "CE12800 series switches are high-performance core switches designed for data center networks and high-end campus networks. The switches provide stable, reliable, secure, and high-performance Layer 2/Layer 3 switching services, to help build an elastic, virtualized, agile, and high-quality network.", diff --git a/gns3server/appliances/oracle-linux-cloud.gns3a b/gns3server/appliances/oracle-linux-cloud.gns3a index 1b53077fc..184a42489 100644 --- a/gns3server/appliances/oracle-linux-cloud.gns3a +++ b/gns3server/appliances/oracle-linux-cloud.gns3a @@ -17,7 +17,7 @@ "qemu": { "adapter_type": "virtio-net-pci", "adapters": 1, - "ram": 1024, + "ram": 1536, "hda_disk_interface": "virtio", "arch": "x86_64", "console_type": "telnet", @@ -27,60 +27,36 @@ }, "images": [ { - "filename": "OL9U5_x86_64-kvm-b259.qcow2", - "version": "9.5", - "md5sum": "05e9b62c408ab49a02d6833fc683d1ad", - "filesize": 652935168, + "filename": "OL10U1_x86_64-kvm-b270.qcow2", + "version": "10.1", + "md5sum": "c3ed48965110e0cbbd75734d3c23a2ce", + "filesize": 1044119552, "download_url": "https://yum.oracle.com/oracle-linux-templates.html", - "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u5/x86_64/OL9U5_x86_64-kvm-b259.qcow2" + "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL10/u1/x86_64/OL10U1_x86_64-kvm-b270.qcow2" }, { - "filename": "OL9U2_x86_64-kvm-b197.qcow", - "version": "9.2", - "md5sum": "2ff3d0bc8a243ad89c96215f303f1c73", - "filesize": 560791552, + "filename": "OL9U7_x86_64-kvm-b269.qcow2", + "version": "9.7", + "md5sum": "fe0c555620d2001bb4d4d95a53b43738", + "filesize": 792985600, "download_url": "https://yum.oracle.com/oracle-linux-templates.html", - "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u2/x86_64/OL9U2_x86_64-kvm-b197.qcow" + "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u7/x86_64/OL9U7_x86_64-kvm-b269.qcow2" }, { - "filename": "OL9U1_x86_64-kvm-b158.qcow", - "version": "9.1", - "md5sum": "9f32851b96fc38191892197fa11f7435", - "filesize": 539033600, - "download_url": "https://yum.oracle.com/oracle-linux-templates.html", - "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL9/u1/x86_64/OL9U1_x86_64-kvm-b158.qcow" - }, - { - "filename": "OL8U10_x86_64-kvm-b258.qcow2", + "filename": "OL8U10_x86_64-kvm-b271.qcow2", "version": "8.10", - "md5sum": "bb07581af5122515b6822595ded5deef", - "filesize": 1251672064, + "md5sum": "f3184e536af1c2aba6b6f499b1a7085a", + "filesize": 1585643520, "download_url": "https://yum.oracle.com/oracle-linux-templates.html", - "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u10/x86_64/OL8U10_x86_64-kvm-b258.qcow2" + "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u10/x86_64/OL8U10_x86_64-kvm-b271.qcow2" }, { - "filename": "OL8U8_x86_64-kvm-b198.qcow", - "version": "8.8", - "md5sum": "717622f373d77349cc102a3a325efbd3", - "filesize": 934215680, - "download_url": "https://yum.oracle.com/oracle-linux-templates.html", - "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u8/x86_64/OL8U8_x86_64-kvm-b198.qcow" - }, - { - "filename": "OL8U7_x86_64-kvm-b148.qcow", - "version": "8.7", - "md5sum": "962cdde7e810888b9914e937222f687f", - "filesize": 913965056, - "download_url": "https://yum.oracle.com/oracle-linux-templates.html", - "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL8/u7/x86_64/OL8U7_x86_64-kvm-b148.qcow" - }, - { - "filename": "OL7U9_x86_64-kvm-b145.qcow", + "filename": "OL7U9_x86_64-kvm-b257.qcow2", "version": "7.9", - "md5sum": "e60d4145a69b34026db6121109ca9131", - "filesize": 725221376, + "md5sum": "d3af7cf0b8f44d298a67ce9ebe184494", + "filesize": 998244352, "download_url": "https://yum.oracle.com/oracle-linux-templates.html", - "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL7/u9/x86_64/OL7U9_x86_64-kvm-b145.qcow" + "direct_download_url": "https://yum.oracle.com/templates/OracleLinux/OL7/u9/x86_64/OL7U9_x86_64-kvm-b257.qcow2" }, { "filename": "oracle-cloud-init-data.iso", @@ -93,51 +69,30 @@ ], "versions": [ { - "name": "9.5", + "name": "10.1", "images": { - "hda_disk_image": "OL9U5_x86_64-kvm-b259.qcow2", + "hda_disk_image": "OL10U1_x86_64-kvm-b270.qcow2", "cdrom_image": "oracle-cloud-init-data.iso" } }, { - "name": "9.2", + "name": "9.7", "images": { - "hda_disk_image": "OL9U2_x86_64-kvm-b197.qcow", - "cdrom_image": "oracle-cloud-init-data.iso" - } - }, - { - "name": "9.1", - "images": { - "hda_disk_image": "OL9U1_x86_64-kvm-b158.qcow", + "hda_disk_image": "OL9U7_x86_64-kvm-b269.qcow2", "cdrom_image": "oracle-cloud-init-data.iso" } }, { "name": "8.10", "images": { - "hda_disk_image": "OL8U10_x86_64-kvm-b258.qcow2", - "cdrom_image": "oracle-cloud-init-data.iso" - } - }, - { - "name": "8.8", - "images": { - "hda_disk_image": "OL8U8_x86_64-kvm-b198.qcow", - "cdrom_image": "oracle-cloud-init-data.iso" - } - }, - { - "name": "8.7", - "images": { - "hda_disk_image": "OL8U7_x86_64-kvm-b148.qcow", + "hda_disk_image": "OL8U10_x86_64-kvm-b271.qcow2", "cdrom_image": "oracle-cloud-init-data.iso" } }, { "name": "7.9", "images": { - "hda_disk_image": "OL7U9_x86_64-kvm-b145.qcow", + "hda_disk_image": "OL7U9_x86_64-kvm-b257.qcow2", "cdrom_image": "oracle-cloud-init-data.iso" } } diff --git a/gns3server/appliances/rockylinux.gns3a b/gns3server/appliances/rockylinux.gns3a index 49f7a4bc4..ef47a965b 100644 --- a/gns3server/appliances/rockylinux.gns3a +++ b/gns3server/appliances/rockylinux.gns3a @@ -17,7 +17,7 @@ "qemu": { "adapter_type": "virtio-net-pci", "adapters": 1, - "ram": 1024, + "ram": 1536, "hda_disk_interface": "virtio", "arch": "x86_64", "console_type": "telnet", @@ -26,6 +26,22 @@ "options": "-nographic -cpu host" }, "images": [ + { + "filename": "Rocky-10-GenericCloud-Base-10.1-20251116.0.x86_64.qcow2", + "version": "10.1", + "md5sum": "729d7235716bd41a0a15e07d2b44c679", + "filesize": 575406080, + "download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/", + "direct_download_url": "https://download.rockylinux.org/pub/rocky/10/images/x86_64/Rocky-10-GenericCloud-Base-10.1-20251116.0.x86_64.qcow2" + }, + { + "filename": "Rocky-9-GenericCloud-Base-9.7-20251123.2.x86_64.qcow2", + "version": "9.7", + "md5sum": "4a0cbfb45b97f09b690044429aaca1c8", + "filesize": 648806400, + "download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/", + "direct_download_url": "https://download.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-Base-9.7-20251123.2.x86_64.qcow2" + }, { "filename": "Rocky-9-GenericCloud-Base-9.5-20241118.0.x86_64.qcow2", "version": "9.5", @@ -76,6 +92,20 @@ } ], "versions": [ + { + "name": "10.1", + "images": { + "hda_disk_image": "Rocky-10-GenericCloud-Base-10.1-20251116.0.x86_64.qcow2", + "cdrom_image": "rocky-cloud-init-data.iso" + } + }, + { + "name": "9.7", + "images": { + "hda_disk_image": "Rocky-9-GenericCloud-Base-9.7-20251123.2.x86_64.qcow2", + "cdrom_image": "rocky-cloud-init-data.iso" + } + }, { "name": "9.5", "images": { diff --git a/gns3server/appliances/westermo-weos.gns3a b/gns3server/appliances/westermo-weos.gns3a new file mode 100644 index 000000000..6ebce85d7 --- /dev/null +++ b/gns3server/appliances/westermo-weos.gns3a @@ -0,0 +1,72 @@ +{ + "appliance_id": "90afc191-6195-4ff2-905b-5470573a882b", + "name": "Westermo WeOS", + "category": "router", + "description": "Westermo Operating System (WeOS) is a leading-edge industrial network operating system that is being continuously developed whilst being subjected to exhaustive quality testing. It powers the most reliable switches and routers on the market, designed for harsh industrial environments. WeOS has extensive support for network and security protocols that have been made simple to configure and maintain. WeOS along with Westermo’s robust hardware provides the world’s most reliable network solutions.", + "vendor_name": "Westermo", + "vendor_url": "https://www.westermo.com/", + "vendor_logo_url": "https://api-0831ddf0-b06c-4a4e-bcf7-afba78872de1.digizuite.app/DigizuiteCore/CollaborationService/api/share/asset/4C90E538E869D47D2782840A06F726F6D7548D864857388E38218F", + "documentation_url": "https://docs.westermo.com/weos/weos-5/", + "product_name": "WeOS", + "product_url": "https://www.westermo.com/products/software/weos", + "registry_version": 4, + "status": "stable", + "availability": "free", + "maintainer": "Westermo", + "maintainer_email": "info@westermo.com", + "usage": "\nFactory Configuration\n=====================\nAll ports are in VLAN1 untagged. The system will acquire a link-local\nIPv4 address (169.254.0.0/16) and will also request an address using\nDHCP. mDNS is enabled and the device is reachable under these names\n(where XX-XX-XX corresponds to the last three octets in the device's\nMAC address): zero-XX-XX-XX.local, zero.local, and weos.local.\n\nManagement\n==========\nAccessible via console, ssh, and http/https.\n\nUsername: admin\nPassword: admin\n\nUpgrade\n=======\nTo upgrade a device, simply download the new version and replace the\nHDA (Primary Master) image under the HDD tab in the configuration pane\nof the device.\n", + "symbol": ":/symbols/classic/router.svg", + "port_name_format": "eth{0}", + "linked_clone": true, + "qemu": { + "adapter_type": "virtio-net-pci", + "adapters": 8, + "ram": 512, + "cpus": 1, + "hda_disk_interface": "virtio", + "hdb_disk_interface": "virtio", + "arch": "x86_64", + "console_type": "telnet", + "kvm": "allow", + "options": "-nographic --machine pc-i440fx-4.2" + }, + "images": [ + { + "filename": "Config-zero-1.0.0.disk", + "version": "1.0.0", + "md5sum": "afe7b74683971fec48802997f6470ca5", + "filesize": 17825792, + "direct_download_url": "https://dropzone.westermo.com/file.aspx?id=e6a7676d-85a7-4374-8961-c68aacb74921" + }, + { + "filename": "WeOS-zero-5.28.0.disk", + "version": "5.28.0", + "md5sum": "7b4e29761091c12ec2cd482f7c1a0bea", + "filesize": 75497472, + "direct_download_url": "https://dropzone.westermo.com/file.aspx?id=4926adbe-0cd6-4851-b70f-e9d60b3b3f06" + }, + { + "filename": "WeOS-zero-5.27.0.disk", + "version": "5.27.0", + "md5sum": "8bd4944b60eaeca391bb5d1dc0defb8b", + "filesize": 78643200, + "direct_download_url": "https://dropzone.westermo.com/file.aspx?id=1a7bf389-a4b1-4dae-b121-6fb3d6781542" + } + ], + "versions": [ + { + "name": "5.28.0", + "images": { + "hda_disk_image": "WeOS-zero-5.28.0.disk", + "hdb_disk_image": "Config-zero-1.0.0.disk" + } + }, + { + "name": "5.27.0", + "images": { + "hda_disk_image": "WeOS-zero-5.27.0.disk", + "hdb_disk_image": "Config-zero-1.0.0.disk" + } + } + ] +} From 59a95edd3d6decdf184c877f1eb2a784ac2ab1be Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 8 May 2026 19:06:04 +0800 Subject: [PATCH 09/10] Release v2.2.59 --- CHANGELOG | 7 +++++++ gns3server/crash_report.py | 2 +- gns3server/version.py | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index e723e6db4..42f09ab17 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,12 @@ # Change Log +## 2.2.59 08/05/2026 + +* Sync appliances +* Fix snapshot restore does not work after export/import of project +* Warn to use 64-bit IOU images. Fixes #2716 32-bit IOU image support has been removed from the GNS3 VM. +* Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344) + ## 2.2.58.1 12/04/2026 * Sync appliances diff --git a/gns3server/crash_report.py b/gns3server/crash_report.py index 467ea972a..4dce82c80 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://414ae874065f1f5d4ad7004b9246b1aa@o19455.ingest.us.sentry.io/38482" + DSN = "https://646d66c1f0b65d59af9c4577a68f3f87@o19455.ingest.us.sentry.io/38482" _instance = None def __init__(self): diff --git a/gns3server/version.py b/gns3server/version.py index e2acb08ee..0a7bc3cd5 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.59.dev2" -__version_info__ = (2, 2, 59, 99) +__version__ = "2.2.59" +__version_info__ = (2, 2, 59, 0) if "dev" in __version__: try: From c3d23d7cae875bd19aab1c8510aaf3fdc6ad3806 Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 8 May 2026 20:03:31 +0800 Subject: [PATCH 10/10] Development on 2.2.60.dev1 --- gns3server/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gns3server/version.py b/gns3server/version.py index 0a7bc3cd5..8d4ff1a3f 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.59" -__version_info__ = (2, 2, 59, 0) +__version__ = "2.2.60.dev1" +__version_info__ = (2, 2, 60, 99) if "dev" in __version__: try: