Merge branch '2.2' into 3.0

# Conflicts:
#	gns3server/appliances/infix.gns3a
#	gns3server/appliances/juniper-vJunos-router.gns3a
#	gns3server/controller/ports/port.py
#	gns3server/crash_report.py
#	gns3server/utils/asyncio/telnet_server.py
#	gns3server/version.py
This commit is contained in:
grossmj 2026-04-06 23:36:03 +08:00
commit b4edfdb063
No known key found for this signature in database
GPG Key ID: 1E7DD6DBB53FF3D7
5 changed files with 19 additions and 16 deletions

View File

@ -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

View File

@ -125,23 +125,9 @@
"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"
},
{
"filename": "infix-x86_64-v26.03.0.qcow2",
"filesize": 320339968,
"md5sum": "24cd1006734993dab338e5c75f80b875",
"version": "26.03.0",
"direct_download_url": "https://github.com/kernelkit/infix/releases/download/v26.03.0/infix-x86_64-v26.03.0.qcow2"
}
],
"versions": [
{
"name": "26.03.0",
"images": {
"bios_image": "OVMF-edk2-stable202305.fd",
"hda_disk_image": "infix-x86_64-v26.03.0.qcow2"
}
},
{
"name": "26.02.1",
"images": {

View File

@ -18,7 +18,7 @@
"port_name_format": "ge-0/0/{port0}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 11,
"adapters": 10,
"ram": 5120,
"cpus": 4,
"hda_disk_interface": "virtio",

View File

@ -83,7 +83,7 @@ class Port:
# If port name format has changed we use the port name as the short name (1.X behavior)
if self._short_name:
return self._short_name
elif "/" in self._name:
elif self._name and '/' in self._name:
return self._name.replace(self.long_name_type(), self.short_name_type())
elif self._name.startswith(f"{self.long_name_type()}{self._interface_number}"):
return self.short_name_type() + f"{self._interface_number}"

View File

@ -133,6 +133,13 @@ def test_list_ports_port_name_format(node):
assert node.asdict()["ports"][1]["name"] == "eth0/0"
def test_short_name_none():
"""
Test short_name does not raise exception when name is None
"""
assert EthernetPort(None, 0, 0, 0).short_name is None
def test_list_ports_adapters(node):
"""
List port using adapters properties