2
.github/workflows/testing.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
|
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
22
CHANGELOG
@ -1,5 +1,27 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## 2.2.47 15/05/2024
|
||||||
|
|
||||||
|
* Fix update-bundled-web-ui.sh script
|
||||||
|
* Bundle web-ui v2.2.47
|
||||||
|
* Change sentry-sdk version
|
||||||
|
* Upgrade aiohttp, sentry-sdk and truststore
|
||||||
|
* Upgrade jsonschema and aiohttp
|
||||||
|
* Drop Python 3.7
|
||||||
|
* Remove dev requirements for Python 3.6
|
||||||
|
* Do not run Docker VM tests on Windows
|
||||||
|
* Do not wait for the server to close when shutting down.
|
||||||
|
* Fix test create image with not supported characters by filesystem. Fixes #2375
|
||||||
|
* Allow listing x86_64 IOU images. Fixes #2376
|
||||||
|
* Upgrade Jinja2 to version 3.1.4. Fixes #2378
|
||||||
|
* Fix link capture for ATM switch. Fixes https://github.com/GNS3/gns3-gui/issues/3570
|
||||||
|
* Fix tests after updating error message when busybox is not installed.
|
||||||
|
* Add more details to error message when busybox is not installed. Fixes https://github.com/GNS3/gns3-gui/issues/3569
|
||||||
|
* Fix invalid escape sequences
|
||||||
|
* Add NAT symbols
|
||||||
|
* Fix cannot stop Docker VM while console connection is still active.
|
||||||
|
* Upgrade sentry-sdk to version 1.40.6
|
||||||
|
|
||||||
## 2.2.46 26/02/2024
|
## 2.2.46 26/02/2024
|
||||||
|
|
||||||
* Bundle web-ui v2.2.46
|
* Bundle web-ui v2.2.46
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
-rrequirements.txt
|
-rrequirements.txt
|
||||||
|
|
||||||
pytest==7.2.0; python_version >= '3.7'
|
pytest==7.2.0
|
||||||
pytest==7.0.1; python_version < '3.7' # v7.0.1 is the last version to support Python 3.6
|
|
||||||
flake8==5.0.4
|
flake8==5.0.4
|
||||||
pytest-timeout==2.1.0
|
pytest-timeout==2.1.0
|
||||||
pytest-aiohttp==1.0.4; python_version >= '3.7'
|
pytest-aiohttp==1.0.4
|
||||||
pytest-aiohttp==0.3.0; python_version < '3.7' # last version to support Python 3.6
|
|
||||||
|
49
gns3server/appliances/asterfusion-vAsterNOS.gns3a
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"appliance_id": "e8001e2b-8ef3-44eb-ace5-79f68f3773e8",
|
||||||
|
"name": "Asterfusion vAsterNOS",
|
||||||
|
"category": "multilayer_switch",
|
||||||
|
"description": "AsterNOS is the core technology of Asterfusion's one-stop turnkey SONiC solution for cloud, enterprise and AI. As an enterprise ready SONiC distribution, AsterNOS features rich functionality enhancement such as MC-LAG, VXLAN, BGP EVPN-Multihoming, RoCEv2(Easy RoCE), and more, making it powerful and easy-to-use in a variety of production scenarios. Currently, AsterNOS is compatible with top commercial switching chips (e.g. Marvell Teralynx, Prestera Falcon/Aldrin/Alleycat, Broadcom Tomahawk/Trident, Intel Tofino and some of NVIDIA's chips.)Through AsterNOS's rich L2/L3 features and enhancements in virtualization and management, cloud architecture built with Asterfusion switching families from 1G-800G (or other standard whitebox switches) can scale to tens of thousands of compute and storage nodes, working smoothly both in underlay nework and overlay cloud fabric with OpenStack integrated, supporting ultra low latency lossless RoCE network in AIGC, distributed storage , or building easily managed access clusters for campus networks.NOTICE: This appliance file is a virtualized version of AsterNOS and is intended to be used only to experience the basic functionality and industry standard CLI (Klish), not for official software testing. For more information about AsterNOS commercial version, please feel free to contact us via Email: bd@cloudswit.ch",
|
||||||
|
"vendor_name": "Asterfusion",
|
||||||
|
"vendor_url": "https://cloudswit.ch/",
|
||||||
|
"vendor_logo_url": "https://raw.githubusercontent.com/GNS3/gns3-registry/master/vendor-logos/asterfusion.png",
|
||||||
|
"documentation_url": "https://help.cloudswit.ch/portal/en/kb/articles/vasternos",
|
||||||
|
"product_name": "vAsterNOS",
|
||||||
|
"product_url": "https://cloudswit.ch/product/sonic-enterprise-distribution",
|
||||||
|
"registry_version": 4,
|
||||||
|
"status": "experimental",
|
||||||
|
"maintainer": "Asterfusion",
|
||||||
|
"maintainer_email": "bd@cloudswit.ch",
|
||||||
|
"usage": "The login is admin, passwd asteros",
|
||||||
|
"symbol": "asterfusion-vAsterNOS.svg",
|
||||||
|
"first_port_name": "eth0",
|
||||||
|
"port_name_format": "Ethernet{0}",
|
||||||
|
"qemu": {
|
||||||
|
"adapter_type": "e1000",
|
||||||
|
"adapters": 10,
|
||||||
|
"ram": 4096,
|
||||||
|
"cpus": 2,
|
||||||
|
"hda_disk_interface": "virtio",
|
||||||
|
"arch": "x86_64",
|
||||||
|
"console_type": "telnet",
|
||||||
|
"boot_priority": "d",
|
||||||
|
"kvm": "require"
|
||||||
|
},
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "vAsterNOS-V3.1.img",
|
||||||
|
"version": "V3.1",
|
||||||
|
"md5sum": "c323c9c3f60e1a93eca2acdc5034b85c",
|
||||||
|
"filesize": 2724659200,
|
||||||
|
"download_url": "https://drive.cloudswitch.io/external/8ae2e3932ad8bb2ec30dd25be415d288ff3e4a949c557c6bd48ac6e6265bcfc1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "V3.1",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "vAsterNOS-V3.1.img"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -24,12 +24,19 @@
|
|||||||
"kvm": "require"
|
"kvm": "require"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "c8000v-universalk9_8G_serial.17.09.04a.qcow2",
|
||||||
|
"version": "17.09.04a 8G",
|
||||||
|
"md5sum": "d5dcba52b522f41648538737af80cdf9",
|
||||||
|
"filesize": 1858142208,
|
||||||
|
"download_url": "https://software.cisco.com/download/home/286327102/type/282046477/release/Cupertino-17.9.4a"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "c8000v-universalk9_8G_serial.17.09.01a.qcow2",
|
"filename": "c8000v-universalk9_8G_serial.17.09.01a.qcow2",
|
||||||
"version": "17.09.01a 8G",
|
"version": "17.09.01a 8G",
|
||||||
"md5sum": "a10ae2c4d71f4eb611bc4d83ad7709f0",
|
"md5sum": "a10ae2c4d71f4eb611bc4d83ad7709f0",
|
||||||
"filesize": 1856634880,
|
"filesize": 1856634880,
|
||||||
"download_url": "https://software.cisco.com/download/home/286327102/type/282046477/release/Bengaluru-17.6.5"
|
"download_url": "https://software.cisco.com/download/home/286327102/type/282046477/release/Cupertino-17.9.1a"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "c8000v-universalk9_8G_serial.17.06.05.qcow2",
|
"filename": "c8000v-universalk9_8G_serial.17.06.05.qcow2",
|
||||||
@ -61,6 +68,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "17.09.04a 8G",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "c8000v-universalk9_8G_serial.17.09.04a.qcow2"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "17.09.01a 8G",
|
"name": "17.09.01a 8G",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -12,20 +12,27 @@
|
|||||||
"status": "experimental",
|
"status": "experimental",
|
||||||
"maintainer": "GNS3 Team",
|
"maintainer": "GNS3 Team",
|
||||||
"maintainer_email": "developers@gns3.net",
|
"maintainer_email": "developers@gns3.net",
|
||||||
"usage": "There is no default configuration present. Virtual Switch and Interfaces may take several minutes to be usable after appliance boot.",
|
"usage": "There is no default configuration present. Virtual Switch and Interfaces may take several minutes to be usable after appliance boot.\n\nOnly has basic Layer 2 switching features. Will need to enable advance features and reboot to gain access to things like BGP, etc... \n\nconfigure terminal \nlicense boot level network-advantage addon dna-advantage \nend \nwrite memory \nreload",
|
||||||
"first_port_name": "GigabitEthernet0/0",
|
"first_port_name": "GigabitEthernet0/0",
|
||||||
"port_name_format": "GigabitEthernet1/0/{port1}",
|
"port_name_format": "GigabitEthernet1/0/{port1}",
|
||||||
"qemu": {
|
"qemu": {
|
||||||
"adapter_type": "virtio-net-pci",
|
"adapter_type": "virtio-net-pci",
|
||||||
"adapters": 9,
|
"adapters": 9,
|
||||||
"ram": 16384,
|
"ram": 24576,
|
||||||
"cpus": 2,
|
"cpus": 4,
|
||||||
"hda_disk_interface": "virtio",
|
"hda_disk_interface": "virtio",
|
||||||
"arch": "x86_64",
|
"arch": "x86_64",
|
||||||
"console_type": "telnet",
|
"console_type": "telnet",
|
||||||
"kvm": "require"
|
"kvm": "require"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "cat9kv-prd-17.12.01prd9.qcow2",
|
||||||
|
"version": "17.12(1)",
|
||||||
|
"md5sum": "e587e92186f42bdf69d7fa27f34425f7",
|
||||||
|
"filesize": 2739404800,
|
||||||
|
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "cat9kv-prd-17.10.01prd7.qcow2",
|
"filename": "cat9kv-prd-17.10.01prd7.qcow2",
|
||||||
"version": "17.10(1)",
|
"version": "17.10(1)",
|
||||||
@ -35,6 +42,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "17.12(1)",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "cat9kv-prd-17.12.01prd9.qcow2"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "17.10(1)",
|
"name": "17.10(1)",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -32,6 +32,13 @@
|
|||||||
"download_url": "https://sourceforge.net/projects/gns-3/files",
|
"download_url": "https://sourceforge.net/projects/gns-3/files",
|
||||||
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/IOSv_startup_config.img/download"
|
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/IOSv_startup_config.img/download"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"filename": "vios-adventerprisek9-m.spa.159-3.m8.qcow2",
|
||||||
|
"version": "15.9(3)M8",
|
||||||
|
"md5sum": "8d93a185c2fa778178a933f20b02150a",
|
||||||
|
"filesize": 57319424,
|
||||||
|
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "vios-adventerprisek9-m.spa.159-3.m6.qcow2",
|
"filename": "vios-adventerprisek9-m.spa.159-3.m6.qcow2",
|
||||||
"version": "15.9(3)M6",
|
"version": "15.9(3)M6",
|
||||||
@ -97,6 +104,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "15.9(3)M8",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "vios-adventerprisek9-m.spa.159-3.m8.qcow2",
|
||||||
|
"hdb_disk_image": "IOSv_startup_config.img"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "15.9(3)M6",
|
"name": "15.9(3)M6",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -18,6 +18,12 @@
|
|||||||
"startup_config": "iou_l2_base_startup-config.txt"
|
"startup_config": "iou_l2_base_startup-config.txt"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "x86_64_crb_linux_l2-adventerprisek9-ms",
|
||||||
|
"version": "17.12.1",
|
||||||
|
"md5sum": "2b5055e4cef8fd257416d74a94adb626",
|
||||||
|
"filesize": 240355720
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "i86bi-linux-l2-ipbasek9-15.1g.bin",
|
"filename": "i86bi-linux-l2-ipbasek9-15.1g.bin",
|
||||||
"version": "15.1g",
|
"version": "15.1g",
|
||||||
@ -38,6 +44,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "17.12.1",
|
||||||
|
"images": {
|
||||||
|
"image": "x86_64_crb_linux_l2-adventerprisek9-ms"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "15.1g",
|
"name": "15.1g",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -18,6 +18,12 @@
|
|||||||
"startup_config": "iou_l3_base_startup-config.txt"
|
"startup_config": "iou_l3_base_startup-config.txt"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "x86_64_crb_linux-adventerprisek9-ms",
|
||||||
|
"version": "17.12.1",
|
||||||
|
"md5sum": "4a2fce8de21d1831fbceffd155e41ae7",
|
||||||
|
"filesize": 288947184
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin",
|
"filename": "i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin",
|
||||||
"version": "15.7(3)M2",
|
"version": "15.7(3)M2",
|
||||||
@ -38,6 +44,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "17.12.1",
|
||||||
|
"images": {
|
||||||
|
"image": "x86_64_crb_linux-adventerprisek9-ms"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "15.7(3)M2",
|
"name": "15.7(3)M2",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
"description": "Clavister NetShield (cOS Stream) Virtual Appliance offers the same functionality as the Clavister NetShield physical NGappliances FWs in a virtual environment.",
|
"description": "Clavister NetShield (cOS Stream) Virtual Appliance offers the same functionality as the Clavister NetShield physical NGappliances FWs in a virtual environment.",
|
||||||
"vendor_name": "Clavister",
|
"vendor_name": "Clavister",
|
||||||
"vendor_url": "https://www.clavister.com/",
|
"vendor_url": "https://www.clavister.com/",
|
||||||
"documentation_url": "https://kb.clavister.com",
|
"documentation_url": "https://docs.clavister.com",
|
||||||
"product_name": "NetShield",
|
"product_name": "NetShield",
|
||||||
"product_url": "https://www.clavister.com/products/netshield/",
|
"product_url": "https://www.clavister.com/products/netshield/",
|
||||||
"registry_version": 4,
|
"registry_version": 4,
|
||||||
@ -13,7 +13,7 @@
|
|||||||
"availability": "free-to-try",
|
"availability": "free-to-try",
|
||||||
"maintainer": "Mattias Nordlund",
|
"maintainer": "Mattias Nordlund",
|
||||||
"maintainer_email": "mattias.nordlund@clavister.com",
|
"maintainer_email": "mattias.nordlund@clavister.com",
|
||||||
"usage": "No configuration by default, oen console to set IPs and activate configuration.",
|
"usage": "No configuration by default, use console to set IPs and activate configuration.",
|
||||||
"port_name_format": "if{0}",
|
"port_name_format": "if{0}",
|
||||||
"qemu": {
|
"qemu": {
|
||||||
"adapter_type": "virtio-net-pci",
|
"adapter_type": "virtio-net-pci",
|
||||||
@ -27,6 +27,13 @@
|
|||||||
"options": "-cpu Nehalem"
|
"options": "-cpu Nehalem"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "clavister-cos-stream-4.00.00.34-virtual-x64-generic.qcow2",
|
||||||
|
"version": "cOS Stream 4.00.00",
|
||||||
|
"md5sum": "02b480621d9bf1a9a4e116cd47bef006",
|
||||||
|
"filesize": 132841472,
|
||||||
|
"download_url": "https://my.clavister.com/download/86399b21-44c7-ee11-a434-005056bdfeb0"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "clavister-cos-stream-3.80.09.01-virtual-x64-generic.qcow2",
|
"filename": "clavister-cos-stream-3.80.09.01-virtual-x64-generic.qcow2",
|
||||||
"version": "cOS Stream 3.80.09",
|
"version": "cOS Stream 3.80.09",
|
||||||
@ -36,6 +43,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "cOS Stream 4.00.00",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "clavister-cos-stream-4.00.00.34-virtual-x64-generic.qcow2"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "cOS Stream 3.80.09",
|
"name": "cOS Stream 3.80.09",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
"description": "Clavister NetWall (cOS Core) Virtual Appliance offers the same functionality as the Clavister NetWall physical NGFWs in a virtual environment.",
|
"description": "Clavister NetWall (cOS Core) Virtual Appliance offers the same functionality as the Clavister NetWall physical NGFWs in a virtual environment.",
|
||||||
"vendor_name": "Clavister",
|
"vendor_name": "Clavister",
|
||||||
"vendor_url": "https://www.clavister.com/",
|
"vendor_url": "https://www.clavister.com/",
|
||||||
"documentation_url": "https://kb.clavister.com",
|
"documentation_url": "https://docs.clavister.com",
|
||||||
"product_name": "NetWall",
|
"product_name": "NetWall",
|
||||||
"product_url": "https://www.clavister.com/products/ngfw/",
|
"product_url": "https://www.clavister.com/products/ngfw/",
|
||||||
"registry_version": 4,
|
"registry_version": 4,
|
||||||
@ -13,7 +13,7 @@
|
|||||||
"availability": "free-to-try",
|
"availability": "free-to-try",
|
||||||
"maintainer": "Mattias Nordlund",
|
"maintainer": "Mattias Nordlund",
|
||||||
"maintainer_email": "mattias.nordlund@clavister.com",
|
"maintainer_email": "mattias.nordlund@clavister.com",
|
||||||
"usage": "DHCP enabled on all interfaces by default, WebUI/SSH access enabled on the local network connected to If1.",
|
"usage": "DHCP & cloud-init enabled on all interfaces by default, WebUI/SSH access enabled on the local network connected to If1.",
|
||||||
"port_name_format": "If{0}",
|
"port_name_format": "If{0}",
|
||||||
"qemu": {
|
"qemu": {
|
||||||
"adapter_type": "e1000",
|
"adapter_type": "e1000",
|
||||||
@ -26,6 +26,13 @@
|
|||||||
"kvm": "allow"
|
"kvm": "allow"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "clavister-cos-core-14.00.13.08-kvm-en.img",
|
||||||
|
"version": "cOS Core 14.00.13 (x86)",
|
||||||
|
"md5sum": "d36797077378accb2b8fc72d09d07ee1",
|
||||||
|
"filesize": 536870912,
|
||||||
|
"download_url": "https://my.clavister.com/download/f3f494a3-9ee7-ee11-a434-005056bdfeb0"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "clavister-cos-core-14.00.01.13-kvm-en.img",
|
"filename": "clavister-cos-core-14.00.01.13-kvm-en.img",
|
||||||
"version": "cOS Core 14.00.01 (x86)",
|
"version": "cOS Core 14.00.01 (x86)",
|
||||||
@ -42,6 +49,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "cOS Core 14.00.13 (x86)",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "clavister-cos-core-14.00.13.08-kvm-en.img"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "cOS Core 14.00.01 (x86)",
|
"name": "cOS Core 14.00.01 (x86)",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -26,163 +26,25 @@
|
|||||||
"kvm": "allow",
|
"kvm": "allow",
|
||||||
"options": "-cpu core2duo"
|
"options": "-cpu core2duo"
|
||||||
},
|
},
|
||||||
|
|
||||||
"images": [
|
"images": [
|
||||||
|
|
||||||
{
|
{
|
||||||
"filename": "EXOS-VM_v32.1.1.6.qcow2",
|
"filename": "EXOS-VM_v32.6.3.126.qcow2",
|
||||||
"version": "32.1.1.6",
|
"version": "32.6.3.126",
|
||||||
"md5sum": "48868bbcb4255d6365049b5941dd2af7",
|
"md5sum": "5856b6c427bd605fe1c7adb6ee6b2659",
|
||||||
"filesize": 231211008,
|
"filesize": 236716032,
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v32.1.1.6.qcow2"
|
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v32.6.3.126.qcow2"
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v31.7.1.4.qcow2",
|
|
||||||
"version": "31.7.1.4",
|
|
||||||
"md5sum": "a70e4fa3bc361434237ad12937aaf0fb",
|
|
||||||
"filesize": 458227712,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v31.7.1.4.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v31.1.1.3.qcow2",
|
|
||||||
"version": "31.1.1.3",
|
|
||||||
"md5sum": "e4936ad94a5304bfeeca8dfc6f285cc0",
|
|
||||||
"filesize": 561512448,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v31.1.1.3.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v30.7.1.1.qcow2",
|
|
||||||
"version": "30.7.1.1",
|
|
||||||
"md5sum": "c6b67023945102f984b47aa67c67fe33",
|
|
||||||
"filesize": 485687296,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.7.1.1.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v30.6.1.11.qcow2",
|
|
||||||
"version": "30.6.1.11",
|
|
||||||
"md5sum": "bf3e13570417d7e3464165b344c196eb",
|
|
||||||
"filesize": 475332608,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.6.1.11.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v30.5.1.15.qcow2",
|
|
||||||
"version": "30.5.1.15",
|
|
||||||
"md5sum": "380d0c7bb8f0aa272ceb84b85f367a63",
|
|
||||||
"filesize": 498663424,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.5.1.15.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v30.4.1.2.qcow2",
|
|
||||||
"version": "30.4.1.2",
|
|
||||||
"md5sum": "133fa38bf80daec9e389729c96e692c0",
|
|
||||||
"filesize": 454557696,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.4.1.2.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v30.3.1.6.qcow2",
|
|
||||||
"version": "30.3.1.6",
|
|
||||||
"md5sum": "edb86b406efe99434c6d5366d9bfa97f",
|
|
||||||
"filesize": 448266240,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.3.1.6.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v30.2.1.8.qcow2",
|
|
||||||
"version": "30.2.1.8",
|
|
||||||
"md5sum": "4bdbf3ddff7a030e19c6bb71270b56d2",
|
|
||||||
"filesize": 355205120,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.2.1.8.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v30.1.1.4.qcow2",
|
|
||||||
"version": "30.1.1.4",
|
|
||||||
"md5sum": "92d3f9b13d750f7bfa804823fa545772",
|
|
||||||
"filesize": 383385600,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.1.1.4.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v22.7.1.2.qcow2",
|
|
||||||
"version": "22.7.1.2",
|
|
||||||
"md5sum": "a13e839b3fa05e8a5b0fb31f7e3dda86",
|
|
||||||
"filesize": 180420608,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v22.7.1.2.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "EXOS-VM_v21.1.1.4-disk1.qcow2",
|
|
||||||
"version": "21.1.1.4",
|
|
||||||
"md5sum": "654606809b6fd3bca400377483eb4a79",
|
|
||||||
"filesize": 117560832,
|
|
||||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v21.1.1.4-disk1.qcow2"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"versions": [
|
"versions": [
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "32.1.1.6",
|
"name": "32.6.3.126",
|
||||||
"images": {
|
"images": {
|
||||||
"hda_disk_image": "EXOS-VM_v32.1.1.6.qcow2"
|
"hda_disk_image": "EXOS-VM_v32.6.3.126.qcow2"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "31.7.1.4",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v31.7.1.4.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "31.1.1.3",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v31.1.1.3.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "30.7.1.1",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v30.7.1.1.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "30.6.1.11",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v30.6.1.11.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "30.5.1.15",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v30.5.1.15.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "30.4.1.2",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v30.4.1.2.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "30.3.1.6",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v30.3.1.6.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "30.2.1.8",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v30.2.1.8.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "30.1.1.4",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v30.1.1.4.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "22.7.1.2",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v22.7.1.2.qcow2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "21.1.1.4",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "EXOS-VM_v21.1.1.4-disk1.qcow2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -24,13 +24,22 @@
|
|||||||
"kvm": "require"
|
"kvm": "require"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "FreeBSD-14.0-RELEASE-amd64.qcow2",
|
||||||
|
"version": "14.0",
|
||||||
|
"md5sum": "87b988eaa4a8aaabea1c10649c98b3f0",
|
||||||
|
"filesize": 3506569216,
|
||||||
|
"download_url": "https://www.freebsd.org/where.html",
|
||||||
|
"direct_download_url": "https://download.freebsd.org/releases/VM-IMAGES/14.0-RELEASE/amd64/Latest/FreeBSD-14.0-RELEASE-amd64.qcow2.xz",
|
||||||
|
"compression": "xz"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "FreeBSD-13.0-RELEASE-amd64.qcow2",
|
"filename": "FreeBSD-13.0-RELEASE-amd64.qcow2",
|
||||||
"version": "13.0",
|
"version": "13.0",
|
||||||
"md5sum": "e8e598959da456c03260421b5f9890de",
|
"md5sum": "e8e598959da456c03260421b5f9890de",
|
||||||
"filesize": 3466854400,
|
"filesize": 3466854400,
|
||||||
"download_url": "https://www.freebsd.org/where.html",
|
"download_url": "https://www.freebsd.org/where.html",
|
||||||
"direct_download_url": "https://download.freebsd.org/ftp/releases/VM-IMAGES/13.0-RELEASE/amd64/Latest/FreeBSD-13.0-RELEASE-amd64.qcow2.xz",
|
"direct_download_url": "http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/VM-IMAGES/13.0-RELEASE/amd64/Latest/FreeBSD-13.0-RELEASE-amd64.qcow2.xz",
|
||||||
"compression": "xz"
|
"compression": "xz"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -39,11 +48,17 @@
|
|||||||
"md5sum": "3d7d5396f3d89ed30c2bfa2ee2e6b013",
|
"md5sum": "3d7d5396f3d89ed30c2bfa2ee2e6b013",
|
||||||
"filesize": 3412000768,
|
"filesize": 3412000768,
|
||||||
"download_url": "https://www.freebsd.org/where.html",
|
"download_url": "https://www.freebsd.org/where.html",
|
||||||
"direct_download_url": "https://download.freebsd.org/ftp/releases/VM-IMAGES/12.3-RELEASE/amd64/Latest/FreeBSD-12.3-RELEASE-amd64.qcow2.xz",
|
"direct_download_url": "http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/VM-IMAGES/12.3-RELEASE/amd64/Latest/FreeBSD-12.3-RELEASE-amd64.qcow2.xz",
|
||||||
"compression": "xz"
|
"compression": "xz"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "14.0",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "FreeBSD-14.0-RELEASE-amd64.qcow2"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "13.0",
|
"name": "13.0",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -27,6 +27,15 @@
|
|||||||
"options": "-nographic"
|
"options": "-nographic"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "chr-7.14.2.img",
|
||||||
|
"version": "7.14.2",
|
||||||
|
"md5sum": "531901dac85b67b23011e946a62abc7b",
|
||||||
|
"filesize": 134217728,
|
||||||
|
"download_url": "http://www.mikrotik.com/download",
|
||||||
|
"direct_download_url": "https://download.mikrotik.com/routeros/7.14.2/chr-7.14.2.img.zip",
|
||||||
|
"compression": "zip"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "chr-7.11.2.img",
|
"filename": "chr-7.11.2.img",
|
||||||
"version": "7.11.2",
|
"version": "7.11.2",
|
||||||
|
@ -26,6 +26,14 @@
|
|||||||
"kvm": "require"
|
"kvm": "require"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "openmediavault_7.0.32-amd64.iso",
|
||||||
|
"version": "7.0.32",
|
||||||
|
"md5sum": "36d1fda7de0c8dd6806a65145845d362",
|
||||||
|
"filesize": 981467136,
|
||||||
|
"download_url": "https://www.openmediavault.org/download.html",
|
||||||
|
"direct_download_url": "https://sourceforge.net/projects/openmediavault/files/iso/7.0-32/openmediavault_7.0-32-amd64.iso"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "openmediavault_6.5.0-amd64.iso",
|
"filename": "openmediavault_6.5.0-amd64.iso",
|
||||||
"version": "6.5.0",
|
"version": "6.5.0",
|
||||||
@ -68,6 +76,14 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "7.0.32",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "empty30G.qcow2",
|
||||||
|
"hdb_disk_image": "empty30G.qcow2",
|
||||||
|
"cdrom_image": "openmediavault_7.0.32-amd64.iso"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "6.5.0",
|
"name": "6.5.0",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -16,6 +16,6 @@
|
|||||||
"docker": {
|
"docker": {
|
||||||
"adapters": 16,
|
"adapters": 16,
|
||||||
"image": "gns3/openvswitch:latest",
|
"image": "gns3/openvswitch:latest",
|
||||||
"environment": "MANAGEMENT_INTERFACE=1"
|
"environment": "MANAGEMENT_INTERFACE=eth0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,13 @@
|
|||||||
"kvm": "require"
|
"kvm": "require"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "OPNsense-24.1-nano-amd64.img",
|
||||||
|
"version": "24.1",
|
||||||
|
"md5sum": "ea8472df2c272419b7834cddaf68048d",
|
||||||
|
"filesize": 3221225472,
|
||||||
|
"download_url": "https://opnsense.c0urier.net/releases/24.1/"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "OPNsense-23.1-OpenSSL-nano-amd64.img",
|
"filename": "OPNsense-23.1-OpenSSL-nano-amd64.img",
|
||||||
"version": "23.1",
|
"version": "23.1",
|
||||||
@ -62,6 +69,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "24.1",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "OPNsense-24.1-nano-amd64.img"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "23.1",
|
"name": "23.1",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -88,7 +88,7 @@ class Docker(BaseManager):
|
|||||||
f"{stdout.decode('utf-8', errors='ignore').strip()}")
|
f"{stdout.decode('utf-8', errors='ignore').strip()}")
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
raise DockerError(f"Could not install busybox: {e}")
|
raise DockerError(f"Could not install busybox: {e}")
|
||||||
raise DockerError("No busybox executable could be found")
|
raise DockerError("No busybox executable could be found, please install busybox (apt install busybox-static on Debian/Ubuntu) and make sure it is in your PATH")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def resources_path():
|
def resources_path():
|
||||||
|
@ -481,6 +481,9 @@ class DockerVM(BaseNode):
|
|||||||
await self._start_vnc_process(restart=True)
|
await self._start_vnc_process(restart=True)
|
||||||
monitor_process(self._vnc_process, self._vnc_callback)
|
monitor_process(self._vnc_process, self._vnc_callback)
|
||||||
|
|
||||||
|
if self._console_websocket:
|
||||||
|
await self._console_websocket.close()
|
||||||
|
self._console_websocket = None
|
||||||
await self._clean_servers()
|
await self._clean_servers()
|
||||||
|
|
||||||
await self.manager.query("POST", "containers/{}/start".format(self._cid))
|
await self.manager.query("POST", "containers/{}/start".format(self._cid))
|
||||||
@ -702,9 +705,7 @@ class DockerVM(BaseNode):
|
|||||||
|
|
||||||
self._console_websocket = await self.manager.websocket_query("containers/{}/attach/ws?stream=1&stdin=1&stdout=1&stderr=1".format(self._cid))
|
self._console_websocket = await self.manager.websocket_query("containers/{}/attach/ws?stream=1&stdin=1&stdout=1&stderr=1".format(self._cid))
|
||||||
input_stream.ws = self._console_websocket
|
input_stream.ws = self._console_websocket
|
||||||
|
|
||||||
output_stream.feed_data(self.name.encode() + b" console is now available... Press RETURN to get started.\r\n")
|
output_stream.feed_data(self.name.encode() + b" console is now available... Press RETURN to get started.\r\n")
|
||||||
|
|
||||||
asyncio.ensure_future(self._read_console_output(self._console_websocket, output_stream))
|
asyncio.ensure_future(self._read_console_output(self._console_websocket, output_stream))
|
||||||
|
|
||||||
async def _read_console_output(self, ws, out):
|
async def _read_console_output(self, ws, out):
|
||||||
@ -727,13 +728,14 @@ class DockerVM(BaseNode):
|
|||||||
out.feed_eof()
|
out.feed_eof()
|
||||||
await ws.close()
|
await ws.close()
|
||||||
break
|
break
|
||||||
await self.stop()
|
|
||||||
|
|
||||||
async def reset_console(self):
|
async def reset_console(self):
|
||||||
"""
|
"""
|
||||||
Reset the console.
|
Reset the console.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if self._console_websocket:
|
||||||
|
await self._console_websocket.close()
|
||||||
await self._clean_servers()
|
await self._clean_servers()
|
||||||
await self._start_console()
|
await self._start_console()
|
||||||
|
|
||||||
@ -778,6 +780,9 @@ class DockerVM(BaseNode):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
if self._console_websocket:
|
||||||
|
await self._console_websocket.close()
|
||||||
|
self._console_websocket = None
|
||||||
await self._clean_servers()
|
await self._clean_servers()
|
||||||
await self._stop_ubridge()
|
await self._stop_ubridge()
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ class Qemu(BaseManager):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
output = await subprocess_check_output(qemu_path, "-version", "-nographic")
|
output = await subprocess_check_output(qemu_path, "-version", "-nographic")
|
||||||
match = re.search("version\s+([0-9a-z\-\.]+)", output)
|
match = re.search(r"version\s+([0-9a-z\-\.]+)", output)
|
||||||
if match:
|
if match:
|
||||||
version = match.group(1)
|
version = match.group(1)
|
||||||
return version
|
return version
|
||||||
|
@ -701,7 +701,7 @@ class VMware(BaseManager):
|
|||||||
path = ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
|
path = ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
|
||||||
ctypes.windll.shell32.SHGetFolderPathW(None, 5, None, 0, path)
|
ctypes.windll.shell32.SHGetFolderPathW(None, 5, None, 0, path)
|
||||||
documents_folder = path.value
|
documents_folder = path.value
|
||||||
return ['{}\My Virtual Machines'.format(documents_folder), '{}\Virtual Machines'.format(documents_folder)]
|
return [r'{}\My Virtual Machines'.format(documents_folder), r'{}\Virtual Machines'.format(documents_folder)]
|
||||||
elif sys.platform.startswith("darwin"):
|
elif sys.platform.startswith("darwin"):
|
||||||
return [os.path.expanduser("~/Documents/Virtual Machines.localized")]
|
return [os.path.expanduser("~/Documents/Virtual Machines.localized")]
|
||||||
else:
|
else:
|
||||||
|
@ -484,7 +484,7 @@ class Compute:
|
|||||||
return self._getUrl(path)
|
return self._getUrl(path)
|
||||||
|
|
||||||
async def _run_http_query(self, method, path, data=None, timeout=20, raw=False):
|
async def _run_http_query(self, method, path, data=None, timeout=20, raw=False):
|
||||||
with async_timeout.timeout(timeout):
|
async with async_timeout.timeout(delay=timeout):
|
||||||
url = self._getUrl(path)
|
url = self._getUrl(path)
|
||||||
headers = {}
|
headers = {}
|
||||||
headers['content-type'] = 'application/json'
|
headers['content-type'] = 'application/json'
|
||||||
|
@ -52,15 +52,15 @@ class Snapshot:
|
|||||||
self._project = project
|
self._project = project
|
||||||
if name:
|
if name:
|
||||||
self._name = name
|
self._name = name
|
||||||
self._created_at = datetime.now().timestamp()
|
self._created_at = datetime.now(timezone.utc).timestamp()
|
||||||
filename = self._name + "_" + datetime.utcfromtimestamp(self._created_at).replace(tzinfo=None).strftime(FILENAME_TIME_FORMAT) + ".gns3project"
|
filename = self._name + "_" + datetime.fromtimestamp(self._created_at, tz=timezone.utc).replace(tzinfo=None).strftime(FILENAME_TIME_FORMAT) + ".gns3project"
|
||||||
else:
|
else:
|
||||||
self._name = filename.split("_")[0]
|
self._name = filename.split("_")[0]
|
||||||
datestring = filename.replace(self._name + "_", "").split(".")[0]
|
datestring = filename.replace(self._name + "_", "").split(".")[0]
|
||||||
try:
|
try:
|
||||||
self._created_at = datetime.strptime(datestring, FILENAME_TIME_FORMAT).replace(tzinfo=timezone.utc).timestamp()
|
self._created_at = datetime.strptime(datestring, FILENAME_TIME_FORMAT).replace(tzinfo=timezone.utc).timestamp()
|
||||||
except ValueError:
|
except ValueError:
|
||||||
self._created_at = datetime.utcnow().timestamp()
|
self._created_at = datetime.now(timezone.utc)
|
||||||
self._path = os.path.join(project.path, "snapshots", filename)
|
self._path = os.path.join(project.path, "snapshots", filename)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
CLASSIC_SYMBOL_THEME = {"cloud": ":/symbols/classic/cloud.svg",
|
CLASSIC_SYMBOL_THEME = {"cloud": ":/symbols/classic/cloud.svg",
|
||||||
|
"nat": ":/symbols/classic/nat.svg",
|
||||||
"ethernet_switch": ":/symbols/classic/ethernet_switch.svg",
|
"ethernet_switch": ":/symbols/classic/ethernet_switch.svg",
|
||||||
"ethernet_hub": ":/symbols/classic/hub.svg",
|
"ethernet_hub": ":/symbols/classic/hub.svg",
|
||||||
"frame_relay_switch": ":/symbols/classic/frame_relay_switch.svg",
|
"frame_relay_switch": ":/symbols/classic/frame_relay_switch.svg",
|
||||||
@ -32,6 +33,7 @@ CLASSIC_SYMBOL_THEME = {"cloud": ":/symbols/classic/cloud.svg",
|
|||||||
"docker_guest": ":/symbols/classic/docker_guest.svg"}
|
"docker_guest": ":/symbols/classic/docker_guest.svg"}
|
||||||
|
|
||||||
AFFINITY_SQUARE_BLUE_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/blue/cloud.svg",
|
AFFINITY_SQUARE_BLUE_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/blue/cloud.svg",
|
||||||
|
"nat": ":/symbols/affinity/square/blue/nat.svg",
|
||||||
"ethernet_switch": ":/symbols/affinity/square/blue/switch.svg",
|
"ethernet_switch": ":/symbols/affinity/square/blue/switch.svg",
|
||||||
"ethernet_hub": ":/symbols/affinity/square/blue/hub.svg",
|
"ethernet_hub": ":/symbols/affinity/square/blue/hub.svg",
|
||||||
"frame_relay_switch.svg": ":/symbols/affinity/square/blue/isdn.svg",
|
"frame_relay_switch.svg": ":/symbols/affinity/square/blue/isdn.svg",
|
||||||
@ -47,6 +49,7 @@ AFFINITY_SQUARE_BLUE_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/blue/cl
|
|||||||
"docker_guest": ":/symbols/affinity/square/blue/docker.svg"}
|
"docker_guest": ":/symbols/affinity/square/blue/docker.svg"}
|
||||||
|
|
||||||
AFFINITY_SQUARE_RED_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/red/cloud.svg",
|
AFFINITY_SQUARE_RED_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/red/cloud.svg",
|
||||||
|
"nat": ":/symbols/affinity/square/red/nat.svg",
|
||||||
"ethernet_switch": ":/symbols/affinity/square/red/switch.svg",
|
"ethernet_switch": ":/symbols/affinity/square/red/switch.svg",
|
||||||
"ethernet_hub": ":/symbols/affinity/square/red/hub.svg",
|
"ethernet_hub": ":/symbols/affinity/square/red/hub.svg",
|
||||||
"frame_relay_switch": ":/symbols/affinity/square/red/isdn.svg",
|
"frame_relay_switch": ":/symbols/affinity/square/red/isdn.svg",
|
||||||
@ -62,6 +65,7 @@ AFFINITY_SQUARE_RED_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/red/clou
|
|||||||
"docker_guest": ":/symbols/affinity/square/red/docker.svg"}
|
"docker_guest": ":/symbols/affinity/square/red/docker.svg"}
|
||||||
|
|
||||||
AFFINITY_SQUARE_GRAY_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/gray/cloud.svg",
|
AFFINITY_SQUARE_GRAY_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/gray/cloud.svg",
|
||||||
|
"nat": ":/symbols/affinity/square/gray/nat.svg",
|
||||||
"ethernet_switch": ":/symbols/affinity/square/gray/switch.svg",
|
"ethernet_switch": ":/symbols/affinity/square/gray/switch.svg",
|
||||||
"ethernet_hub": ":/symbols/affinity/square/gray/hub.svg",
|
"ethernet_hub": ":/symbols/affinity/square/gray/hub.svg",
|
||||||
"frame_relay_switch": ":/symbols/affinity/square/gray/isdn.svg",
|
"frame_relay_switch": ":/symbols/affinity/square/gray/isdn.svg",
|
||||||
@ -77,6 +81,7 @@ AFFINITY_SQUARE_GRAY_SYMBOL_THEME = {"cloud": ":/symbols/affinity/square/gray/cl
|
|||||||
"docker_guest": ":/symbols/affinity/square/gray/docker.svg"}
|
"docker_guest": ":/symbols/affinity/square/gray/docker.svg"}
|
||||||
|
|
||||||
AFFINITY_CIRCLE_BLUE_SYMBOL_THEME = {"cloud": ":/symbols/affinity/circle/blue/cloud.svg",
|
AFFINITY_CIRCLE_BLUE_SYMBOL_THEME = {"cloud": ":/symbols/affinity/circle/blue/cloud.svg",
|
||||||
|
"nat": ":/symbols/affinity/circle/blue/nat.svg",
|
||||||
"ethernet_switch": ":/symbols/affinity/circle/blue/switch.svg",
|
"ethernet_switch": ":/symbols/affinity/circle/blue/switch.svg",
|
||||||
"ethernet_hub": ":/symbols/affinity/circle/blue/hub.svg",
|
"ethernet_hub": ":/symbols/affinity/circle/blue/hub.svg",
|
||||||
"frame_relay_switch": ":/symbols/affinity/circle/blue/isdn.svg",
|
"frame_relay_switch": ":/symbols/affinity/circle/blue/isdn.svg",
|
||||||
@ -92,6 +97,7 @@ AFFINITY_CIRCLE_BLUE_SYMBOL_THEME = {"cloud": ":/symbols/affinity/circle/blue/cl
|
|||||||
"docker_guest": ":/symbols/affinity/circle/blue/docker.svg"}
|
"docker_guest": ":/symbols/affinity/circle/blue/docker.svg"}
|
||||||
|
|
||||||
AFFINITY_CIRCLE_RED_SYMBOL_THEME = {"cloud": ":/symbols/affinity/circle/red/cloud.svg",
|
AFFINITY_CIRCLE_RED_SYMBOL_THEME = {"cloud": ":/symbols/affinity/circle/red/cloud.svg",
|
||||||
|
"nat": ":/symbols/affinity/circle/red/nat.svg",
|
||||||
"ethernet_switch": ":/symbols/affinity/circle/red/switch.svg",
|
"ethernet_switch": ":/symbols/affinity/circle/red/switch.svg",
|
||||||
"ethernet_hub": ":/symbols/affinity/circle/red/hub.svg",
|
"ethernet_hub": ":/symbols/affinity/circle/red/hub.svg",
|
||||||
"frame_relay_switch": ":/symbols/affinity/circle/red/isdn.svg",
|
"frame_relay_switch": ":/symbols/affinity/circle/red/isdn.svg",
|
||||||
@ -107,6 +113,7 @@ AFFINITY_CIRCLE_RED_SYMBOL_THEME = {"cloud": ":/symbols/affinity/circle/red/clou
|
|||||||
"docker_guest": ":/symbols/affinity/circle/red/docker.svg"}
|
"docker_guest": ":/symbols/affinity/circle/red/docker.svg"}
|
||||||
|
|
||||||
AFFINITY_CIRCLE_GRAY_SYMBOL_THEME = {"cloud": ":/symbols/affinity/circle/gray/cloud.svg",
|
AFFINITY_CIRCLE_GRAY_SYMBOL_THEME = {"cloud": ":/symbols/affinity/circle/gray/cloud.svg",
|
||||||
|
"nat": ":/symbols/affinity/circle/gray/nat.svg",
|
||||||
"ethernet_switch": ":/symbols/affinity/circle/gray/switch.svg",
|
"ethernet_switch": ":/symbols/affinity/circle/gray/switch.svg",
|
||||||
"ethernet_hub": ":/symbols/affinity/circle/gray/hub.svg",
|
"ethernet_hub": ":/symbols/affinity/circle/gray/hub.svg",
|
||||||
"frame_relay_switch": ":/symbols/affinity/circle/gray/isdn.svg",
|
"frame_relay_switch": ":/symbols/affinity/circle/gray/isdn.svg",
|
||||||
|
@ -63,7 +63,7 @@ class TemplateManager:
|
|||||||
builtins = []
|
builtins = []
|
||||||
if Config.instance().get_section_config("Server").getboolean("enable_builtin_templates", True):
|
if Config.instance().get_section_config("Server").getboolean("enable_builtin_templates", True):
|
||||||
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "cloud"), {"template_type": "cloud", "name": "Cloud", "default_name_format": "Cloud{0}", "category": 2, "symbol": ":/symbols/cloud.svg"}, builtin=True))
|
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "cloud"), {"template_type": "cloud", "name": "Cloud", "default_name_format": "Cloud{0}", "category": 2, "symbol": ":/symbols/cloud.svg"}, builtin=True))
|
||||||
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "nat"), {"template_type": "nat", "name": "NAT", "default_name_format": "NAT{0}", "category": 2, "symbol": ":/symbols/cloud.svg"}, builtin=True))
|
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "nat"), {"template_type": "nat", "name": "NAT", "default_name_format": "NAT{0}", "category": 2, "symbol": ":/symbols/nat.svg"}, builtin=True))
|
||||||
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "vpcs"), {"template_type": "vpcs", "name": "VPCS", "default_name_format": "PC{0}", "category": 2, "symbol": ":/symbols/vpcs_guest.svg", "properties": {"base_script_file": "vpcs_base_config.txt"}}, builtin=True))
|
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "vpcs"), {"template_type": "vpcs", "name": "VPCS", "default_name_format": "PC{0}", "category": 2, "symbol": ":/symbols/vpcs_guest.svg", "properties": {"base_script_file": "vpcs_base_config.txt"}}, builtin=True))
|
||||||
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "ethernet_switch"), {"template_type": "ethernet_switch", "console_type": "none", "name": "Ethernet switch", "default_name_format": "Switch{0}", "category": 1, "symbol": ":/symbols/ethernet_switch.svg"}, builtin=True))
|
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "ethernet_switch"), {"template_type": "ethernet_switch", "console_type": "none", "name": "Ethernet switch", "default_name_format": "Switch{0}", "category": 1, "symbol": ":/symbols/ethernet_switch.svg"}, builtin=True))
|
||||||
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "ethernet_hub"), {"template_type": "ethernet_hub", "name": "Ethernet hub", "default_name_format": "Hub{0}", "category": 1, "symbol": ":/symbols/hub.svg"}, builtin=True))
|
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "ethernet_hub"), {"template_type": "ethernet_hub", "name": "Ethernet hub", "default_name_format": "Hub{0}", "category": 1, "symbol": ":/symbols/hub.svg"}, builtin=True))
|
||||||
|
@ -189,7 +189,7 @@ class UDPLink(Link):
|
|||||||
:returns: Node where the capture should run
|
:returns: Node where the capture should run
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ALWAYS_RUNNING_NODES_TYPE = ("cloud", "nat", "ethernet_switch", "ethernet_hub")
|
ALWAYS_RUNNING_NODES_TYPE = ("cloud", "nat", "ethernet_switch", "ethernet_hub", "frame_relay_switch", "atm_switch")
|
||||||
|
|
||||||
for node in self._nodes:
|
for node in self._nodes:
|
||||||
if node["node"].compute.id == "local" and node["node"].node_type in ALWAYS_RUNNING_NODES_TYPE and node["node"].status == "started":
|
if node["node"].compute.id == "local" and node["node"].node_type in ALWAYS_RUNNING_NODES_TYPE and node["node"].status == "started":
|
||||||
|
@ -57,7 +57,7 @@ class CrashReport:
|
|||||||
Report crash to a third party service
|
Report crash to a third party service
|
||||||
"""
|
"""
|
||||||
|
|
||||||
DSN = "https://535981c5fae1a87b7e8d993590c07c27@o19455.ingest.sentry.io/38482"
|
DSN = "https://ec32b24c329df619c8b9b1c58cfedcdb@o19455.ingest.us.sentry.io/38482"
|
||||||
_instance = None
|
_instance = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -268,7 +268,7 @@ class ATMSwitchHandler:
|
|||||||
response.json({"pcap_file_path": pcap_file_path})
|
response.json({"pcap_file_path": pcap_file_path})
|
||||||
|
|
||||||
@Route.post(
|
@Route.post(
|
||||||
r"/projects/{project_id}/atm_relay_switch/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/stop_capture",
|
r"/projects/{project_id}/atm_switch/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/stop_capture",
|
||||||
parameters={
|
parameters={
|
||||||
"project_id": "Project UUID",
|
"project_id": "Project UUID",
|
||||||
"node_id": "Node UUID",
|
"node_id": "Node UUID",
|
||||||
@ -290,7 +290,7 @@ class ATMSwitchHandler:
|
|||||||
response.set_status(204)
|
response.set_status(204)
|
||||||
|
|
||||||
@Route.get(
|
@Route.get(
|
||||||
r"/projects/{project_id}/atm_relay_switch/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/pcap",
|
r"/projects/{project_id}/atm_switch/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/pcap",
|
||||||
description="Stream the pcap capture file",
|
description="Stream the pcap capture file",
|
||||||
parameters={
|
parameters={
|
||||||
"project_id": "Project UUID",
|
"project_id": "Project UUID",
|
||||||
|
@ -235,9 +235,9 @@ def run():
|
|||||||
return
|
return
|
||||||
log.info("HTTP authentication is enabled with username '{}'".format(user))
|
log.info("HTTP authentication is enabled with username '{}'".format(user))
|
||||||
|
|
||||||
# we only support Python 3 version >= 3.7
|
# we only support Python 3 version >= 3.8
|
||||||
if sys.version_info < (3, 7, 0):
|
if sys.version_info < (3, 8, 0):
|
||||||
raise SystemExit("Python 3.7 or higher is required")
|
raise SystemExit("Python 3.8 or higher is required")
|
||||||
|
|
||||||
user_log.info("Running with Python {major}.{minor}.{micro} and has PID {pid}".format(major=sys.version_info[0], minor=sys.version_info[1],
|
user_log.info("Running with Python {major}.{minor}.{micro} and has PID {pid}".format(major=sys.version_info[0], minor=sys.version_info[1],
|
||||||
micro=sys.version_info[2], pid=os.getpid()))
|
micro=sys.version_info[2], pid=os.getpid()))
|
||||||
|
@ -46,6 +46,6 @@
|
|||||||
|
|
||||||
gtag('config', 'G-5D6FZL9923');
|
gtag('config', 'G-5D6FZL9923');
|
||||||
</script>
|
</script>
|
||||||
<script src="runtime.ecefb4ce510d1c218e7d.js" defer></script><script src="polyfills-es5.865074f5cd9a121111a2.js" nomodule defer></script><script src="polyfills.2f91a039d848e57ff02e.js" defer></script><script src="main.93bb4a803caf93e6752d.js" defer></script>
|
<script src="runtime.415291667f70565cd8ef.js" defer></script><script src="polyfills-es5.865074f5cd9a121111a2.js" nomodule defer></script><script src="polyfills.2f91a039d848e57ff02e.js" defer></script><script src="main.0e7dc9152b2aa567227c.js" defer></script>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
1
gns3server/static/web-ui/main.0e7dc9152b2aa567227c.js
Normal file
@ -1 +1 @@
|
|||||||
!function(){"use strict";var e,v={},g={};function n(e){var a=g[e];if(void 0!==a)return a.exports;var t=g[e]={id:e,loaded:!1,exports:{}};return v[e].call(t.exports,t,t.exports,n),t.loaded=!0,t.exports}n.m=v,e=[],n.O=function(a,t,u,o){if(!t){var r=1/0;for(i=0;i<e.length;i++){t=e[i][0],u=e[i][1],o=e[i][2];for(var l=!0,f=0;f<t.length;f++)(!1&o||r>=o)&&Object.keys(n.O).every(function(b){return n.O[b](t[f])})?t.splice(f--,1):(l=!1,o<r&&(r=o));if(l){e.splice(i--,1);var s=u();void 0!==s&&(a=s)}}return a}o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,u,o]},n.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(a,{a:a}),a},n.d=function(e,a){for(var t in a)n.o(a,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce(function(a,t){return n.f[t](e,a),a},[]))},n.u=function(e){return e+".49028ab13de5de406c90.js"},n.miniCssF=function(e){return"styles.f8555f2eecf8cf87f666.css"},n.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},n.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},function(){var e={},a="gns3-web-ui:";n.l=function(t,u,o,i){if(e[t])e[t].push(u);else{var r,l;if(void 0!==o)for(var f=document.getElementsByTagName("script"),s=0;s<f.length;s++){var c=f[s];if(c.getAttribute("src")==t||c.getAttribute("data-webpack")==a+o){r=c;break}}r||(l=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,n.nc&&r.setAttribute("nonce",n.nc),r.setAttribute("data-webpack",a+o),r.src=n.tu(t)),e[t]=[u];var d=function(h,b){r.onerror=r.onload=null,clearTimeout(p);var _=e[t];if(delete e[t],r.parentNode&&r.parentNode.removeChild(r),_&&_.forEach(function(m){return m(b)}),h)return h(b)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=d.bind(null,r.onerror),r.onload=d.bind(null,r.onload),l&&document.head.appendChild(r)}}}(),n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},function(){var e;n.tu=function(a){return void 0===e&&(e={createScriptURL:function(t){return t}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e.createScriptURL(a)}}(),n.p="",function(){var e={666:0};n.f.j=function(u,o){var i=n.o(e,u)?e[u]:void 0;if(0!==i)if(i)o.push(i[2]);else if(666!=u){var r=new Promise(function(c,d){i=e[u]=[c,d]});o.push(i[2]=r);var l=n.p+n.u(u),f=new Error;n.l(l,function(c){if(n.o(e,u)&&(0!==(i=e[u])&&(e[u]=void 0),i)){var d=c&&("load"===c.type?"missing":c.type),p=c&&c.target&&c.target.src;f.message="Loading chunk "+u+" failed.\n("+d+": "+p+")",f.name="ChunkLoadError",f.type=d,f.request=p,i[1](f)}},"chunk-"+u,u)}else e[u]=0},n.O.j=function(u){return 0===e[u]};var a=function(u,o){var f,s,i=o[0],r=o[1],l=o[2],c=0;for(f in r)n.o(r,f)&&(n.m[f]=r[f]);if(l)var d=l(n);for(u&&u(o);c<i.length;c++)n.o(e,s=i[c])&&e[s]&&e[s][0](),e[i[c]]=0;return n.O(d)},t=self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[];t.forEach(a.bind(null,0)),t.push=a.bind(null,t.push.bind(t))}()}();
|
!function(){"use strict";var e,v={},g={};function n(e){var a=g[e];if(void 0!==a)return a.exports;var t=g[e]={id:e,loaded:!1,exports:{}};return v[e].call(t.exports,t,t.exports,n),t.loaded=!0,t.exports}n.m=v,e=[],n.O=function(a,t,u,o){if(!t){var r=1/0;for(i=0;i<e.length;i++){t=e[i][0],u=e[i][1],o=e[i][2];for(var l=!0,f=0;f<t.length;f++)(!1&o||r>=o)&&Object.keys(n.O).every(function(b){return n.O[b](t[f])})?t.splice(f--,1):(l=!1,o<r&&(r=o));if(l){e.splice(i--,1);var s=u();void 0!==s&&(a=s)}}return a}o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,u,o]},n.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(a,{a:a}),a},n.d=function(e,a){for(var t in a)n.o(a,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce(function(a,t){return n.f[t](e,a),a},[]))},n.u=function(e){return e+".77d4bfd104f37c42e028.js"},n.miniCssF=function(e){return"styles.f8555f2eecf8cf87f666.css"},n.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},n.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},function(){var e={},a="gns3-web-ui:";n.l=function(t,u,o,i){if(e[t])e[t].push(u);else{var r,l;if(void 0!==o)for(var f=document.getElementsByTagName("script"),s=0;s<f.length;s++){var c=f[s];if(c.getAttribute("src")==t||c.getAttribute("data-webpack")==a+o){r=c;break}}r||(l=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,n.nc&&r.setAttribute("nonce",n.nc),r.setAttribute("data-webpack",a+o),r.src=n.tu(t)),e[t]=[u];var d=function(h,b){r.onerror=r.onload=null,clearTimeout(p);var _=e[t];if(delete e[t],r.parentNode&&r.parentNode.removeChild(r),_&&_.forEach(function(m){return m(b)}),h)return h(b)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=d.bind(null,r.onerror),r.onload=d.bind(null,r.onload),l&&document.head.appendChild(r)}}}(),n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},function(){var e;n.tu=function(a){return void 0===e&&(e={createScriptURL:function(t){return t}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e.createScriptURL(a)}}(),n.p="",function(){var e={666:0};n.f.j=function(u,o){var i=n.o(e,u)?e[u]:void 0;if(0!==i)if(i)o.push(i[2]);else if(666!=u){var r=new Promise(function(c,d){i=e[u]=[c,d]});o.push(i[2]=r);var l=n.p+n.u(u),f=new Error;n.l(l,function(c){if(n.o(e,u)&&(0!==(i=e[u])&&(e[u]=void 0),i)){var d=c&&("load"===c.type?"missing":c.type),p=c&&c.target&&c.target.src;f.message="Loading chunk "+u+" failed.\n("+d+": "+p+")",f.name="ChunkLoadError",f.type=d,f.request=p,i[1](f)}},"chunk-"+u,u)}else e[u]=0},n.O.j=function(u){return 0===e[u]};var a=function(u,o){var f,s,i=o[0],r=o[1],l=o[2],c=0;for(f in r)n.o(r,f)&&(n.m[f]=r[f]);if(l)var d=l(n);for(u&&u(o);c<i.length;c++)n.o(e,s=i[c])&&e[s]&&e[s][0](),e[i[c]]=0;return n.O(d)},t=self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[];t.forEach(a.bind(null,0)),t.push=a.bind(null,t.push.bind(t))}()}();
|
60
gns3server/symbols/affinity/circle/blue/nat.svg
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 300 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="nat.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs12" /><sodipodi:namedview
|
||||||
|
id="namedview10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.983333"
|
||||||
|
inkscape:cx="29.958275"
|
||||||
|
inkscape:cy="30"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<circle
|
||||||
|
cx="150"
|
||||||
|
cy="150"
|
||||||
|
r="150"
|
||||||
|
style="fill:#fffefe"
|
||||||
|
id="circle2" />
|
||||||
|
<path
|
||||||
|
d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z"
|
||||||
|
style="fill:#2d67b9"
|
||||||
|
id="path4" />
|
||||||
|
|
||||||
|
<path
|
||||||
|
d="M 125.73252,227.39216 C 162.6821,181.25328 159.68479,109.80627 119.01184,67.8525 l -0.0404,-0.0415 a 8.4262645,9.5474485 0 0 1 -0.51796,-13.437497 c 3.1284,-3.89368 8.4597,-4.177124 11.89613,-0.632472 47.587,49.085569 51.05025,132.713399 7.72895,186.632269 -3.1284,3.89367 -8.45969,4.17712 -11.89613,0.63246 a 8.4262645,9.5474485 0 0 1 -0.5582,-13.47898 z"
|
||||||
|
style="clip-rule:evenodd;fill:#2d67b9;fill-rule:evenodd;stroke-width:1.37905;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
id="path8" /><path
|
||||||
|
d="M 55.837588,106.71509 H 105.55874 L 95.373313,97.858202 H 111.1846 l 15.82341,13.759468 -15.82341,13.75882 H 95.389703 l 10.317287,-8.97155 H 55.837588 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#2d67b9;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421"
|
||||||
|
id="path8-3" /><path
|
||||||
|
d="M 55.837592,146.71508 H 105.55874 L 95.373313,137.85819 H 111.1846 l 15.82341,13.75947 -15.82341,13.75883 H 95.389703 l 10.317287,-8.97155 H 55.837592 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#2d67b9;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421"
|
||||||
|
id="path8-3-5" /><path
|
||||||
|
d="m 185.83759,146.71508 h 49.72115 l -10.18542,-8.85689 h 15.81128 l 15.82341,13.75947 -15.82341,13.75883 h -15.79489 l 10.31728,-8.97155 h -49.8694 z"
|
||||||
|
style="clip-rule:evenodd;fill:#2d67b9;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421"
|
||||||
|
id="path8-3-5-2" /><path
|
||||||
|
d="M 55.837592,186.71508 H 105.55874 L 95.373313,177.85819 H 111.1846 l 15.82341,13.75947 -15.82341,13.75883 H 95.389703 l 10.317287,-8.97155 H 55.837592 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#2d67b9;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421"
|
||||||
|
id="path8-3-5-6" /></svg>
|
After Width: | Height: | Size: 3.1 KiB |
55
gns3server/symbols/affinity/circle/blue/nat2.svg
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 300 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="nat2.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs12" /><sodipodi:namedview
|
||||||
|
id="namedview10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.983333"
|
||||||
|
inkscape:cx="29.958275"
|
||||||
|
inkscape:cy="30"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<circle
|
||||||
|
cx="150"
|
||||||
|
cy="150"
|
||||||
|
r="150"
|
||||||
|
style="fill:#fffefe"
|
||||||
|
id="circle2" />
|
||||||
|
<path
|
||||||
|
d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z"
|
||||||
|
style="fill:#2d67b9"
|
||||||
|
id="path4" />
|
||||||
|
<path
|
||||||
|
d="M93.524 228.429c-.175.003-.349.004-.524.004-21.764 0-39.433-17.669-39.433-39.433 0-19.528 14.227-35.76 32.872-38.888.478-34.678 28.775-62.679 63.561-62.679s63.083 28.001 63.561 62.679c18.645 3.128 32.872 19.36 32.872 38.888 0 21.764-17.669 39.433-39.433 39.433-.273 0-.545-.003-.815-.009v.005H93.524ZM93 215h114c14.037 0 25.433-11.396 25.433-25.433 0-12.32-8.779-22.606-20.417-24.937l-.223-.044-.086-.015-.225-.042-.087-.015-.225-.039-.091-.014-.223-.035-.095-.014-.22-.032-.102-.014-.214-.028-.11-.014-.207-.025-.12-.013-.198-.021-.13-.012-.19-.018-.14-.012-.181-.015-.151-.01-.171-.012-.162-.009-.161-.01-.174-.007-.15-.007-.19-.006-.136-.004-.215-.004-.111-.002-.328-.003-.318.002-.106.002-.212.004-.126.004-.19.006-.134.006-.182.008-.138.007-.176.01-.141.009-.173.013-.142.011-.17.014-.143.012-.169.016-.143.015-.168.018-.143.016-.166.02-.143.018-.166.022-.142.02-.167.024-.14.021-.168.027-.137.022-.178.031-.126.021-.295.055-.144.029-.157.031-.153.032-.146.031-.156.034-.141.032-.159.037-.138.033-.159.039-.135.034-.16.042-.134.035-.16.043-.131.037-.161.045-.13.038-.161.048-.127.039-.162.05-.125.039-.163.053-.122.04-.163.055-.119.041-.166.058-.113.04-.169.062-.087.032-.188.07-.147.057-.075.03A49.912 49.912 0 0 0 200 151c0-27.596-22.404-50-50-50s-50 22.404-50 50c0 5.18.789 10.177 2.253 14.874l-.075-.03-.147-.057-.188-.07-.087-.032-.169-.062-.113-.04-.166-.058-.119-.041-.163-.055-.122-.04-.163-.053-.125-.039-.162-.05-.127-.039-.161-.048-.13-.038-.161-.045-.131-.037-.16-.043-.134-.035-.16-.042-.135-.034-.159-.039-.138-.033-.159-.037-.141-.032-.156-.034-.146-.031-.153-.032-.157-.031-.144-.029-.295-.055-.126-.021-.178-.031-.137-.022-.168-.027-.14-.021-.167-.024-.142-.02-.166-.022-.143-.018-.166-.02-.143-.016-.168-.018-.143-.015-.169-.016-.143-.012-.17-.014-.142-.011-.173-.013-.141-.009-.176-.01-.138-.007-.182-.008-.134-.006-.19-.006-.126-.004-.212-.004-.106-.002-.318-.002-.328.003-.111.002-.215.004-.136.004-.19.006-.15.007-.174.007-.161.01-.162.009-.171.012-.151.01-.181.015-.14.012-.19.018-.13.012-.198.021-.12.013-.207.025-.11.014-.214.028-.102.014-.22.032-.095.014-.223.035-.091.014-.225.039-.087.015-.225.042-.086.015-.223.044c-11.638 2.331-20.417 12.617-20.417 24.937C67.567 203.604 78.963 215 93 215Z"
|
||||||
|
style="fill:#2d67b9"
|
||||||
|
transform="matrix(1.0372 0 0 .99188 -5.58 -13.784)"
|
||||||
|
id="path6" />
|
||||||
|
<path
|
||||||
|
d="m 114.18486,133.39431 h 50.31577 L 154.19339,122.4189 h 16.00038 l 16.01264,17.05067 -16.01264,17.04991 h -15.98379 l 10.44067,-11.1175 h -50.46579 z"
|
||||||
|
style="clip-rule:evenodd;fill:#2d67b9;fill-rule:evenodd;stroke-width:0.744302;stroke-linejoin:round;stroke-miterlimit:1.41421"
|
||||||
|
id="path8-7" /><path
|
||||||
|
d="m 186.32326,162.03715 h -50.31577 l 10.30725,-10.97542 h -16.00039 l -16.01264,17.05067 16.01264,17.04991 h 15.98379 l -10.44067,-11.1175 h 50.46579 z"
|
||||||
|
style="clip-rule:evenodd;fill:#2d67b9;fill-rule:evenodd;stroke-width:0.744302;stroke-linejoin:round;stroke-miterlimit:1.41421"
|
||||||
|
id="path10-5" /></svg>
|
After Width: | Height: | Size: 4.3 KiB |
60
gns3server/symbols/affinity/circle/gray/nat.svg
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 300 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="nat.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs12" /><sodipodi:namedview
|
||||||
|
id="namedview10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.983333"
|
||||||
|
inkscape:cx="29.958276"
|
||||||
|
inkscape:cy="30.000001"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<circle
|
||||||
|
cx="150"
|
||||||
|
cy="150"
|
||||||
|
r="150"
|
||||||
|
style="fill:#fffefe"
|
||||||
|
id="circle2" />
|
||||||
|
<path
|
||||||
|
d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z"
|
||||||
|
style="fill:#4d4d4d;fill-opacity:1"
|
||||||
|
id="path4" />
|
||||||
|
|
||||||
|
<path
|
||||||
|
d="M 125.73252,227.39216 C 162.6821,181.25328 159.68479,109.80627 119.01184,67.8525 l -0.0404,-0.0415 a 8.4262645,9.5474485 0 0 1 -0.51796,-13.437497 c 3.1284,-3.89368 8.4597,-4.177124 11.89613,-0.632472 47.587,49.085569 51.05025,132.713399 7.72895,186.632269 -3.1284,3.89367 -8.45969,4.17712 -11.89613,0.63246 a 8.4262645,9.5474485 0 0 1 -0.5582,-13.47898 z"
|
||||||
|
style="clip-rule:evenodd;fill:#4d4d4d;fill-rule:evenodd;stroke-width:1.37905;stroke-linejoin:round;stroke-miterlimit:2;fill-opacity:1"
|
||||||
|
id="path8" /><path
|
||||||
|
d="M 55.837588,106.71509 H 105.55874 L 95.373313,97.858202 H 111.1846 l 15.82341,13.759468 -15.82341,13.75882 H 95.389703 l 10.317287,-8.97155 H 55.837588 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#4d4d4d;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3" /><path
|
||||||
|
d="M 55.837592,146.71508 H 105.55874 L 95.373313,137.85819 H 111.1846 l 15.82341,13.75947 -15.82341,13.75883 H 95.389703 l 10.317287,-8.97155 H 55.837592 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#4d4d4d;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5" /><path
|
||||||
|
d="m 185.83759,146.71508 h 49.72115 l -10.18542,-8.85689 h 15.81128 l 15.82341,13.75947 -15.82341,13.75883 h -15.79489 l 10.31728,-8.97155 h -49.8694 z"
|
||||||
|
style="clip-rule:evenodd;fill:#4d4d4d;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5-2" /><path
|
||||||
|
d="M 55.837592,186.71508 H 105.55874 L 95.373313,177.85819 H 111.1846 l 15.82341,13.75947 -15.82341,13.75883 H 95.389703 l 10.317287,-8.97155 H 55.837592 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#4d4d4d;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5-6" /></svg>
|
After Width: | Height: | Size: 3.2 KiB |
55
gns3server/symbols/affinity/circle/gray/nat2.svg
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 300 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="nat2.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs12" /><sodipodi:namedview
|
||||||
|
id="namedview10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.983333"
|
||||||
|
inkscape:cx="29.958276"
|
||||||
|
inkscape:cy="30.000001"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<circle
|
||||||
|
cx="150"
|
||||||
|
cy="150"
|
||||||
|
r="150"
|
||||||
|
style="fill:#fffefe"
|
||||||
|
id="circle2" />
|
||||||
|
<path
|
||||||
|
d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z"
|
||||||
|
style="fill:#4d4d4d;fill-opacity:1"
|
||||||
|
id="path4" />
|
||||||
|
<path
|
||||||
|
d="M93.524 228.429c-.175.003-.349.004-.524.004-21.764 0-39.433-17.669-39.433-39.433 0-19.528 14.227-35.76 32.872-38.888.478-34.678 28.775-62.679 63.561-62.679s63.083 28.001 63.561 62.679c18.645 3.128 32.872 19.36 32.872 38.888 0 21.764-17.669 39.433-39.433 39.433-.273 0-.545-.003-.815-.009v.005H93.524ZM93 215h114c14.037 0 25.433-11.396 25.433-25.433 0-12.32-8.779-22.606-20.417-24.937l-.223-.044-.086-.015-.225-.042-.087-.015-.225-.039-.091-.014-.223-.035-.095-.014-.22-.032-.102-.014-.214-.028-.11-.014-.207-.025-.12-.013-.198-.021-.13-.012-.19-.018-.14-.012-.181-.015-.151-.01-.171-.012-.162-.009-.161-.01-.174-.007-.15-.007-.19-.006-.136-.004-.215-.004-.111-.002-.328-.003-.318.002-.106.002-.212.004-.126.004-.19.006-.134.006-.182.008-.138.007-.176.01-.141.009-.173.013-.142.011-.17.014-.143.012-.169.016-.143.015-.168.018-.143.016-.166.02-.143.018-.166.022-.142.02-.167.024-.14.021-.168.027-.137.022-.178.031-.126.021-.295.055-.144.029-.157.031-.153.032-.146.031-.156.034-.141.032-.159.037-.138.033-.159.039-.135.034-.16.042-.134.035-.16.043-.131.037-.161.045-.13.038-.161.048-.127.039-.162.05-.125.039-.163.053-.122.04-.163.055-.119.041-.166.058-.113.04-.169.062-.087.032-.188.07-.147.057-.075.03A49.912 49.912 0 0 0 200 151c0-27.596-22.404-50-50-50s-50 22.404-50 50c0 5.18.789 10.177 2.253 14.874l-.075-.03-.147-.057-.188-.07-.087-.032-.169-.062-.113-.04-.166-.058-.119-.041-.163-.055-.122-.04-.163-.053-.125-.039-.162-.05-.127-.039-.161-.048-.13-.038-.161-.045-.131-.037-.16-.043-.134-.035-.16-.042-.135-.034-.159-.039-.138-.033-.159-.037-.141-.032-.156-.034-.146-.031-.153-.032-.157-.031-.144-.029-.295-.055-.126-.021-.178-.031-.137-.022-.168-.027-.14-.021-.167-.024-.142-.02-.166-.022-.143-.018-.166-.02-.143-.016-.168-.018-.143-.015-.169-.016-.143-.012-.17-.014-.142-.011-.173-.013-.141-.009-.176-.01-.138-.007-.182-.008-.134-.006-.19-.006-.126-.004-.212-.004-.106-.002-.318-.002-.328.003-.111.002-.215.004-.136.004-.19.006-.15.007-.174.007-.161.01-.162.009-.171.012-.151.01-.181.015-.14.012-.19.018-.13.012-.198.021-.12.013-.207.025-.11.014-.214.028-.102.014-.22.032-.095.014-.223.035-.091.014-.225.039-.087.015-.225.042-.086.015-.223.044c-11.638 2.331-20.417 12.617-20.417 24.937C67.567 203.604 78.963 215 93 215Z"
|
||||||
|
style="fill:#4d4d4d;fill-opacity:1"
|
||||||
|
transform="matrix(1.0372 0 0 .99188 -5.58 -13.784)"
|
||||||
|
id="path6" />
|
||||||
|
<path
|
||||||
|
d="m 114.18486,133.39431 h 50.31577 L 154.19339,122.4189 h 16.00038 l 16.01264,17.05067 -16.01264,17.04991 h -15.98379 l 10.44067,-11.1175 h -50.46579 z"
|
||||||
|
style="clip-rule:evenodd;fill:#4d4d4d;fill-rule:evenodd;stroke-width:0.744302;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-7" /><path
|
||||||
|
d="m 186.32326,162.03715 h -50.31577 l 10.30725,-10.97542 h -16.00039 l -16.01264,17.05067 16.01264,17.04991 h 15.98379 l -10.44067,-11.1175 h 50.46579 z"
|
||||||
|
style="clip-rule:evenodd;fill:#4d4d4d;fill-rule:evenodd;stroke-width:0.744302;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path10-5" /></svg>
|
After Width: | Height: | Size: 4.3 KiB |
60
gns3server/symbols/affinity/circle/green/nat.svg
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 300 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="nat.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs12" /><sodipodi:namedview
|
||||||
|
id="namedview10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.983333"
|
||||||
|
inkscape:cx="29.958276"
|
||||||
|
inkscape:cy="30.000001"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<circle
|
||||||
|
cx="150"
|
||||||
|
cy="150"
|
||||||
|
r="150"
|
||||||
|
style="fill:#fffefe"
|
||||||
|
id="circle2" />
|
||||||
|
<path
|
||||||
|
d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z"
|
||||||
|
style="fill:#109e00;fill-opacity:1"
|
||||||
|
id="path4" />
|
||||||
|
|
||||||
|
<path
|
||||||
|
d="M 125.73252,227.39216 C 162.6821,181.25328 159.68479,109.80627 119.01184,67.8525 l -0.0404,-0.0415 a 8.4262645,9.5474485 0 0 1 -0.51796,-13.437497 c 3.1284,-3.89368 8.4597,-4.177124 11.89613,-0.632472 47.587,49.085569 51.05025,132.713399 7.72895,186.632269 -3.1284,3.89367 -8.45969,4.17712 -11.89613,0.63246 a 8.4262645,9.5474485 0 0 1 -0.5582,-13.47898 z"
|
||||||
|
style="clip-rule:evenodd;fill:#109e00;fill-rule:evenodd;stroke-width:1.37905;stroke-linejoin:round;stroke-miterlimit:2;fill-opacity:1"
|
||||||
|
id="path8" /><path
|
||||||
|
d="M 55.837588,106.71509 H 105.55874 L 95.373313,97.858202 H 111.1846 l 15.82341,13.759468 -15.82341,13.75882 H 95.389703 l 10.317287,-8.97155 H 55.837588 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#109e00;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3" /><path
|
||||||
|
d="M 55.837592,146.71508 H 105.55874 L 95.373313,137.85819 H 111.1846 l 15.82341,13.75947 -15.82341,13.75883 H 95.389703 l 10.317287,-8.97155 H 55.837592 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#109e00;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5" /><path
|
||||||
|
d="m 185.83759,146.71508 h 49.72115 l -10.18542,-8.85689 h 15.81128 l 15.82341,13.75947 -15.82341,13.75883 h -15.79489 l 10.31728,-8.97155 h -49.8694 z"
|
||||||
|
style="clip-rule:evenodd;fill:#109e00;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5-2" /><path
|
||||||
|
d="M 55.837592,186.71508 H 105.55874 L 95.373313,177.85819 H 111.1846 l 15.82341,13.75947 -15.82341,13.75883 H 95.389703 l 10.317287,-8.97155 H 55.837592 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#109e00;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5-6" /></svg>
|
After Width: | Height: | Size: 3.2 KiB |
55
gns3server/symbols/affinity/circle/green/nat2.svg
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 300 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="nat2.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs12" /><sodipodi:namedview
|
||||||
|
id="namedview10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.983333"
|
||||||
|
inkscape:cx="29.958276"
|
||||||
|
inkscape:cy="30.000001"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<circle
|
||||||
|
cx="150"
|
||||||
|
cy="150"
|
||||||
|
r="150"
|
||||||
|
style="fill:#fffefe"
|
||||||
|
id="circle2" />
|
||||||
|
<path
|
||||||
|
d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z"
|
||||||
|
style="fill:#109e00;fill-opacity:1"
|
||||||
|
id="path4" />
|
||||||
|
<path
|
||||||
|
d="M93.524 228.429c-.175.003-.349.004-.524.004-21.764 0-39.433-17.669-39.433-39.433 0-19.528 14.227-35.76 32.872-38.888.478-34.678 28.775-62.679 63.561-62.679s63.083 28.001 63.561 62.679c18.645 3.128 32.872 19.36 32.872 38.888 0 21.764-17.669 39.433-39.433 39.433-.273 0-.545-.003-.815-.009v.005H93.524ZM93 215h114c14.037 0 25.433-11.396 25.433-25.433 0-12.32-8.779-22.606-20.417-24.937l-.223-.044-.086-.015-.225-.042-.087-.015-.225-.039-.091-.014-.223-.035-.095-.014-.22-.032-.102-.014-.214-.028-.11-.014-.207-.025-.12-.013-.198-.021-.13-.012-.19-.018-.14-.012-.181-.015-.151-.01-.171-.012-.162-.009-.161-.01-.174-.007-.15-.007-.19-.006-.136-.004-.215-.004-.111-.002-.328-.003-.318.002-.106.002-.212.004-.126.004-.19.006-.134.006-.182.008-.138.007-.176.01-.141.009-.173.013-.142.011-.17.014-.143.012-.169.016-.143.015-.168.018-.143.016-.166.02-.143.018-.166.022-.142.02-.167.024-.14.021-.168.027-.137.022-.178.031-.126.021-.295.055-.144.029-.157.031-.153.032-.146.031-.156.034-.141.032-.159.037-.138.033-.159.039-.135.034-.16.042-.134.035-.16.043-.131.037-.161.045-.13.038-.161.048-.127.039-.162.05-.125.039-.163.053-.122.04-.163.055-.119.041-.166.058-.113.04-.169.062-.087.032-.188.07-.147.057-.075.03A49.912 49.912 0 0 0 200 151c0-27.596-22.404-50-50-50s-50 22.404-50 50c0 5.18.789 10.177 2.253 14.874l-.075-.03-.147-.057-.188-.07-.087-.032-.169-.062-.113-.04-.166-.058-.119-.041-.163-.055-.122-.04-.163-.053-.125-.039-.162-.05-.127-.039-.161-.048-.13-.038-.161-.045-.131-.037-.16-.043-.134-.035-.16-.042-.135-.034-.159-.039-.138-.033-.159-.037-.141-.032-.156-.034-.146-.031-.153-.032-.157-.031-.144-.029-.295-.055-.126-.021-.178-.031-.137-.022-.168-.027-.14-.021-.167-.024-.142-.02-.166-.022-.143-.018-.166-.02-.143-.016-.168-.018-.143-.015-.169-.016-.143-.012-.17-.014-.142-.011-.173-.013-.141-.009-.176-.01-.138-.007-.182-.008-.134-.006-.19-.006-.126-.004-.212-.004-.106-.002-.318-.002-.328.003-.111.002-.215.004-.136.004-.19.006-.15.007-.174.007-.161.01-.162.009-.171.012-.151.01-.181.015-.14.012-.19.018-.13.012-.198.021-.12.013-.207.025-.11.014-.214.028-.102.014-.22.032-.095.014-.223.035-.091.014-.225.039-.087.015-.225.042-.086.015-.223.044c-11.638 2.331-20.417 12.617-20.417 24.937C67.567 203.604 78.963 215 93 215Z"
|
||||||
|
style="fill:#109e00;fill-opacity:1"
|
||||||
|
transform="matrix(1.0372 0 0 .99188 -5.58 -13.784)"
|
||||||
|
id="path6" />
|
||||||
|
<path
|
||||||
|
d="m 114.18486,133.39431 h 50.31577 L 154.19339,122.4189 h 16.00038 l 16.01264,17.05067 -16.01264,17.04991 h -15.98379 l 10.44067,-11.1175 h -50.46579 z"
|
||||||
|
style="clip-rule:evenodd;fill:#109e00;fill-rule:evenodd;stroke-width:0.744302;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-7" /><path
|
||||||
|
d="m 186.32326,162.03715 h -50.31577 l 10.30725,-10.97542 h -16.00039 l -16.01264,17.05067 16.01264,17.04991 h 15.98379 l -10.44067,-11.1175 h 50.46579 z"
|
||||||
|
style="clip-rule:evenodd;fill:#109e00;fill-rule:evenodd;stroke-width:0.744302;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path10-5" /></svg>
|
After Width: | Height: | Size: 4.3 KiB |
60
gns3server/symbols/affinity/circle/red/nat.svg
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 300 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="nat.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs12" /><sodipodi:namedview
|
||||||
|
id="namedview10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.983333"
|
||||||
|
inkscape:cx="29.958276"
|
||||||
|
inkscape:cy="30.000001"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<circle
|
||||||
|
cx="150"
|
||||||
|
cy="150"
|
||||||
|
r="150"
|
||||||
|
style="fill:#fffefe"
|
||||||
|
id="circle2" />
|
||||||
|
<path
|
||||||
|
d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z"
|
||||||
|
style="fill:#e3292e;fill-opacity:1"
|
||||||
|
id="path4" />
|
||||||
|
|
||||||
|
<path
|
||||||
|
d="M 125.73252,227.39216 C 162.6821,181.25328 159.68479,109.80627 119.01184,67.8525 l -0.0404,-0.0415 a 8.4262645,9.5474485 0 0 1 -0.51796,-13.437497 c 3.1284,-3.89368 8.4597,-4.177124 11.89613,-0.632472 47.587,49.085569 51.05025,132.713399 7.72895,186.632269 -3.1284,3.89367 -8.45969,4.17712 -11.89613,0.63246 a 8.4262645,9.5474485 0 0 1 -0.5582,-13.47898 z"
|
||||||
|
style="clip-rule:evenodd;fill:#e3292e;fill-rule:evenodd;stroke-width:1.37905;stroke-linejoin:round;stroke-miterlimit:2;fill-opacity:1"
|
||||||
|
id="path8" /><path
|
||||||
|
d="M 55.837588,106.71509 H 105.55874 L 95.373313,97.858202 H 111.1846 l 15.82341,13.759468 -15.82341,13.75882 H 95.389703 l 10.317287,-8.97155 H 55.837588 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#e3292e;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3" /><path
|
||||||
|
d="M 55.837592,146.71508 H 105.55874 L 95.373313,137.85819 H 111.1846 l 15.82341,13.75947 -15.82341,13.75883 H 95.389703 l 10.317287,-8.97155 H 55.837592 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#e3292e;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5" /><path
|
||||||
|
d="m 185.83759,146.71508 h 49.72115 l -10.18542,-8.85689 h 15.81128 l 15.82341,13.75947 -15.82341,13.75883 h -15.79489 l 10.31728,-8.97155 h -49.8694 z"
|
||||||
|
style="clip-rule:evenodd;fill:#e3292e;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5-2" /><path
|
||||||
|
d="M 55.837592,186.71508 H 105.55874 L 95.373313,177.85819 H 111.1846 l 15.82341,13.75947 -15.82341,13.75883 H 95.389703 l 10.317287,-8.97155 H 55.837592 Z"
|
||||||
|
style="clip-rule:evenodd;fill:#e3292e;fill-rule:evenodd;stroke-width:0.664657;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-3-5-6" /></svg>
|
After Width: | Height: | Size: 3.2 KiB |
55
gns3server/symbols/affinity/circle/red/nat2.svg
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 300 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="nat2.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs12" /><sodipodi:namedview
|
||||||
|
id="namedview10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.983333"
|
||||||
|
inkscape:cx="29.958276"
|
||||||
|
inkscape:cy="30.000001"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<circle
|
||||||
|
cx="150"
|
||||||
|
cy="150"
|
||||||
|
r="150"
|
||||||
|
style="fill:#fffefe"
|
||||||
|
id="circle2" />
|
||||||
|
<path
|
||||||
|
d="M150 0c82.787 0 150 67.213 150 150s-67.213 150-150 150S0 232.787 0 150 67.213 0 150 0Zm0 16c73.957 0 134 60.043 134 134s-60.043 134-134 134S16 223.957 16 150 76.043 16 150 16Z"
|
||||||
|
style="fill:#e3292e;fill-opacity:1"
|
||||||
|
id="path4" />
|
||||||
|
<path
|
||||||
|
d="M93.524 228.429c-.175.003-.349.004-.524.004-21.764 0-39.433-17.669-39.433-39.433 0-19.528 14.227-35.76 32.872-38.888.478-34.678 28.775-62.679 63.561-62.679s63.083 28.001 63.561 62.679c18.645 3.128 32.872 19.36 32.872 38.888 0 21.764-17.669 39.433-39.433 39.433-.273 0-.545-.003-.815-.009v.005H93.524ZM93 215h114c14.037 0 25.433-11.396 25.433-25.433 0-12.32-8.779-22.606-20.417-24.937l-.223-.044-.086-.015-.225-.042-.087-.015-.225-.039-.091-.014-.223-.035-.095-.014-.22-.032-.102-.014-.214-.028-.11-.014-.207-.025-.12-.013-.198-.021-.13-.012-.19-.018-.14-.012-.181-.015-.151-.01-.171-.012-.162-.009-.161-.01-.174-.007-.15-.007-.19-.006-.136-.004-.215-.004-.111-.002-.328-.003-.318.002-.106.002-.212.004-.126.004-.19.006-.134.006-.182.008-.138.007-.176.01-.141.009-.173.013-.142.011-.17.014-.143.012-.169.016-.143.015-.168.018-.143.016-.166.02-.143.018-.166.022-.142.02-.167.024-.14.021-.168.027-.137.022-.178.031-.126.021-.295.055-.144.029-.157.031-.153.032-.146.031-.156.034-.141.032-.159.037-.138.033-.159.039-.135.034-.16.042-.134.035-.16.043-.131.037-.161.045-.13.038-.161.048-.127.039-.162.05-.125.039-.163.053-.122.04-.163.055-.119.041-.166.058-.113.04-.169.062-.087.032-.188.07-.147.057-.075.03A49.912 49.912 0 0 0 200 151c0-27.596-22.404-50-50-50s-50 22.404-50 50c0 5.18.789 10.177 2.253 14.874l-.075-.03-.147-.057-.188-.07-.087-.032-.169-.062-.113-.04-.166-.058-.119-.041-.163-.055-.122-.04-.163-.053-.125-.039-.162-.05-.127-.039-.161-.048-.13-.038-.161-.045-.131-.037-.16-.043-.134-.035-.16-.042-.135-.034-.159-.039-.138-.033-.159-.037-.141-.032-.156-.034-.146-.031-.153-.032-.157-.031-.144-.029-.295-.055-.126-.021-.178-.031-.137-.022-.168-.027-.14-.021-.167-.024-.142-.02-.166-.022-.143-.018-.166-.02-.143-.016-.168-.018-.143-.015-.169-.016-.143-.012-.17-.014-.142-.011-.173-.013-.141-.009-.176-.01-.138-.007-.182-.008-.134-.006-.19-.006-.126-.004-.212-.004-.106-.002-.318-.002-.328.003-.111.002-.215.004-.136.004-.19.006-.15.007-.174.007-.161.01-.162.009-.171.012-.151.01-.181.015-.14.012-.19.018-.13.012-.198.021-.12.013-.207.025-.11.014-.214.028-.102.014-.22.032-.095.014-.223.035-.091.014-.225.039-.087.015-.225.042-.086.015-.223.044c-11.638 2.331-20.417 12.617-20.417 24.937C67.567 203.604 78.963 215 93 215Z"
|
||||||
|
style="fill:#e3292e;fill-opacity:1"
|
||||||
|
transform="matrix(1.0372 0 0 .99188 -5.58 -13.784)"
|
||||||
|
id="path6" />
|
||||||
|
<path
|
||||||
|
d="m 114.18486,133.39431 h 50.31577 L 154.19339,122.4189 h 16.00038 l 16.01264,17.05067 -16.01264,17.04991 h -15.98379 l 10.44067,-11.1175 h -50.46579 z"
|
||||||
|
style="clip-rule:evenodd;fill:#e3292e;fill-rule:evenodd;stroke-width:0.744302;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path8-7" /><path
|
||||||
|
d="m 186.32326,162.03715 h -50.31577 l 10.30725,-10.97542 h -16.00039 l -16.01264,17.05067 16.01264,17.04991 h 15.98379 l -10.44067,-11.1175 h 50.46579 z"
|
||||||
|
style="clip-rule:evenodd;fill:#e3292e;fill-rule:evenodd;stroke-width:0.744302;stroke-linejoin:round;stroke-miterlimit:1.41421;fill-opacity:1"
|
||||||
|
id="path10-5" /></svg>
|
After Width: | Height: | Size: 4.3 KiB |
58
gns3server/symbols/affinity/square/blue/nat.svg
Normal file
After Width: | Height: | Size: 20 KiB |
74
gns3server/symbols/affinity/square/blue/nat2.svg
Normal file
After Width: | Height: | Size: 78 KiB |
58
gns3server/symbols/affinity/square/gray/nat.svg
Normal file
After Width: | Height: | Size: 20 KiB |
74
gns3server/symbols/affinity/square/gray/nat2.svg
Normal file
After Width: | Height: | Size: 78 KiB |
58
gns3server/symbols/affinity/square/green/nat.svg
Normal file
After Width: | Height: | Size: 20 KiB |
74
gns3server/symbols/affinity/square/green/nat2.svg
Normal file
After Width: | Height: | Size: 78 KiB |
58
gns3server/symbols/affinity/square/red/nat.svg
Normal file
After Width: | Height: | Size: 20 KiB |
74
gns3server/symbols/affinity/square/red/nat2.svg
Normal file
After Width: | Height: | Size: 78 KiB |
207
gns3server/symbols/classic/nat.svg
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
width="4.5009999cm"
|
||||||
|
height="2.0009999cm"
|
||||||
|
viewBox="0.2 0.149 4.7 2.151"
|
||||||
|
id="svg2"
|
||||||
|
sodipodi:docname="nat.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview30"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:document-units="cm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:lockguides="true"
|
||||||
|
inkscape:zoom="5.7444245"
|
||||||
|
inkscape:cx="75.725602"
|
||||||
|
inkscape:cy="42.040765"
|
||||||
|
inkscape:window-width="1658"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
inkscape:window-x="70"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<metadata
|
||||||
|
id="metadata57">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Jeremy Grossmann</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:publisher>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>GNS-3</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:publisher>
|
||||||
|
<dc:description>Created for the GNS-3 project (www.gns3.net)</dc:description>
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://web.resource.org/cc/SourceCode" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs55" />
|
||||||
|
<path
|
||||||
|
d="m 3.7599791,0.61531938 -10e-4,-0.021 -0.003,-0.021 -0.007,-0.02 -0.009,-0.02 -0.011,-0.021 -0.013,-0.02 -0.017,-0.02 -0.018,-0.019 -0.021,-0.019 -0.023,-0.019 -0.024,-0.017 -0.028,-0.017 -0.03,-0.017 -0.031,-0.017 -0.033,-0.015 -0.035,-0.015 -0.037,-0.014 -0.038,-0.013 -0.04,-0.012 -0.041,-0.011 -0.043,-0.011 -0.045,-0.01 -0.044,-0.008 -0.046,-0.008 -0.048,-0.007 -0.047,-0.006 -0.048,-0.004 -0.049,-0.004 -0.05,-0.003 -0.049,-0.001 -0.049,-0.001 0,0 -0.05,0.001 -0.049,0.001 -0.05,0.003 -0.048,0.004 -0.049,0.004 -0.047,0.006 -0.047,0.007 -0.046,0.008 -0.045,0.008 -0.043,0.01 -0.043,0.011 -0.042,0.011 -0.04,0.012 -0.039,0.013 -0.036,0.014 -0.035,0.015 -0.033,0.015 -0.032,0.017 -0.029,0.017 -0.027,0.017 -0.026,0.017 -0.023,0.019 -0.02,0.019 -0.019,0.019 -0.016,0.02 -0.014,0.02 -0.01,0.021 -0.009,0.02 -0.006,0.02 -0.005,0.021 -0.001,0.021 0,0 0.001,0.02 0.005,0.022 0.006,0.02 0.009,0.021 0.01,0.02 0.014,0.019 0.016,0.02 0.019,0.02 0.02,0.019 0.023,0.018 0.026,0.018 0.027,0.017 0.029,0.017 0.032,0.016 0.033,0.016 0.035,0.014 0.036,0.014 0.039,0.013 0.04,0.013 0.042,0.011 0.043,0.01 0.043,0.011 0.045,0.008 0.046,0.007 0.047,0.007 0.047,0.006 0.049,0.005 0.048,0.003 0.05,0.003 0.049,10e-4 0.05,0.001 0,0 0.049,-0.001 0.049,-10e-4 0.05,-0.003 0.049,-0.003 0.048,-0.005 0.047,-0.006 0.048,-0.007 0.046,-0.007 0.044,-0.008 0.045,-0.011 0.043,-0.01 0.041,-0.011 0.04,-0.013 0.038,-0.013 0.037,-0.014 0.035,-0.014 0.033,-0.016 0.031,-0.016 0.03,-0.017 0.028,-0.017 0.024,-0.018 0.023,-0.018 0.021,-0.019 0.018,-0.02 0.017,-0.02 0.013,-0.019 0.011,-0.02 0.009,-0.021 0.007,-0.02 0.003,-0.022 10e-4,-0.02"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 2.2259791,0.83031938 -10e-4,-0.021 -0.003,-0.02 -0.004,-0.021 -0.007,-0.02 -0.009,-0.021 -0.01,-0.02 -0.012,-0.02 -0.015,-0.018 -0.015,-0.019 -0.018,-0.019 -0.019,-0.018 -0.021,-0.017 -0.022,-0.017 -0.024,-0.016 -0.026,-0.015 -0.026,-0.015 -0.029,-0.014 -0.029,-0.013 -0.031,-0.013 -0.032,-0.011 -0.032,-0.011 -0.034,-0.009 -0.035,-0.009 -0.035,-0.008 -0.036,-0.006 -0.036,-0.006 -0.037,-0.005 -0.038,-0.004 -0.037,-0.002 -0.039,-0.002 -0.038,0 0,0 -0.037,0 -0.038,0.002 -0.038,0.002 -0.038,0.004 -0.037,0.005 -0.036,0.006 -0.036,0.006 -0.035,0.008 -0.035,0.009 -0.033,0.009 -0.033,0.011 -0.032,0.011 -0.03,0.013 -0.03,0.013 -0.028,0.014 -0.027,0.015 -0.025,0.015 -0.024,0.016 -0.023,0.017 -0.021,0.017 -0.018,0.018 -0.019,0.019 -0.015,0.019 -0.015,0.018 -0.012,0.02 -0.011,0.02 -0.008,0.021 -0.007,0.02 -0.005,0.021 -0.002,0.02 -0.001,0.021 0,0 0.001,0.021 0.002,0.021 0.005,0.02 0.007,0.021 0.008,0.02 0.011,0.02 0.012,0.02 0.015,0.019 0.015,0.019 0.019,0.018 0.018,0.018 0.021,0.018 0.023,0.016 0.024,0.016 0.025,0.016 0.027,0.014 0.028,0.015 0.03,0.012 0.03,0.013 0.032,0.012 0.033,0.01 0.033,0.01 0.035,0.008 0.035,0.008 0.036,0.007 0.036,0.005 0.037,0.005 0.038,0.004 0.038,0.002 0.038,0.002 0.037,0 0,0 0.038,0 0.039,-0.002 0.037,-0.002 0.038,-0.004 0.037,-0.005 0.036,-0.005 0.036,-0.007 0.035,-0.008 0.035,-0.008 0.034,-0.01 0.032,-0.01 0.032,-0.012 0.031,-0.013 0.029,-0.012 0.029,-0.015 0.026,-0.014 0.026,-0.016 0.024,-0.016 0.022,-0.016 0.021,-0.018 0.019,-0.018 0.018,-0.018 0.015,-0.019 0.015,-0.019 0.012,-0.02 0.01,-0.02 0.009,-0.02 0.007,-0.021 0.004,-0.02 0.003,-0.021 10e-4,-0.021"
|
||||||
|
id="path6"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 1.2809791,1.2493194 -10e-4,-0.017 -0.001,-0.017 -0.004,-0.017 -0.005,-0.017 -0.005,-0.016 -0.007,-0.016 -0.009,-0.016 -0.009,-0.017 -0.011,-0.015 -0.012,-0.015 -0.012,-0.014 -0.014,-0.015 -0.015,-0.014 -0.017,-0.012 -0.017,-0.013 -0.018,-0.012 -0.019,-0.011 -0.02,-0.011 -0.02,-0.01 -0.022,-0.01 -0.022,-0.008 -0.023,-0.008 -0.023,-0.007 -0.024,-0.006 -0.024,-0.006 -0.025,-0.004 -0.024,-0.005 -0.026,-0.002 -0.025,-0.002 -0.025,-0.002 -0.026,0 0,0 -0.026,0 -0.026,0.002 -0.025,0.002 -0.025,0.002 -0.024,0.005 -0.026,0.004 -0.024,0.006 -0.023,0.006 -0.023,0.007 -0.023,0.008 -0.022,0.008 -0.022,0.01 -0.021,0.01 -0.019,0.011 -0.019,0.011 -0.018,0.012 -0.017,0.013 -0.017,0.012 -0.015,0.014 -0.014,0.015 -0.013,0.014 -0.011,0.015 -0.011,0.015 -0.01,0.017 -0.008,0.016 -0.007,0.016 -0.006,0.016 -0.004,0.017 -0.004,0.017 -0.002,0.017 0,0.017 0,0 0,0.016 0.002,0.018 0.004,0.016 0.004,0.017 0.006,0.017 0.007,0.016 0.008,0.016 0.01,0.015 0.011,0.016 0.011,0.015 0.013,0.015 0.014,0.014 0.015,0.014 0.017,0.013 0.017,0.012 0.018,0.012 0.019,0.012 0.019,0.01 0.021,0.01 0.022,0.01 0.022,0.008 0.023,0.008 0.023,0.007 0.023,0.007 0.024,0.005 0.026,0.005 0.024,0.004 0.025,0.003 0.025,10e-4 0.026,0.002 0.026,0.001 0,0 0.026,-0.001 0.025,-0.002 0.025,-10e-4 0.026,-0.003 0.024,-0.004 0.025,-0.005 0.024,-0.005 0.024,-0.007 0.023,-0.007 0.023,-0.008 0.022,-0.008 0.022,-0.01 0.02,-0.01 0.02,-0.01 0.019,-0.012 0.018,-0.012 0.017,-0.012 0.017,-0.013 0.015,-0.014 0.014,-0.014 0.012,-0.015 0.012,-0.015 0.011,-0.016 0.009,-0.015 0.009,-0.016 0.007,-0.016 0.005,-0.017 0.005,-0.017 0.004,-0.016 0.001,-0.018 10e-4,-0.016"
|
||||||
|
id="path8"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 2.0969791,1.5713194 -0.002,-0.018 -0.003,-0.018 -0.004,-0.019 -0.007,-0.018 -0.009,-0.017 -0.01,-0.018 -0.013,-0.017 -0.015,-0.018 -0.016,-0.016 -0.017,-0.016 -0.019,-0.016 -0.021,-0.016 -0.024,-0.015 -0.024,-0.014 -0.026,-0.013 -0.027,-0.013 -0.028,-0.012 -0.031,-0.012 -0.03,-0.011 -0.032,-0.01 -0.034,-0.009 -0.035,-0.009 -0.034,-0.008 -0.036,-0.007 -0.036,-0.005 -0.038,-0.006 -0.037,-0.004 -0.038,-0.003 -0.038,-0.002 -0.039,-0.002 -0.038,0 0,0 -0.038,0 -0.039,0.002 -0.039,0.002 -0.038,0.003 -0.037,0.004 -0.037,0.006 -0.037,0.005 -0.035,0.007 -0.035,0.008 -0.034,0.009 -0.034,0.009 -0.032,0.01 -0.031,0.011 -0.03,0.012 -0.029,0.012 -0.027,0.013 -0.026,0.013 -0.024,0.014 -0.023,0.015 -0.021,0.016 -0.019,0.016 -0.018,0.016 -0.017,0.016 -0.014,0.018 -0.012,0.017 -0.01,0.018 -0.01,0.017 -0.006,0.018 -0.005,0.019 -0.003,0.018 -0.001,0.018 0,0 0.001,0.019 0.003,0.018 0.005,0.018 0.006,0.018 0.01,0.019 0.01,0.017 0.012,0.017 0.014,0.018 0.017,0.016 0.018,0.016 0.019,0.016 0.021,0.015 0.023,0.015 0.024,0.015 0.026,0.014 0.027,0.012 0.029,0.013 0.03,0.011 0.031,0.011 0.032,0.01 0.034,0.01 0.034,0.008 0.035,0.008 0.035,0.006 0.037,0.007 0.037,0.004 0.037,0.005 0.038,0.003 0.039,0.003 0.039,10e-4 0.038,0 0,0 0.038,0 0.039,-10e-4 0.038,-0.003 0.038,-0.003 0.037,-0.005 0.038,-0.004 0.036,-0.007 0.036,-0.006 0.034,-0.008 0.035,-0.008 0.034,-0.01 0.032,-0.01 0.03,-0.011 0.031,-0.011 0.028,-0.013 0.027,-0.012 0.026,-0.014 0.024,-0.015 0.024,-0.015 0.021,-0.015 0.019,-0.016 0.017,-0.016 0.016,-0.016 0.015,-0.018 0.013,-0.017 0.01,-0.017 0.009,-0.019 0.007,-0.018 0.004,-0.018 0.003,-0.018 0.002,-0.019"
|
||||||
|
id="path10"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 3.9229791,1.7583194 -0.002,-0.021 -0.004,-0.022 -0.007,-0.022 -0.011,-0.021 -0.012,-0.021 -0.016,-0.021 -0.019,-0.021 -0.021,-0.02 -0.024,-0.02 -0.027,-0.02 -0.029,-0.018 -0.032,-0.019 -0.033,-0.017 -0.037,-0.017 -0.039,-0.016 -0.04,-0.016 -0.043,-0.014 -0.045,-0.014 -0.046,-0.013 -0.048,-0.012 -0.05,-0.01 -0.051,-0.011 -0.052,-0.009 -0.054,-0.008 -0.054,-0.007 -0.056,-0.006 -0.055,-0.005 -0.057,-0.004 -0.057,-0.002 -0.058,-0.002 -0.057,0 0,0 -0.057,0 -0.058,0.002 -0.057,0.002 -0.057,0.004 -0.056,0.005 -0.055,0.006 -0.054,0.007 -0.054,0.008 -0.052,0.009 -0.051,0.011 -0.05,0.01 -0.048,0.012 -0.047,0.013 -0.044,0.014 -0.043,0.014 -0.04,0.016 -0.039,0.016 -0.037,0.017 -0.034,0.017 -0.031,0.019 -0.029,0.018 -0.027,0.02 -0.024,0.02 -0.021,0.02 -0.018,0.021 -0.017,0.021 -0.012,0.021 -0.011,0.021 -0.007,0.022 -0.005,0.022 -10e-4,0.021 0,0 10e-4,0.023 0.005,0.021 0.007,0.022 0.011,0.021 0.012,0.022 0.017,0.02 0.018,0.021 0.021,0.02 0.024,0.02 0.027,0.02 0.029,0.018 0.031,0.018 0.034,0.018 0.037,0.017 0.039,0.016 0.04,0.016 0.043,0.015 0.044,0.013 0.047,0.013 0.048,0.012 0.05,0.011 0.051,0.01 0.052,0.009 0.054,0.009 0.054,0.007 0.055,0.005 0.056,0.005 0.057,0.004 0.057,0.003 0.058,0.002 0.057,0 0,0 0.057,0 0.058,-0.002 0.057,-0.003 0.057,-0.004 0.055,-0.005 0.056,-0.005 0.054,-0.007 0.054,-0.009 0.052,-0.009 0.051,-0.01 0.05,-0.011 0.048,-0.012 0.046,-0.013 0.045,-0.013 0.043,-0.015 0.04,-0.016 0.039,-0.016 0.037,-0.017 0.033,-0.018 0.032,-0.018 0.029,-0.018 0.027,-0.02 0.024,-0.02 0.021,-0.02 0.019,-0.021 0.016,-0.02 0.012,-0.022 0.011,-0.021 0.007,-0.022 0.004,-0.021 0.002,-0.023"
|
||||||
|
id="path12"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 4.5529791,0.76631938 0,-0.016 -0.003,-0.016 -0.004,-0.017 -0.008,-0.016 -0.007,-0.016 -0.011,-0.016 -0.012,-0.015 -0.013,-0.015 -0.016,-0.015 -0.017,-0.015 -0.019,-0.013 -0.02,-0.014 -0.022,-0.013 -0.023,-0.013 -0.025,-0.012 -0.026,-0.011 -0.027,-0.012 -0.029,-0.01 -0.03,-0.01 -0.031,-0.009 -0.031,-0.008 -0.033,-0.008 -0.034,-0.007 -0.034,-0.006 -0.035,-0.005 -0.035,-0.005 -0.036,-0.003 -0.037,-0.003 -0.036,-0.002 -0.037,-0.001 -0.037,0 0,0 -0.037,0 -0.036,0.001 -0.038,0.002 -0.035,0.003 -0.036,0.003 -0.036,0.005 -0.034,0.005 -0.035,0.006 -0.034,0.007 -0.032,0.008 -0.032,0.008 -0.031,0.009 -0.03,0.01 -0.028,0.01 -0.028,0.012 -0.026,0.011 -0.025,0.012 -0.023,0.013 -0.022,0.013 -0.02,0.014 -0.019,0.013 -0.016,0.015 -0.016,0.015 -0.014,0.015 -0.012,0.015 -0.01,0.016 -0.009,0.016 -0.006,0.016 -0.005,0.017 -0.002,0.016 -10e-4,0.016 0,0 10e-4,0.016 0.002,0.016 0.005,0.017 0.006,0.016 0.009,0.016 0.01,0.016 0.012,0.016 0.014,0.014 0.016,0.016 0.016,0.014 0.019,0.014 0.02,0.013 0.022,0.014 0.023,0.013 0.025,0.012 0.026,0.011 0.028,0.011 0.028,0.011 0.03,0.009 0.031,0.009 0.032,0.009 0.032,0.007 0.034,0.007 0.035,0.006 0.034,0.006 0.036,0.004 0.036,0.003 0.035,0.003 0.038,0.003 0.036,0 0.037,10e-4 0,0 0.037,-10e-4 0.037,0 0.036,-0.003 0.037,-0.003 0.036,-0.003 0.035,-0.004 0.035,-0.006 0.034,-0.006 0.034,-0.007 0.033,-0.007 0.031,-0.009 0.031,-0.009 0.03,-0.009 0.029,-0.011 0.027,-0.011 0.026,-0.011 0.025,-0.012 0.023,-0.013 0.022,-0.014 0.02,-0.013 0.019,-0.014 0.017,-0.014 0.016,-0.016 0.013,-0.014 0.012,-0.016 0.011,-0.016 0.007,-0.016 0.008,-0.016 0.004,-0.017 0.003,-0.016 0,-0.016"
|
||||||
|
id="path14"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 4.7599791,1.1813194 -10e-4,-0.016 -0.002,-0.016 -0.005,-0.017 -0.007,-0.016 -0.008,-0.016 -0.01,-0.016 -0.012,-0.016 -0.013,-0.014 -0.015,-0.015 -0.018,-0.015 -0.019,-0.014 -0.019,-0.013 -0.022,-0.013 -0.023,-0.014 -0.024,-0.011 -0.027,-0.012 -0.027,-0.011 -0.028,-0.01 -0.03,-0.01 -0.03,-0.009 -0.032,-0.008 -0.033,-0.008 -0.033,-0.007 -0.033,-0.005 -0.035,-0.006 -0.035,-0.004 -0.036,-0.004 -0.036,-0.003 -0.036,-0.002 -0.037,-0.001 -0.036,-0.001 0,0 -0.038,0.001 -0.036,0.001 -0.036,0.002 -0.036,0.003 -0.036,0.004 -0.035,0.004 -0.035,0.006 -0.033,0.005 -0.034,0.007 -0.032,0.008 -0.032,0.008 -0.03,0.009 -0.03,0.01 -0.028,0.01 -0.027,0.011 -0.027,0.012 -0.024,0.011 -0.022,0.014 -0.022,0.013 -0.021,0.013 -0.018,0.014 -0.018,0.015 -0.015,0.015 -0.013,0.014 -0.012,0.016 -0.01,0.016 -0.008,0.016 -0.007,0.016 -0.005,0.017 -0.002,0.016 -10e-4,0.016 0,0 10e-4,0.016 0.002,0.016 0.005,0.016 0.007,0.016 0.008,0.017 0.01,0.016 0.012,0.015 0.013,0.015 0.015,0.015 0.018,0.015 0.018,0.013 0.021,0.014 0.022,0.013 0.022,0.013 0.024,0.012 0.027,0.011 0.027,0.012 0.028,0.01 0.03,0.01 0.03,0.009 0.032,0.008 0.032,0.007 0.034,0.007 0.033,0.006 0.035,0.005 0.035,0.005 0.036,0.004 0.036,0.003 0.036,0.002 0.036,0.001 0.038,0 0,0 0.036,0 0.037,-0.001 0.036,-0.002 0.036,-0.003 0.036,-0.004 0.035,-0.005 0.035,-0.005 0.033,-0.006 0.033,-0.007 0.033,-0.007 0.032,-0.008 0.03,-0.009 0.03,-0.01 0.028,-0.01 0.027,-0.012 0.027,-0.011 0.024,-0.012 0.023,-0.013 0.022,-0.013 0.019,-0.014 0.019,-0.013 0.018,-0.015 0.015,-0.015 0.013,-0.015 0.012,-0.015 0.01,-0.016 0.008,-0.017 0.007,-0.016 0.005,-0.016 0.002,-0.016 10e-4,-0.016"
|
||||||
|
id="path16"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 4.6189791,1.5243194 -10e-4,-0.027 -0.002,-0.027 -0.005,-0.026 -0.006,-0.027 -0.009,-0.026 -0.01,-0.026 -0.012,-0.025 -0.014,-0.025 -0.014,-0.025 -0.017,-0.023 -0.018,-0.024 -0.021,-0.022 -0.021,-0.022 -0.023,-0.02 -0.024,-0.021 -0.027,-0.018 -0.027,-0.018 -0.027,-0.018 -0.029,-0.015 -0.031,-0.015 -0.032,-0.013 -0.031,-0.013 -0.033,-0.011 -0.034,-0.01 -0.035,-0.009 -0.035,-0.007 -0.036,-0.006 -0.035,-0.005 -0.036,-0.003 -0.036,-0.002 -0.036,-0.001 0,0 -0.037,0.001 -0.036,0.002 -0.036,0.003 -0.036,0.005 -0.035,0.006 -0.035,0.007 -0.035,0.009 -0.034,0.01 -0.033,0.011 -0.032,0.013 -0.031,0.013 -0.031,0.015 -0.029,0.015 -0.028,0.018 -0.027,0.018 -0.026,0.018 -0.024,0.021 -0.023,0.02 -0.022,0.022 -0.019,0.022 -0.019,0.024 -0.017,0.023 -0.015,0.025 -0.014,0.025 -0.011,0.025 -0.01,0.026 -0.008,0.026 -0.007,0.027 -0.005,0.026 -0.002,0.027 -10e-4,0.027 0,0 10e-4,0.027 0.002,0.027 0.005,0.026 0.007,0.026 0.008,0.026 0.01,0.026 0.011,0.026 0.014,0.025 0.015,0.024 0.017,0.024 0.019,0.023 0.019,0.022 0.022,0.022 0.023,0.021 0.024,0.02 0.026,0.019 0.027,0.018 0.028,0.017 0.029,0.016 0.031,0.015 0.031,0.013 0.032,0.013 0.033,0.011 0.034,0.01 0.035,0.008 0.035,0.008 0.035,0.006 0.036,0.005 0.036,0.003 0.036,0.002 0.037,10e-4 0,0 0.036,-10e-4 0.036,-0.002 0.036,-0.003 0.035,-0.005 0.036,-0.006 0.035,-0.008 0.035,-0.008 0.034,-0.01 0.033,-0.011 0.031,-0.013 0.032,-0.013 0.031,-0.015 0.029,-0.016 0.027,-0.017 0.027,-0.018 0.027,-0.019 0.024,-0.02 0.023,-0.021 0.021,-0.022 0.021,-0.022 0.018,-0.023 0.017,-0.024 0.014,-0.024 0.014,-0.025 0.012,-0.026 0.01,-0.026 0.009,-0.026 0.006,-0.026 0.005,-0.026 0.002,-0.027 10e-4,-0.027"
|
||||||
|
id="path18"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 2.7919791,0.61131938 0.965,-0.091 -0.013,-0.021 -0.014,-0.019 -0.017,-0.02 -0.019,-0.02 -0.022,-0.019 -0.024,-0.018 -0.026,-0.018 -0.028,-0.017 -0.031,-0.017 -0.032,-0.016 -0.034,-0.015 -0.036,-0.014 -0.038,-0.014 -0.039,-0.013 -0.042,-0.012 -0.042,-0.011 -0.043,-0.011 -0.045,-0.009 -0.046,-0.009 -0.047,-0.007 -0.048,-0.007 -0.048,-0.005 -0.049,-0.004 -0.049,-0.004 -0.049,-0.002 -0.051,-0.001 -0.05,0 -0.05,0 -0.049,0.003 -0.05,0.002 -0.049,0.004 -0.049,0.006 -0.047,0.006 -0.048,0.007 -0.046,0.008 -0.045,0.009 -0.044,0.01 -0.043,0.011 -0.041,0.012 -0.04,0.013 -0.038,0.013 -0.036,0.014 -0.036,0.016 -0.032,0.015 -0.032,0.017 -0.029,0.017 -0.026,0.018 -0.024,0.018 -0.024,0.019 -0.02,0.018 -0.018,0.02 -0.015,0.02 -0.012,0.021 -0.011,0.02 0.971,0.077"
|
||||||
|
id="path22"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 3.7569791,0.51931938 -0.013,-0.021 -0.014,-0.019 -0.017,-0.02 -0.02,-0.019 -0.022,-0.019 -0.024,-0.018 -0.026,-0.018 -0.029,-0.018 -0.03,-0.016 -0.032,-0.016 -0.035,-0.016 -0.035,-0.014 -0.038,-0.014 -0.04,-0.012 -0.04,-0.013 -0.042,-0.011 -0.044,-0.01 -0.045,-0.01 -0.046,-0.008 -0.046,-0.008 -0.048,-0.006 -0.048,-0.005 -0.049,-0.004 -0.05,-0.004 -0.05,-0.002 -0.049,-0.001 -0.051,0 -0.049,0 -0.049,0.003 -0.051,0.002 -0.048,0.004 -0.049,0.006 -0.047,0.006 -0.048,0.007 -0.046,0.008 -0.045,0.009 -0.043,0.01 -0.043,0.011 -0.042,0.012 -0.039,0.013 -0.038,0.013 -0.036,0.014 -0.036,0.015 -0.033,0.015 -0.031,0.017 -0.028,0.018 -0.028,0.017 -0.024,0.018 -0.022,0.019 -0.021,0.019 -0.018,0.019 -0.016,0.02 -0.012,0.021 -0.011,0.02"
|
||||||
|
id="path24"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 1.4819791,0.82631938 0.486,-0.317 -0.029,-0.013 -0.032,-0.012 -0.032,-0.012 -0.033,-0.01 -0.034,-0.01 -0.035,-0.008 -0.036,-0.008 -0.036,-0.006 -0.037,-0.006 -0.037,-0.005 -0.038,-0.003 -0.038,-0.003 -0.039,-0.001 -0.038,0 -0.038,0 -0.038,0.002 -0.038,0.003 -0.038,0.004 -0.037,0.005 -0.036,0.006 -0.037,0.007 -0.035,0.008 -0.034,0.009 -0.034,0.009 -0.033,0.011 -0.031,0.013 -0.031,0.012 -0.029,0.013 -0.028,0.015 -0.027,0.015 -0.026,0.015 -0.024,0.016 -0.022,0.018 -0.021,0.017 -0.018,0.018 -0.018,0.02 -0.016,0.018 -0.014,0.02 -0.012,0.02 -0.01,0.02 -0.008,0.02 -0.006,0.022 -0.005,0.02 -0.003,0.021 0,0.021 0.001,0.021 0.003,0.021 0.005,0.021 0.74600003,-0.067"
|
||||||
|
id="path26"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 1.9659791,0.50831938 -0.03,-0.014 -0.031,-0.011 -0.033,-0.012 -0.033,-0.01 -0.035,-0.01 -0.034,-0.008 -0.036,-0.008 -0.036,-0.006 -0.037,-0.005 -0.037,-0.005 -0.038,-0.004 -0.038,-0.002 -0.039,-0.001 -0.038,0 -0.038,0 -0.038,0.003 -0.038,0.002 -0.038,0.004 -0.037,0.005 -0.036,0.007 -0.036,0.006 -0.035,0.009 -0.034,0.008 -0.034,0.011 -0.033,0.011 -0.032,0.011 -0.03,0.013 -0.029,0.013 -0.028,0.015 -0.027,0.015 -0.025,0.015 -0.024,0.016 -0.022,0.018 -0.02,0.017 -0.02,0.019 -0.017,0.018 -0.016,0.019 -0.013,0.02 -0.012,0.02 -0.01,0.02 -0.008,0.021 -0.006,0.02 -0.005,0.021 -0.003,0.02 0,0.022 0.002,0.021 0.002,0.02 0.006,0.021"
|
||||||
|
id="path28"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 1.3459791,1.5683194 -0.78100003,-0.012 0,0.019 0.001,0.019 0.003,0.019 0.006,0.018 0.008,0.019 0.009,0.018 0.012,0.018 0.014,0.018 0.015,0.017 0.017,0.017 0.019,0.017 0.02,0.016 0.023,0.015 0.023,0.015 0.026,0.015 0.027,0.014 0.027,0.012 0.03,0.013 0.031,0.012 0.032,0.01 0.034,0.011 0.033,0.009 0.035,0.008 0.036,0.008 0.037,0.007 0.038,0.006 0.037,0.005 0.039,0.004 0.039,0.003 0.039,0.003 0.04,10e-4 0.039,0 0.039,-10e-4 0.039,-0.002 0.039,-0.002 0.039,-0.003 0.039,-0.005 0.037,-0.006 0.037,-0.005 0.037,-0.008 0.035,-0.008 0.035,-0.009 0.033,-0.009 0.033,-0.01 0.033,-0.011 0.03,-0.013 -0.513,-0.282"
|
||||||
|
id="path30"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 0.56497907,1.5563194 -0.001,0.019 0.002,0.019 0.003,0.018 0.006,0.019 0.008,0.018 0.01,0.019 0.011,0.018 0.014,0.018 0.015,0.017 0.017,0.017 0.018,0.016 0.02,0.016 0.023,0.016 0.024,0.015 0.024,0.014 0.026,0.014 0.029,0.013 0.029,0.013 0.032,0.011 0.032,0.011 0.032,0.01 0.034,0.009 0.035,0.009 0.037,0.008 0.036,0.006 0.037,0.007 0.038,0.005 0.038,0.004 0.039,0.003 0.039,0.002 0.039,0.002 0.04,0 0.039,0 0.039,-0.003 0.039,-0.002 0.038,-0.003 0.038,-0.005 0.038,-0.004 0.038,-0.007 0.036,-0.007 0.036,-0.008 0.034,-0.009 0.034,-0.009 0.034,-0.01 0.031,-0.011 0.03,-0.012"
|
||||||
|
id="path32"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 3.8359791,0.75931938 0.689,0.104 0.011,-0.016 0.01,-0.015 0.007,-0.016 0.006,-0.016 0.003,-0.016 0.002,-0.017 0,-0.016 -0.002,-0.017 -0.003,-0.016 -0.006,-0.016 -0.007,-0.016 -0.01,-0.016 -0.01,-0.016 -0.013,-0.015 -0.015,-0.015 -0.016,-0.015 -0.018,-0.014 -0.02,-0.014 -0.022,-0.014 -0.021,-0.012 -0.025,-0.013 -0.025,-0.012 -0.027,-0.011 -0.029,-0.011 -0.028,-0.01 -0.03,-0.009 -0.032,-0.009 -0.032,-0.008 -0.034,-0.007 -0.033,-0.006 -0.036,-0.006 -0.034,-0.005 -0.037,-0.004 -0.036,-0.003 -0.037,-0.003 -0.037,-0.001 -0.036,-0.001 -0.037,0 -0.037,0.001 -0.037,0.002 -0.036,0.002 -0.036,0.003 -0.036,0.004 -0.036,0.005 0.238,0.306"
|
||||||
|
id="path34"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 4.4569791,0.92331938 0.067,-0.059 0.011,-0.016 0.009,-0.015 0.009,-0.016 0.005,-0.017 0.004,-0.016 0.002,-0.016 0.001,-0.016 -0.003,-0.017 -0.003,-0.016 -0.006,-0.017 -0.007,-0.015 -0.009,-0.016 -0.011,-0.016 -0.012,-0.015 -0.016,-0.015 -0.016,-0.015 -0.017,-0.014 -0.02,-0.014 -0.021,-0.014 -0.023,-0.013 -0.023,-0.012 -0.026,-0.012 -0.027,-0.011 -0.028,-0.011 -0.029,-0.011 -0.03,-0.009 -0.032,-0.008 -0.031,-0.008 -0.033,-0.008 -0.034,-0.006 -0.035,-0.006 -0.035,-0.005 -0.036,-0.004 -0.036,-0.003 -0.037,-0.002 -0.037,-0.002 -0.037,-0.001 -0.037,0 -0.037,0.001 -0.037,0.002 -0.036,0.002 -0.036,0.003 -0.036,0.004 -0.035,0.005"
|
||||||
|
id="path36"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 3.9329791,1.1853194 0.775,0.132 0.016,-0.017 0.013,-0.017 0.012,-0.018 0.008,-0.018 0.008,-0.018 0.004,-0.019 10e-4,-0.018 0,-0.018 -0.003,-0.019 -0.004,-0.019 -0.008,-0.018 -0.009,-0.018 -0.012,-0.017 -0.014,-0.018 -0.016,-0.017 -0.018,-0.017 -0.02,-0.016 -0.023,-0.016 -0.024,-0.015 -0.686,0.20100002"
|
||||||
|
id="path38"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 4.6121701,1.38473 0.098479,-0.059128 0.014482,-0.018039 0.013517,-0.018039 0.01062,-0.018039 0.00869,-0.018039 0.00772,-0.018039 0.00386,-0.018039 0.00193,-0.019041 0,-0.018039 -0.00386,-0.020044 -0.00386,-0.018039 -0.00676,-0.018039 -0.00965,-0.018039 -0.011586,-0.018039 -0.013517,-0.018039 -0.015448,-0.017037 -0.018344,-0.017037 -0.021241,-0.016035 -0.020275,-0.016035 -0.024137,-0.0160349 -0.1544773,-0.0591286"
|
||||||
|
id="path40"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.0596842;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 3.9009791,1.5363194 -0.245,0.503 0.036,0.008 0.036,0.007 0.037,0.006 0.038,0.004 0.038,0.003 0.037,0.002 0.037,0 0.038,-0.002 0.037,-0.002 0.038,-0.004 0.036,-0.005 0.038,-0.007 0.035,-0.008 0.036,-0.009 0.034,-0.011 0.034,-0.012 0.033,-0.013 0.032,-0.014 0.031,-0.016 0.03,-0.016 0.028,-0.018 0.027,-0.019 0.027,-0.02 0.025,-0.02 0.022,-0.022 0.022,-0.021 0.02,-0.024 0.018,-0.024 0.016,-0.024 0.015,-0.025 0.014,-0.026 0.01,-0.025 0.01,-0.027 0.008,-0.027 0.006,-0.026 0.003,-0.028 0.002,-0.027 0,-0.027 -0.002,-0.027 -0.004,-0.027 -0.006,-0.026 -0.008,-0.028 -0.009,-0.025 -0.71,0.149"
|
||||||
|
id="path42"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 3.6589791,2.0403194 0.036,0.008 0.036,0.007 0.037,0.006 0.037,0.004 0.037,0.002 0.038,0.002 0.038,10e-4 0.037,-0.003 0.038,-0.002 0.037,-0.004 0.037,-0.005 0.036,-0.007 0.036,-0.009 0.036,-0.009 0.034,-0.011 0.033,-0.011 0.034,-0.014 0.032,-0.014 0.031,-0.015 0.029,-0.018 0.029,-0.017 0.027,-0.019 0.026,-0.019 0.025,-0.021 0.023,-0.022 0.021,-0.022 0.019,-0.024 0.019,-0.023 0.016,-0.024 0.015,-0.025 0.014,-0.026 0.011,-0.026 0.008,-0.026 0.008,-0.027 0.006,-0.027 0.003,-0.027 0.002,-0.027 0,-0.027 -0.002,-0.027 -0.005,-0.027 -0.005,-0.028 -0.008,-0.026 -0.01,-0.026"
|
||||||
|
id="path44"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 0.80297907,1.2493194 -0.037,-0.34200002 -0.028,0.002 -0.026,0.002 -0.027,0.004 -0.026,0.004 -0.026,0.005 -0.026,0.006 -0.024,0.007 -0.025,0.008 -0.024,0.008 -0.023,0.009 -0.022,0.01 -0.021,0.01 -0.021,0.012 -0.02,0.012 -0.019,0.013 -0.017,0.013 -0.017,0.014 -0.015,0.014 -0.015,0.015 -0.013,0.015 -0.011,0.016 -0.011,0.016 -0.01,0.016 -0.008,0.017 -0.006,0.017 -0.006,0.016 -0.004,0.018 -0.003,0.018 -0.001,0.017 0,0.017 0.001,0.018 0.003,0.017 0.004,0.017 0.006,0.017 0.007,0.017 0.008,0.017 0.009,0.016 0.011,0.016 0.012,0.016 0.013,0.015 0.016,0.015 0.015,0.014 0.017,0.014 0.018,0.013 0.018,0.013 0.02,0.011 0.021,0.011 0.021,0.012 0.022,0.009 0.024,0.009 0.023,0.009 0.243,-0.305"
|
||||||
|
id="path46"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 0.76697907,0.90731938 -0.027,0.002 -0.027,0.002 -0.026,0.003 -0.026,0.005 -0.025,0.004 -0.026,0.006 -0.025,0.007 -0.023,0.007 -0.023,0.009 -0.023,0.009 -0.023,0.009 -0.021,0.01 -0.02,0.011 -0.02,0.012 -0.018,0.012 -0.018,0.013 -0.017,0.013 -0.016,0.015 -0.015,0.014 -0.012,0.014 -0.012,0.016 -0.012,0.015 -0.009,0.016 -0.009,0.016 -0.007,0.017 -0.006,0.017 -0.005,0.017 -0.003,0.017 -0.002,0.017 0,0.017 0,0.017 0.003,0.017 0.003,0.018 0.004,0.016 0.007,0.017 0.006,0.016 0.009,0.017 0.009,0.016 0.012,0.015 0.012,0.016 0.014,0.014 0.014,0.014 0.016,0.015 0.016,0.013 0.018,0.013 0.019,0.012 0.019,0.011 0.021,0.012 0.021,0.01 0.022,0.009 0.023,0.009 0.024,0.009"
|
||||||
|
id="path48"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 2.7759791,1.7874896 -1.109,0.040159 0.008,0.020594 0.009,0.019565 0.013,0.020594 0.015,0.020595 0.018,0.019565 0.021,0.018535 0.023,0.018535 0.025,0.018535 0.029,0.018535 0.031,0.017505 0.032,0.015446 0.036,0.016475 0.037,0.015446 0.039,0.015446 0.042,0.013386 0.043,0.013386 0.045,0.011327 0.047,0.012357 0.048,0.010297 0.049,0.00927 0.051,0.00927 0.052,0.00824 0.053,0.00618 0.053,0.00618 0.055,0.00515 0.055,0.00412 0.056,0.00206 0.055,0.00206 0.057,0.00103 0.055,0 0.057,-0.00103 0.055,-0.00309 0.055,-0.00309 0.055,-0.00515 0.054,-0.00515 0.053,-0.00618 0.052,-0.00721 0.052,-0.00824 0.05,-0.010297 0.049,-0.00927 0.047,-0.011327 0.046,-0.011327 0.044,-0.013386 0.042,-0.014416 0.04,-0.013386 0.039,-0.015446 0.036,-0.015446 0.034,-0.016476 0.031,-0.016476 0.03,-0.017505 0.027,-0.019565 0.025,-0.017505 0.022,-0.019565 0.018,-0.018535 -1.056,-0.1307748"
|
||||||
|
id="path50"
|
||||||
|
style="fill:#ffffff;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 1.6669791,1.8393194 0.008,0.019 0.01,0.02 0.012,0.02 0.016,0.019 0.017,0.019 0.021,0.018 0.023,0.018 0.025,0.019 0.03,0.017 0.03,0.017 0.032,0.015 0.036,0.016 0.037,0.015 0.039,0.015 0.042,0.013 0.044,0.013 0.043,0.011 0.048,0.012 0.047,0.01 0.049,0.009 0.051,0.009 0.052,0.008 0.053,0.006 0.053,0.005 0.055,0.006 0.054,0.003 0.056,0.003 0.056,0.002 0.056,10e-4 0.056,0 0.056,-10e-4 0.055,-0.003 0.055,-0.003 0.055,-0.005 0.054,-0.005 0.054,-0.006 0.051,-0.007 0.052,-0.008 0.05,-0.009 0.048,-0.01 0.048,-0.011 0.046,-0.011 0.043,-0.013 0.043,-0.012 0.04,-0.015 0.039,-0.014 0.036,-0.016 0.034,-0.015 0.032,-0.017 0.029,-0.016 0.027,-0.018 0.024,-0.018 0.022,-0.019 0.02,-0.018"
|
||||||
|
id="path52"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
width="2.7800133"
|
||||||
|
height="0.61515152"
|
||||||
|
rx="0"
|
||||||
|
ry="0.28983101"
|
||||||
|
x="1.2692652"
|
||||||
|
y="0.80605406"
|
||||||
|
transform="matrix(0.999604,0.02812984,-0.02812984,0.999604,0,0)"
|
||||||
|
id="rect1892"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 2.5029776,1.9073766 0.023,-0.00895 0.020913,-0.00976 0.022119,-0.011947 0.021191,-0.0142 0.021284,-0.015682 0.02031,-0.017195 0.020402,-0.018676 0.020541,-0.020897 0.018455,-0.021702 0.018546,-0.023184 0.018685,-0.025405 0.016552,-0.02547 0.016691,-0.027691 0.014651,-0.029236 0.015717,-0.029204 0.013676,-0.03075 0.012702,-0.032263 0.012748,-0.033004 0.010665,-0.033809 0.010665,-0.033809 0.00863,-0.035354 0.00756,-0.035386 0.00653,-0.036158 0.00658,-0.0369 0.00445,-0.036963 0.00333,-0.036256 0.00236,-0.037768 0.00226,-0.036288 -9.319e-4,-0.036384 2.273e-4,-0.037833 -0.00205,-0.035676 -0.00413,-0.03648 L 2.883076,0.9720976 2.877836,0.9363258 2.871426,0.902003 2.863906,0.8683889 2.855226,0.8362236 2.845476,0.8040261 2.834621,0.7725371 2.82256,0.7432375 2.810453,0.7146786 2.797187,0.6875686 2.782854,0.6604265 2.768383,0.635506 2.751686,0.6120024 2.733784,0.590685 2.716948,0.569403 2.69886,0.5510511 2.679613,0.5341483 2.660319,0.517986 2.640887,0.5040454 2.620296,0.4915538 2.598453,0.4819918 2.577631,0.4732028"
|
||||||
|
id="path24-7"
|
||||||
|
style="fill:none;stroke:#6c8f93;stroke-width:0.107496;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
id="path2057-3"
|
||||||
|
d="M 1.5298421,1.2403194 H 2.3548856 V 1.303797 L 2.577141,1.1602384 2.3548856,1.0313279 v 0.064457 H 1.5298421 v 0.1445348"
|
||||||
|
style="fill:#6c8f93;fill-opacity:1;stroke:none;stroke-width:5.35746e-05;stroke-opacity:0.994961" />
|
||||||
|
<path
|
||||||
|
id="path2057-3-9"
|
||||||
|
d="M 3.1225773,1.2403194 H 3.9476208 V 1.303797 L 4.1698762,1.1602384 3.9476208,1.0313279 v 0.064457 H 3.1225773 v 0.1445348"
|
||||||
|
style="fill:#6c8f93;fill-opacity:1;stroke:none;stroke-width:5.35746e-05;stroke-opacity:0.994961" />
|
||||||
|
<path
|
||||||
|
id="path2057-3-5"
|
||||||
|
d="m 1.5278616,0.86827348 h 0.8319275 v 0.063478 L 2.5838989,0.78819244 2.3597891,0.65928186 v 0.064457 H 1.5278616 v 0.14453482"
|
||||||
|
style="fill:#6c8f93;fill-opacity:1;stroke:none;stroke-width:5.37977e-05;stroke-opacity:0.994961" />
|
||||||
|
<path
|
||||||
|
id="path2057-3-6"
|
||||||
|
d="m 1.527029,1.6225499 h 0.8217599 v 0.063478 L 2.5701597,1.5424689 2.3487889,1.4135585 v 0.064457 H 1.5270291 v 0.1445347"
|
||||||
|
style="fill:#6c8f93;fill-opacity:1;stroke:none;stroke-width:5.34679e-05;stroke-opacity:0.994961" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 30 KiB |
@ -60,7 +60,7 @@ def parse_version(version):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
release_type_found = False
|
release_type_found = False
|
||||||
version_infos = re.split('(\.|[a-z]+)', version)
|
version_infos = re.split(r'(\.|[a-z]+)', version)
|
||||||
version = []
|
version = []
|
||||||
for info in version_infos:
|
for info in version_infos:
|
||||||
if info == '.' or len(info) == 0:
|
if info == '.' or len(info) == 0:
|
||||||
|
@ -53,7 +53,6 @@ def list_images(emulator_type):
|
|||||||
directory = os.path.normpath(directory)
|
directory = os.path.normpath(directory)
|
||||||
for root, _, filenames in _os_walk(directory, recurse=recurse):
|
for root, _, filenames in _os_walk(directory, recurse=recurse):
|
||||||
for filename in filenames:
|
for filename in filenames:
|
||||||
path = os.path.join(root, filename)
|
|
||||||
if filename not in files:
|
if filename not in files:
|
||||||
if filename.endswith(".md5sum") or filename.startswith("."):
|
if filename.endswith(".md5sum") or filename.startswith("."):
|
||||||
continue
|
continue
|
||||||
@ -73,8 +72,9 @@ def list_images(emulator_type):
|
|||||||
with open(os.path.join(root, filename), "rb") as f:
|
with open(os.path.join(root, filename), "rb") as f:
|
||||||
# read the first 7 bytes of the file.
|
# read the first 7 bytes of the file.
|
||||||
elf_header_start = f.read(7)
|
elf_header_start = f.read(7)
|
||||||
# valid IOS images must start with the ELF magic number, be 32-bit, big endian and have an ELF version of 1
|
# valid IOU or IOS images must start with the ELF magic number, be 32-bit or 64-bit,
|
||||||
if not elf_header_start == b'\x7fELF\x01\x02\x01' and not elf_header_start == b'\x7fELF\x01\x01\x01':
|
# little endian and have an ELF version of 1
|
||||||
|
if elf_header_start != b'\x7fELF\x02\x01\x01' and elf_header_start != b'\x7fELF\x01\x01\x01':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
images.append({
|
images.append({
|
||||||
|
@ -46,7 +46,7 @@ def _get_windows_interfaces_from_registry():
|
|||||||
hkeycard = winreg.OpenKey(hkey, network_card_id)
|
hkeycard = winreg.OpenKey(hkey, network_card_id)
|
||||||
guid, _ = winreg.QueryValueEx(hkeycard, "ServiceName")
|
guid, _ = winreg.QueryValueEx(hkeycard, "ServiceName")
|
||||||
netcard, _ = winreg.QueryValueEx(hkeycard, "Description")
|
netcard, _ = winreg.QueryValueEx(hkeycard, "Description")
|
||||||
connection = r"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}" + "\{}\Connection".format(guid)
|
connection = r"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}" + r"\{}\Connection".format(guid)
|
||||||
hkeycon = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, connection)
|
hkeycon = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, connection)
|
||||||
name, _ = winreg.QueryValueEx(hkeycon, "Name")
|
name, _ = winreg.QueryValueEx(hkeycon, "Name")
|
||||||
interface = r"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{}".format(guid)
|
interface = r"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{}".format(guid)
|
||||||
@ -92,7 +92,7 @@ def get_windows_interfaces():
|
|||||||
interfaces = []
|
interfaces = []
|
||||||
try:
|
try:
|
||||||
locator = win32com.client.Dispatch("WbemScripting.SWbemLocator")
|
locator = win32com.client.Dispatch("WbemScripting.SWbemLocator")
|
||||||
service = locator.ConnectServer(".", "root\cimv2")
|
service = locator.ConnectServer(".", r"root\cimv2")
|
||||||
network_configs = service.InstancesOf("Win32_NetworkAdapterConfiguration")
|
network_configs = service.InstancesOf("Win32_NetworkAdapterConfiguration")
|
||||||
# more info on Win32_NetworkAdapter: http://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx
|
# more info on Win32_NetworkAdapter: http://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx
|
||||||
for adapter in service.InstancesOf("Win32_NetworkAdapter"):
|
for adapter in service.InstancesOf("Win32_NetworkAdapter"):
|
||||||
|
@ -23,8 +23,8 @@
|
|||||||
# or negative for a release candidate or beta (after the base version
|
# or negative for a release candidate or beta (after the base version
|
||||||
# number has been incremented)
|
# number has been incremented)
|
||||||
|
|
||||||
__version__ = "2.2.46"
|
__version__ = "2.2.47"
|
||||||
__version_info__ = (2, 2, 46, 0)
|
__version_info__ = (2, 2, 47, 0)
|
||||||
|
|
||||||
if "dev" in __version__:
|
if "dev" in __version__:
|
||||||
try:
|
try:
|
||||||
|
@ -118,7 +118,7 @@ class WebServer:
|
|||||||
|
|
||||||
if self._server:
|
if self._server:
|
||||||
self._server.close()
|
self._server.close()
|
||||||
await self._server.wait_closed()
|
# await self._server.wait_closed()
|
||||||
if self._app:
|
if self._app:
|
||||||
await self._app.shutdown()
|
await self._app.shutdown()
|
||||||
if self._handler:
|
if self._handler:
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
[pytest]
|
[pytest]
|
||||||
asyncio_mode=auto
|
asyncio_mode=auto
|
||||||
log_level=NOTSET
|
log_level=NOTSET
|
||||||
ignore=env
|
|
@ -1,15 +1,13 @@
|
|||||||
jsonschema>=4.17.3,<4.18 # v4.17.3 is the last version to support Python 3.7
|
jsonschema>=4.22.0,<4.23
|
||||||
aiohttp>=3.8.6,<3.9; python_version == '3.7' # v3.8.6 is the last version to support Python 3.7
|
aiohttp>=3.9.5,<3.10
|
||||||
aiohttp>=3.9.3,<3.10; python_version > '3.7'
|
|
||||||
aiohttp-cors>=0.7.0,<0.8
|
aiohttp-cors>=0.7.0,<0.8
|
||||||
aiofiles>=23.2.1,<23.3
|
aiofiles>=23.2.1,<23.3
|
||||||
Jinja2>=3.1.3,<3.2
|
Jinja2>=3.1.4,<3.2
|
||||||
sentry-sdk==1.39.2,<1.40
|
sentry-sdk==2.1.1,<2.2
|
||||||
psutil==5.9.8
|
psutil==5.9.8
|
||||||
async-timeout>=4.0.3,<4.1
|
async-timeout>=4.0.3,<4.1
|
||||||
distro>=1.9.0
|
distro>=1.9.0
|
||||||
py-cpuinfo>=9.0.0,<10.0
|
py-cpuinfo>=9.0.0,<10.0
|
||||||
platformdirs>=2.4.0
|
platformdirs>=2.4.0
|
||||||
importlib-resources>=1.3; python_version < '3.9'
|
importlib-resources>=1.3; python_version < '3.9'
|
||||||
truststore>=0.8.0; python_version >= '3.10'
|
truststore>=0.9.1; python_version >= '3.10'
|
||||||
setuptools>=60.8.1
|
|
||||||
|
@ -69,7 +69,8 @@ mkdir -p "$GNS3SERVER_DIR/gns3server/static/web-ui/"
|
|||||||
if [ "$CUSTOM_REPO" = false ] ; then
|
if [ "$CUSTOM_REPO" = false ] ; then
|
||||||
if [ ! -d /tmp/gns3-web-ui ]; then
|
if [ ! -d /tmp/gns3-web-ui ]; then
|
||||||
git clone https://github.com/GNS3/gns3-web-ui.git "$REPO_DIR"
|
git clone https://github.com/GNS3/gns3-web-ui.git "$REPO_DIR"
|
||||||
else
|
fi
|
||||||
|
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
|
|
||||||
git checkout 2.2
|
git checkout 2.2
|
||||||
@ -83,7 +84,6 @@ if [ "$CUSTOM_REPO" = false ] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$CURRENT_DIR"
|
cd "$CURRENT_DIR"
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Current working dir $REPO_DIR"
|
echo "Current working dir $REPO_DIR"
|
||||||
|
1
setup.py
@ -81,7 +81,6 @@ setup(
|
|||||||
"Operating System :: Microsoft :: Windows",
|
"Operating System :: Microsoft :: Windows",
|
||||||
"Programming Language :: Python",
|
"Programming Language :: Python",
|
||||||
"Programming Language :: Python :: 3 :: Only",
|
"Programming Language :: Python :: 3 :: Only",
|
||||||
"Programming Language :: Python :: 3.7",
|
|
||||||
"Programming Language :: Python :: 3.8",
|
"Programming Language :: Python :: 3.8",
|
||||||
"Programming Language :: Python :: 3.9",
|
"Programming Language :: Python :: 3.9",
|
||||||
"Programming Language :: Python :: 3.10",
|
"Programming Language :: Python :: 3.10",
|
||||||
|
@ -31,7 +31,7 @@ def nio():
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop):
|
async def manager():
|
||||||
|
|
||||||
m = MagicMock()
|
m = MagicMock()
|
||||||
m.module_name = "builtins"
|
m.module_name = "builtins"
|
||||||
@ -113,7 +113,7 @@ def test_json_without_ports(on_gns3vm, compute_project, manager):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async def test_update_port_mappings(loop, on_gns3vm, compute_project):
|
async def test_update_port_mappings(on_gns3vm, compute_project):
|
||||||
"""
|
"""
|
||||||
We don't allow an empty interface in the middle of port list
|
We don't allow an empty interface in the middle of port list
|
||||||
"""
|
"""
|
||||||
@ -153,7 +153,7 @@ async def test_update_port_mappings(loop, on_gns3vm, compute_project):
|
|||||||
assert cloud.ports_mapping == ports1
|
assert cloud.ports_mapping == ports1
|
||||||
|
|
||||||
|
|
||||||
async def test_linux_ethernet_raw_add_nio(loop, linux_platform, compute_project, nio):
|
async def test_linux_ethernet_raw_add_nio(linux_platform, compute_project, nio):
|
||||||
ports = [
|
ports = [
|
||||||
{
|
{
|
||||||
"interface": "eth0",
|
"interface": "eth0",
|
||||||
@ -180,7 +180,7 @@ async def test_linux_ethernet_raw_add_nio(loop, linux_platform, compute_project,
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
async def test_linux_ethernet_raw_add_nio_bridge(loop, linux_platform, compute_project, nio):
|
async def test_linux_ethernet_raw_add_nio_bridge(linux_platform, compute_project, nio):
|
||||||
"""
|
"""
|
||||||
Bridge can't be connected directly to a cloud we use a tap in the middle
|
Bridge can't be connected directly to a cloud we use a tap in the middle
|
||||||
"""
|
"""
|
||||||
|
@ -25,7 +25,7 @@ from gns3server.compute.docker.docker_error import DockerError, DockerHttp404Err
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def vm(loop):
|
async def vm():
|
||||||
|
|
||||||
vm = Docker()
|
vm = Docker()
|
||||||
vm._connected = True
|
vm._connected = True
|
||||||
@ -238,7 +238,7 @@ async def test_install_busybox_dynamic_linked():
|
|||||||
with pytest.raises(DockerError) as e:
|
with pytest.raises(DockerError) as e:
|
||||||
dst_dir = Docker.resources_path()
|
dst_dir = Docker.resources_path()
|
||||||
await Docker.install_busybox(dst_dir)
|
await Docker.install_busybox(dst_dir)
|
||||||
assert str(e.value) == "No busybox executable could be found"
|
assert str(e.value) == "No busybox executable could be found, please install busybox (apt install busybox-static on Debian/Ubuntu) and make sure it is in your PATH"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@ -249,4 +249,4 @@ async def test_install_busybox_no_executables():
|
|||||||
with pytest.raises(DockerError) as e:
|
with pytest.raises(DockerError) as e:
|
||||||
dst_dir = Docker.resources_path()
|
dst_dir = Docker.resources_path()
|
||||||
await Docker.install_busybox(dst_dir)
|
await Docker.install_busybox(dst_dir)
|
||||||
assert str(e.value) == "No busybox executable could be found"
|
assert str(e.value) == "No busybox executable could be found, please install busybox (apt install busybox-static on Debian/Ubuntu) and make sure it is in your PATH"
|
||||||
|
@ -31,8 +31,11 @@ from gns3server.compute.docker import Docker
|
|||||||
from unittest.mock import patch, MagicMock, call
|
from unittest.mock import patch, MagicMock, call
|
||||||
|
|
||||||
|
|
||||||
|
pytestmark = pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = Docker.instance()
|
m = Docker.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
@ -40,7 +43,7 @@ async def manager(loop, port_manager):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
async def vm(loop, compute_project, manager):
|
async def vm(compute_project, manager):
|
||||||
|
|
||||||
vm = DockerVM("test", str(uuid.uuid4()), compute_project, manager, "ubuntu:latest")
|
vm = DockerVM("test", str(uuid.uuid4()), compute_project, manager, "ubuntu:latest")
|
||||||
vm._cid = "e90e34656842"
|
vm._cid = "e90e34656842"
|
||||||
|
@ -29,7 +29,7 @@ from tests.utils import asyncio_patch, AsyncioMagicMock
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = Dynamips.instance()
|
m = Dynamips.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -26,7 +26,7 @@ from gns3server.config import Config
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = Dynamips.instance()
|
m = Dynamips.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -37,7 +37,7 @@ if not sys.platform.startswith("win"):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = IOU.instance()
|
m = IOU.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
@ -45,7 +45,7 @@ async def manager(loop, port_manager):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
async def vm(loop, compute_project, manager, tmpdir, fake_iou_bin, iourc_file):
|
async def vm(compute_project, manager, tmpdir, fake_iou_bin, iourc_file):
|
||||||
|
|
||||||
vm = IOUVM("test", str(uuid.uuid4()), compute_project, manager, application_id=1)
|
vm = IOUVM("test", str(uuid.uuid4()), compute_project, manager, application_id=1)
|
||||||
config = manager.config.get_section_config("IOU")
|
config = manager.config.get_section_config("IOU")
|
||||||
|
@ -66,7 +66,7 @@ def test_invalid_empty_file(tmpdir):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.skipif(qemu_img() is None, reason="qemu-img is not available")
|
@pytest.mark.skipif(qemu_img() is None, reason="qemu-img is not available")
|
||||||
async def test_rebase(loop, tmpdir):
|
async def test_rebase(tmpdir):
|
||||||
|
|
||||||
shutil.copy("tests/resources/empty8G.qcow2", str(tmpdir / "empty16G.qcow2"))
|
shutil.copy("tests/resources/empty8G.qcow2", str(tmpdir / "empty16G.qcow2"))
|
||||||
shutil.copy("tests/resources/linked.qcow2", str(tmpdir / "linked.qcow2"))
|
shutil.copy("tests/resources/linked.qcow2", str(tmpdir / "linked.qcow2"))
|
||||||
|
@ -195,6 +195,7 @@ async def test_create_image_with_not_supported_characters_by_filesystem(tmpdir,
|
|||||||
|
|
||||||
# patching os.makedirs is necessary as it depends on already mocked os.path.exists
|
# patching os.makedirs is necessary as it depends on already mocked os.path.exists
|
||||||
with asyncio_patch("asyncio.create_subprocess_exec", return_value=MagicMock()) as process, \
|
with asyncio_patch("asyncio.create_subprocess_exec", return_value=MagicMock()) as process, \
|
||||||
|
patch("gns3server.compute.qemu.Qemu._init_config_disk", return_value=MagicMock()), \
|
||||||
patch("gns3server.compute.qemu.Qemu.get_images_directory", return_value=str(tmpdir)), \
|
patch("gns3server.compute.qemu.Qemu.get_images_directory", return_value=str(tmpdir)), \
|
||||||
patch("os.path.exists", side_effect=UnicodeEncodeError('error', u"", 1, 2, 'Emulated Unicode Err')),\
|
patch("os.path.exists", side_effect=UnicodeEncodeError('error', u"", 1, 2, 'Emulated Unicode Err')),\
|
||||||
patch("os.makedirs"):
|
patch("os.makedirs"):
|
||||||
|
@ -34,7 +34,7 @@ from gns3server.compute.notification_manager import NotificationManager
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = Qemu.instance()
|
m = Qemu.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -29,7 +29,7 @@ from gns3server.compute.nios.nio_udp import NIOUDP
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = VPCS.instance()
|
m = VPCS.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -29,7 +29,7 @@ from gns3server.utils import force_unix_path
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
async def vpcs(loop, port_manager):
|
async def vpcs(port_manager):
|
||||||
|
|
||||||
VPCS._instance = None
|
VPCS._instance = None
|
||||||
vpcs = VPCS.instance()
|
vpcs = VPCS.instance()
|
||||||
@ -38,7 +38,7 @@ async def vpcs(loop, port_manager):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
async def qemu(loop, port_manager):
|
async def qemu(port_manager):
|
||||||
|
|
||||||
Qemu._instance = None
|
Qemu._instance = None
|
||||||
Qemu._init_config_disk = MagicMock() # do not create the config.img image
|
Qemu._init_config_disk = MagicMock() # do not create the config.img image
|
||||||
|
@ -33,7 +33,7 @@ from gns3server.config import Config
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = VPCS.instance()
|
m = VPCS.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -28,7 +28,7 @@ from gns3server.compute.notification_manager import NotificationManager
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = TraceNG.instance()
|
m = TraceNG.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -29,7 +29,7 @@ from tests.utils import asyncio_patch
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = VirtualBox.instance()
|
m = VirtualBox.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -25,7 +25,7 @@ from gns3server.compute.virtualbox import VirtualBox
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = VirtualBox.instance()
|
m = VirtualBox.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -21,7 +21,7 @@ from gns3server.compute.vmware import VMware
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = VMware.instance()
|
m = VMware.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -22,7 +22,7 @@ from gns3server.compute.vmware import VMware
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = VMware.instance()
|
m = VMware.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
|
@ -31,7 +31,7 @@ from gns3server.compute.notification_manager import NotificationManager
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def manager(loop, port_manager):
|
async def manager(port_manager):
|
||||||
|
|
||||||
m = VPCS.instance()
|
m = VPCS.instance()
|
||||||
m.port_manager = port_manager
|
m.port_manager = port_manager
|
||||||
@ -39,7 +39,7 @@ async def manager(loop, port_manager):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
async def vm(loop, compute_project, manager, tmpdir, ubridge_path):
|
async def vm(compute_project, manager, tmpdir, ubridge_path):
|
||||||
|
|
||||||
vm = VPCSVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager)
|
vm = VPCSVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager)
|
||||||
vm._vpcs_version = parse_version("0.9")
|
vm._vpcs_version = parse_version("0.9")
|
||||||
|
@ -24,7 +24,7 @@ sys.original_platform = sys.platform
|
|||||||
|
|
||||||
|
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
@pytest.yield_fixture(scope="session")
|
@pytest.fixture(scope="session")
|
||||||
def loop(request):
|
def loop(request):
|
||||||
"""Return an event loop and destroy it at the end of test"""
|
"""Return an event loop and destroy it at the end of test"""
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ def compute(controller):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def project(loop, tmpdir, controller):
|
async def project(tmpdir, controller):
|
||||||
|
|
||||||
return await controller.add_project(name="Test")
|
return await controller.add_project(name="Test")
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ async def test_start(gns3vm, controller):
|
|||||||
assert gns3vm.password == "world"
|
assert gns3vm.password == "world"
|
||||||
|
|
||||||
|
|
||||||
async def test_start_invalid_vm(loop, gns3vm, controller):
|
async def test_start_invalid_vm(gns3vm, controller):
|
||||||
|
|
||||||
await controller.add_compute("r1",
|
await controller.add_compute("r1",
|
||||||
name="R1",
|
name="R1",
|
||||||
@ -63,7 +63,8 @@ async def test_start_invalid_vm(loop, gns3vm, controller):
|
|||||||
host="r1.local",
|
host="r1.local",
|
||||||
port=8484,
|
port=8484,
|
||||||
user="hello",
|
user="hello",
|
||||||
password="world")
|
password="world",
|
||||||
|
connect=False)
|
||||||
|
|
||||||
gns3vm.vmname = "R2"
|
gns3vm.vmname = "R2"
|
||||||
with pytest.raises(GNS3VMError):
|
with pytest.raises(GNS3VMError):
|
||||||
|
@ -25,7 +25,7 @@ from gns3server.controller.gns3vm.virtualbox_gns3_vm import VirtualBoxGNS3VM
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def gns3vm(loop, controller):
|
async def gns3vm(controller):
|
||||||
|
|
||||||
vm = VirtualBoxGNS3VM(controller)
|
vm = VirtualBoxGNS3VM(controller)
|
||||||
vm.vmname = "GNS3 VM"
|
vm.vmname = "GNS3 VM"
|
||||||
|
@ -21,7 +21,7 @@ from gns3server.controller.gns3vm.vmware_gns3_vm import VMwareGNS3VM
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def gns3vm(loop, controller):
|
async def gns3vm(controller):
|
||||||
|
|
||||||
vm = VMwareGNS3VM(controller)
|
vm = VMwareGNS3VM(controller)
|
||||||
vm.vmname = "GNS3 VM"
|
vm.vmname = "GNS3 VM"
|
||||||
|
@ -33,7 +33,7 @@ from gns3server.utils.asyncio import aiozipstream
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def project(loop, controller):
|
async def project(controller):
|
||||||
|
|
||||||
p = Project(controller=controller, name="test")
|
p = Project(controller=controller, name="test")
|
||||||
p.dump = MagicMock()
|
p.dump = MagicMock()
|
||||||
|
@ -47,7 +47,7 @@ def dummy_gns3vm(controller, dummy_engine):
|
|||||||
return vm
|
return vm
|
||||||
|
|
||||||
|
|
||||||
async def test_list(loop, controller):
|
async def test_list(controller):
|
||||||
|
|
||||||
vm = GNS3VM(controller)
|
vm = GNS3VM(controller)
|
||||||
with asyncio_patch("gns3server.controller.gns3vm.vmware_gns3_vm.VMwareGNS3VM.list", return_value=[{"vmname": "test", "vmx_path": "test"}]):
|
with asyncio_patch("gns3server.controller.gns3vm.vmware_gns3_vm.VMwareGNS3VM.list", return_value=[{"vmname": "test", "vmx_path": "test"}]):
|
||||||
@ -60,14 +60,14 @@ async def test_list(loop, controller):
|
|||||||
await vm.list("hyperv")
|
await vm.list("hyperv")
|
||||||
|
|
||||||
|
|
||||||
async def test_json(loop, controller):
|
async def test_json(controller):
|
||||||
|
|
||||||
vm = GNS3VM(controller)
|
vm = GNS3VM(controller)
|
||||||
assert vm.__json__() == vm._settings
|
assert vm.__json__() == vm._settings
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not working well on Windows")
|
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not working well on Windows")
|
||||||
async def test_update_settings(loop, controller):
|
async def test_update_settings(controller):
|
||||||
|
|
||||||
vm = GNS3VM(controller)
|
vm = GNS3VM(controller)
|
||||||
vm.settings = {
|
vm.settings = {
|
||||||
|
@ -166,7 +166,7 @@ async def test_import_with_images(tmpdir, controller):
|
|||||||
assert os.path.exists(path), path
|
assert os.path.exists(path), path
|
||||||
|
|
||||||
|
|
||||||
async def test_import_iou_linux_no_vm(loop, linux_platform, tmpdir, controller):
|
async def test_import_iou_linux_no_vm(linux_platform, tmpdir, controller):
|
||||||
"""
|
"""
|
||||||
On non linux host IOU should be local if we don't have a GNS3 VM
|
On non linux host IOU should be local if we don't have a GNS3 VM
|
||||||
"""
|
"""
|
||||||
@ -210,7 +210,7 @@ async def test_import_iou_linux_no_vm(loop, linux_platform, tmpdir, controller):
|
|||||||
assert topo["topology"]["nodes"][0]["compute_id"] == "local"
|
assert topo["topology"]["nodes"][0]["compute_id"] == "local"
|
||||||
|
|
||||||
|
|
||||||
async def test_import_iou_linux_with_vm(loop, linux_platform, tmpdir, controller):
|
async def test_import_iou_linux_with_vm(linux_platform, tmpdir, controller):
|
||||||
"""
|
"""
|
||||||
On non linux host IOU should be vm if we have a GNS3 VM configured
|
On non linux host IOU should be vm if we have a GNS3 VM configured
|
||||||
"""
|
"""
|
||||||
@ -255,7 +255,7 @@ async def test_import_iou_linux_with_vm(loop, linux_platform, tmpdir, controller
|
|||||||
assert topo["topology"]["nodes"][0]["compute_id"] == "vm"
|
assert topo["topology"]["nodes"][0]["compute_id"] == "vm"
|
||||||
|
|
||||||
|
|
||||||
async def test_import_nat_non_linux(loop, windows_platform, tmpdir, controller):
|
async def test_import_nat_non_linux(windows_platform, tmpdir, controller):
|
||||||
"""
|
"""
|
||||||
On non linux host NAT should be moved to the GNS3 VM
|
On non linux host NAT should be moved to the GNS3 VM
|
||||||
"""
|
"""
|
||||||
@ -300,7 +300,7 @@ async def test_import_nat_non_linux(loop, windows_platform, tmpdir, controller):
|
|||||||
assert topo["topology"]["nodes"][0]["compute_id"] == "vm"
|
assert topo["topology"]["nodes"][0]["compute_id"] == "vm"
|
||||||
|
|
||||||
|
|
||||||
async def test_import_iou_non_linux(loop, windows_platform, tmpdir, controller):
|
async def test_import_iou_non_linux(windows_platform, tmpdir, controller):
|
||||||
"""
|
"""
|
||||||
On non linux host IOU should be moved to the GNS3 VM
|
On non linux host IOU should be moved to the GNS3 VM
|
||||||
"""
|
"""
|
||||||
@ -356,7 +356,7 @@ async def test_import_iou_non_linux(loop, windows_platform, tmpdir, controller):
|
|||||||
mock.assert_called_with(controller._computes["vm"], project_id, project.path, os.path.join('project-files', 'iou', topo["topology"]["nodes"][0]['node_id']))
|
mock.assert_called_with(controller._computes["vm"], project_id, project.path, os.path.join('project-files', 'iou', topo["topology"]["nodes"][0]['node_id']))
|
||||||
|
|
||||||
|
|
||||||
async def test_import_node_id(loop, linux_platform, tmpdir, controller):
|
async def test_import_node_id(linux_platform, tmpdir, controller):
|
||||||
"""
|
"""
|
||||||
When importing a node, node_id should change
|
When importing a node, node_id should change
|
||||||
"""
|
"""
|
||||||
@ -449,7 +449,7 @@ async def test_import_node_id(loop, linux_platform, tmpdir, controller):
|
|||||||
assert os.path.exists(os.path.join(project.path, "project-files", "iou", topo["topology"]["nodes"][0]["node_id"], "startup.cfg"))
|
assert os.path.exists(os.path.join(project.path, "project-files", "iou", topo["topology"]["nodes"][0]["node_id"], "startup.cfg"))
|
||||||
|
|
||||||
|
|
||||||
async def test_import_keep_compute_id(loop, windows_platform, tmpdir, controller):
|
async def test_import_keep_compute_id(windows_platform, tmpdir, controller):
|
||||||
"""
|
"""
|
||||||
On linux host IOU should be moved to the GNS3 VM
|
On linux host IOU should be moved to the GNS3 VM
|
||||||
"""
|
"""
|
||||||
|
@ -144,7 +144,7 @@ def fake_image(tmpdir):
|
|||||||
|
|
||||||
path = str(tmpdir / "7200.bin")
|
path = str(tmpdir / "7200.bin")
|
||||||
with open(path, "wb+") as f:
|
with open(path, "wb+") as f:
|
||||||
f.write(b'\x7fELF\x01\x02\x01')
|
f.write(b'\x7fELF\x01\x01\x01')
|
||||||
os.chmod(path, stat.S_IREAD)
|
os.chmod(path, stat.S_IREAD)
|
||||||
return path
|
return path
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ async def test_images(compute_api, tmpdir, fake_image, fake_file):
|
|||||||
assert response.json == [{"filename": "7200.bin",
|
assert response.json == [{"filename": "7200.bin",
|
||||||
"path": "7200.bin",
|
"path": "7200.bin",
|
||||||
"filesize": 7,
|
"filesize": 7,
|
||||||
"md5sum": "b0d5aa897d937aced5a6b1046e8f7e2e"
|
"md5sum": "e573e8f5c93c6c00783f20c7a170aa6c"
|
||||||
}]
|
}]
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ def write_config(tmpdir, settings):
|
|||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
def test_get_section_config(loop, tmpdir):
|
def test_get_section_config(tmpdir):
|
||||||
|
|
||||||
config = load_config(tmpdir, {
|
config = load_config(tmpdir, {
|
||||||
"Server": {
|
"Server": {
|
||||||
@ -63,7 +63,7 @@ def test_get_section_config(loop, tmpdir):
|
|||||||
assert dict(config.get_section_config("Server")) == {"host": "127.0.0.1"}
|
assert dict(config.get_section_config("Server")) == {"host": "127.0.0.1"}
|
||||||
|
|
||||||
|
|
||||||
def test_set_section_config(loop, tmpdir):
|
def test_set_section_config(tmpdir):
|
||||||
|
|
||||||
config = load_config(tmpdir, {
|
config = load_config(tmpdir, {
|
||||||
"Server": {
|
"Server": {
|
||||||
@ -77,7 +77,7 @@ def test_set_section_config(loop, tmpdir):
|
|||||||
assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1", "local": "true"}
|
assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1", "local": "true"}
|
||||||
|
|
||||||
|
|
||||||
def test_set(loop, tmpdir):
|
def test_set(tmpdir):
|
||||||
|
|
||||||
config = load_config(tmpdir, {
|
config = load_config(tmpdir, {
|
||||||
"Server": {
|
"Server": {
|
||||||
@ -90,7 +90,7 @@ def test_set(loop, tmpdir):
|
|||||||
assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1"}
|
assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1"}
|
||||||
|
|
||||||
|
|
||||||
def test_reload(loop, tmpdir):
|
def test_reload(tmpdir):
|
||||||
|
|
||||||
config = load_config(tmpdir, {
|
config = load_config(tmpdir, {
|
||||||
"Server": {
|
"Server": {
|
||||||
|
@ -105,5 +105,5 @@ class AsyncioBytesIO(io.BytesIO):
|
|||||||
async def write(self, data):
|
async def write(self, data):
|
||||||
return super().write(data)
|
return super().write(data)
|
||||||
|
|
||||||
async def close(self):
|
# async def close(self):
|
||||||
return super().close()
|
# return super().close()
|
||||||
|
@ -44,7 +44,7 @@ async def test_exception_wait_run_in_executor():
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")
|
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")
|
||||||
async def test_subprocess_check_output(loop, tmpdir):
|
async def test_subprocess_check_output(tmpdir):
|
||||||
|
|
||||||
path = str(tmpdir / "test")
|
path = str(tmpdir / "test")
|
||||||
result = await subprocess_check_output("echo", "-n", path)
|
result = await subprocess_check_output("echo", "-n", path)
|
||||||
|
@ -115,11 +115,11 @@ def test_remove_checksum(tmpdir):
|
|||||||
def test_list_images(tmpdir):
|
def test_list_images(tmpdir):
|
||||||
|
|
||||||
path1 = tmpdir / "images1" / "IOS" / "test1.image"
|
path1 = tmpdir / "images1" / "IOS" / "test1.image"
|
||||||
path1.write(b'\x7fELF\x01\x02\x01', ensure=True)
|
path1.write(b'\x7fELF\x01\x01\x01', ensure=True)
|
||||||
path1 = force_unix_path(str(path1))
|
path1 = force_unix_path(str(path1))
|
||||||
|
|
||||||
path2 = tmpdir / "images2" / "test2.image"
|
path2 = tmpdir / "images2" / "test2.image"
|
||||||
path2.write(b'\x7fELF\x01\x02\x01', ensure=True)
|
path2.write(b'\x7fELF\x01\x01\x01', ensure=True)
|
||||||
path2 = force_unix_path(str(path2))
|
path2 = force_unix_path(str(path2))
|
||||||
|
|
||||||
# Invalid image because not a valid elf file
|
# Invalid image because not a valid elf file
|
||||||
@ -128,7 +128,7 @@ def test_list_images(tmpdir):
|
|||||||
|
|
||||||
if sys.platform.startswith("linux"):
|
if sys.platform.startswith("linux"):
|
||||||
path3 = tmpdir / "images1" / "IOU" / "test3.bin"
|
path3 = tmpdir / "images1" / "IOU" / "test3.bin"
|
||||||
path3.write(b'\x7fELF\x01\x02\x01', ensure=True)
|
path3.write(b'\x7fELF\x02\x01\x01', ensure=True)
|
||||||
path3 = force_unix_path(str(path3))
|
path3 = force_unix_path(str(path3))
|
||||||
|
|
||||||
path4 = tmpdir / "images1" / "QEMU" / "test4.qcow2"
|
path4 = tmpdir / "images1" / "QEMU" / "test4.qcow2"
|
||||||
@ -148,13 +148,13 @@ def test_list_images(tmpdir):
|
|||||||
{
|
{
|
||||||
'filename': 'test1.image',
|
'filename': 'test1.image',
|
||||||
'filesize': 7,
|
'filesize': 7,
|
||||||
'md5sum': 'b0d5aa897d937aced5a6b1046e8f7e2e',
|
'md5sum': 'e573e8f5c93c6c00783f20c7a170aa6c',
|
||||||
'path': 'test1.image'
|
'path': 'test1.image'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'filename': 'test2.image',
|
'filename': 'test2.image',
|
||||||
'filesize': 7,
|
'filesize': 7,
|
||||||
'md5sum': 'b0d5aa897d937aced5a6b1046e8f7e2e',
|
'md5sum': 'e573e8f5c93c6c00783f20c7a170aa6c',
|
||||||
'path': str(path2)
|
'path': str(path2)
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -164,7 +164,7 @@ def test_list_images(tmpdir):
|
|||||||
{
|
{
|
||||||
'filename': 'test3.bin',
|
'filename': 'test3.bin',
|
||||||
'filesize': 7,
|
'filesize': 7,
|
||||||
'md5sum': 'b0d5aa897d937aced5a6b1046e8f7e2e',
|
'md5sum': 'c73626d23469519894d58bc98bee9655',
|
||||||
'path': 'test3.bin'
|
'path': 'test3.bin'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -39,7 +39,7 @@ def response():
|
|||||||
# assert response.status == 200
|
# assert response.status == 200
|
||||||
|
|
||||||
|
|
||||||
async def test_response_file_not_found(loop, tmpdir, response):
|
async def test_response_file_not_found(tmpdir, response):
|
||||||
|
|
||||||
filename = str(tmpdir / 'hello-not-found')
|
filename = str(tmpdir / 'hello-not-found')
|
||||||
with pytest.raises(HTTPNotFound):
|
with pytest.raises(HTTPNotFound):
|
||||||
|