gns3-server 3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gns3-server might be problematic. Click here for more details.
- gns3_server-3.0.0.dist-info/LICENSE +674 -0
- gns3_server-3.0.0.dist-info/METADATA +868 -0
- gns3_server-3.0.0.dist-info/RECORD +1251 -0
- gns3_server-3.0.0.dist-info/WHEEL +5 -0
- gns3_server-3.0.0.dist-info/entry_points.txt +3 -0
- gns3_server-3.0.0.dist-info/top_level.txt +1 -0
- gns3server/__init__.py +17 -0
- gns3server/__main__.py +20 -0
- gns3server/alembic.ini +103 -0
- gns3server/api/__init__.py +0 -0
- gns3server/api/routes/__init__.py +0 -0
- gns3server/api/routes/compute/__init__.py +267 -0
- gns3server/api/routes/compute/atm_switch_nodes.py +233 -0
- gns3server/api/routes/compute/capabilities.py +51 -0
- gns3server/api/routes/compute/cloud_nodes.py +249 -0
- gns3server/api/routes/compute/compute.py +143 -0
- gns3server/api/routes/compute/dependencies/__init__.py +0 -0
- gns3server/api/routes/compute/dependencies/authentication.py +83 -0
- gns3server/api/routes/compute/docker_nodes.py +393 -0
- gns3server/api/routes/compute/dynamips_nodes.py +367 -0
- gns3server/api/routes/compute/ethernet_hub_nodes.py +236 -0
- gns3server/api/routes/compute/ethernet_switch_nodes.py +246 -0
- gns3server/api/routes/compute/frame_relay_switch_nodes.py +240 -0
- gns3server/api/routes/compute/images.py +156 -0
- gns3server/api/routes/compute/iou_nodes.py +344 -0
- gns3server/api/routes/compute/nat_nodes.py +244 -0
- gns3server/api/routes/compute/notifications.py +88 -0
- gns3server/api/routes/compute/projects.py +243 -0
- gns3server/api/routes/compute/qemu_nodes.py +412 -0
- gns3server/api/routes/compute/virtualbox_nodes.py +377 -0
- gns3server/api/routes/compute/vmware_nodes.py +355 -0
- gns3server/api/routes/compute/vpcs_nodes.py +343 -0
- gns3server/api/routes/controller/__init__.py +147 -0
- gns3server/api/routes/controller/acl.py +268 -0
- gns3server/api/routes/controller/appliances.py +150 -0
- gns3server/api/routes/controller/computes.py +231 -0
- gns3server/api/routes/controller/controller.py +319 -0
- gns3server/api/routes/controller/dependencies/__init__.py +0 -0
- gns3server/api/routes/controller/dependencies/authentication.py +117 -0
- gns3server/api/routes/controller/dependencies/database.py +38 -0
- gns3server/api/routes/controller/dependencies/rbac.py +78 -0
- gns3server/api/routes/controller/drawings.py +131 -0
- gns3server/api/routes/controller/gns3vm.py +71 -0
- gns3server/api/routes/controller/groups.py +231 -0
- gns3server/api/routes/controller/images.py +255 -0
- gns3server/api/routes/controller/links.py +287 -0
- gns3server/api/routes/controller/nodes.py +619 -0
- gns3server/api/routes/controller/pools.py +239 -0
- gns3server/api/routes/controller/privileges.py +43 -0
- gns3server/api/routes/controller/projects.py +595 -0
- gns3server/api/routes/controller/roles.py +224 -0
- gns3server/api/routes/controller/snapshots.py +124 -0
- gns3server/api/routes/controller/symbols.py +133 -0
- gns3server/api/routes/controller/templates.py +192 -0
- gns3server/api/routes/controller/users.py +254 -0
- gns3server/api/routes/index.py +93 -0
- gns3server/api/server.py +224 -0
- gns3server/appliances/6wind-turbo-router.gns3a +47 -0
- gns3server/appliances/IPCop.gns3a +52 -0
- gns3server/appliances/a10-vthunder.gns3a +72 -0
- gns3server/appliances/aaa.gns3a +20 -0
- gns3server/appliances/alcatel-7750.gns3a +74 -0
- gns3server/appliances/almalinux.gns3a +84 -0
- gns3server/appliances/alpine-linux-virt.gns3a +59 -0
- gns3server/appliances/alpine-linux.gns3a +21 -0
- gns3server/appliances/arista-ceos.gns3a +20 -0
- gns3server/appliances/arista-veos.gns3a +577 -0
- gns3server/appliances/aruba-arubaoscx.gns3a +233 -0
- gns3server/appliances/aruba-vgw.gns3a +60 -0
- gns3server/appliances/aruba-vmc.gns3a +56 -0
- gns3server/appliances/asterfusion-vAsterNOS.gns3a +49 -0
- gns3server/appliances/asterisk.gns3a +114 -0
- gns3server/appliances/bigswitch-bigcloud-fabric.gns3a +42 -0
- gns3server/appliances/bird.gns3a +42 -0
- gns3server/appliances/bird2.gns3a +57 -0
- gns3server/appliances/brocade-vadx.gns3a +43 -0
- gns3server/appliances/brocade-vrouter.gns3a +138 -0
- gns3server/appliances/brocade-vtm.gns3a +136 -0
- gns3server/appliances/bsdrp.gns3a +117 -0
- gns3server/appliances/centos-cloud.gns3a +115 -0
- gns3server/appliances/centos7.gns3a +72 -0
- gns3server/appliances/checkpoint-gaia.gns3a +81 -0
- gns3server/appliances/chromium.gns3a +19 -0
- gns3server/appliances/cisco-1700.gns3a +39 -0
- gns3server/appliances/cisco-2600.gns3a +38 -0
- gns3server/appliances/cisco-2691.gns3a +38 -0
- gns3server/appliances/cisco-3620.gns3a +38 -0
- gns3server/appliances/cisco-3640.gns3a +38 -0
- gns3server/appliances/cisco-3660.gns3a +38 -0
- gns3server/appliances/cisco-3725.gns3a +38 -0
- gns3server/appliances/cisco-3745.gns3a +45 -0
- gns3server/appliances/cisco-7200.gns3a +92 -0
- gns3server/appliances/cisco-asa.gns3a +86 -0
- gns3server/appliances/cisco-asav.gns3a +227 -0
- gns3server/appliances/cisco-c8000v.gns3a +108 -0
- gns3server/appliances/cisco-cat9k.gns3a +58 -0
- gns3server/appliances/cisco-csr1000v.gns3a +316 -0
- gns3server/appliances/cisco-dcnm.gns3a +96 -0
- gns3server/appliances/cisco-fcnf.gns3a +71 -0
- gns3server/appliances/cisco-fmcv.gns3a +139 -0
- gns3server/appliances/cisco-fsve.gns3a +57 -0
- gns3server/appliances/cisco-ftdv.gns3a +99 -0
- gns3server/appliances/cisco-iosv.gns3a +178 -0
- gns3server/appliances/cisco-iosvl2.gns3a +95 -0
- gns3server/appliances/cisco-iosxrv.gns3a +57 -0
- gns3server/appliances/cisco-iosxrv9k.gns3a +188 -0
- gns3server/appliances/cisco-iou-l2.gns3a +84 -0
- gns3server/appliances/cisco-iou-l3.gns3a +84 -0
- gns3server/appliances/cisco-ise.gns3a +154 -0
- gns3server/appliances/cisco-ngipsv.gns3a +73 -0
- gns3server/appliances/cisco-nxosv.gns3a +56 -0
- gns3server/appliances/cisco-nxosv9k.gns3a +433 -0
- gns3server/appliances/cisco-pyats.gns3a +19 -0
- gns3server/appliances/cisco-smc.gns3a +71 -0
- gns3server/appliances/cisco-vWLC.gns3a +140 -0
- gns3server/appliances/cisco-wsav.gns3a +44 -0
- gns3server/appliances/citrix-netscaler-vpx.gns3a +72 -0
- gns3server/appliances/citrix-sd-wan.gns3a +46 -0
- gns3server/appliances/citrix-sdwan-center.gns3a +46 -0
- gns3server/appliances/clavister-netsheild.gns3a +59 -0
- gns3server/appliances/clavister-netwall.gns3a +71 -0
- gns3server/appliances/clearos.gns3a +107 -0
- gns3server/appliances/cloudrouter.gns3a +72 -0
- gns3server/appliances/coreos.gns3a +329 -0
- gns3server/appliances/cumulus-vx.gns3a +440 -0
- gns3server/appliances/danos.gns3a +57 -0
- gns3server/appliances/debian.gns3a +85 -0
- gns3server/appliances/deft-linux.gns3a +96 -0
- gns3server/appliances/dell-ftos.gns3a +71 -0
- gns3server/appliances/dns.gns3a +20 -0
- gns3server/appliances/empty-vm.gns3a +199 -0
- gns3server/appliances/endhost.gns3a +17 -0
- gns3server/appliances/exos.gns3a +51 -0
- gns3server/appliances/extreme-networks-voss.gns3a +152 -0
- gns3server/appliances/f5-bigip.gns3a +322 -0
- gns3server/appliances/f5-bigiq.gns3a +165 -0
- gns3server/appliances/fedora-cloud.gns3a +70 -0
- gns3server/appliances/firefox.gns3a +59 -0
- gns3server/appliances/fortiadc-manager.gns3a +54 -0
- gns3server/appliances/fortiadc.gns3a +502 -0
- gns3server/appliances/fortianalyzer.gns3a +519 -0
- gns3server/appliances/fortiauthenticator.gns3a +251 -0
- gns3server/appliances/forticache.gns3a +210 -0
- gns3server/appliances/fortigate.gns3a +742 -0
- gns3server/appliances/fortimail.gns3a +392 -0
- gns3server/appliances/fortimanager.gns3a +519 -0
- gns3server/appliances/fortiproxy.gns3a +83 -0
- gns3server/appliances/fortirecorder.gns3a +69 -0
- gns3server/appliances/fortisandbox.gns3a +210 -0
- gns3server/appliances/fortisiem-super_worker.gns3a +210 -0
- gns3server/appliances/fortiweb.gns3a +308 -0
- gns3server/appliances/freeRouter.gns3a +44 -0
- gns3server/appliances/freebsd.gns3a +75 -0
- gns3server/appliances/freenas.gns3a +183 -0
- gns3server/appliances/frr.gns3a +84 -0
- gns3server/appliances/haproxy.gns3a +18 -0
- gns3server/appliances/hbcd-pe.gns3a +62 -0
- gns3server/appliances/hp-vsr1001.gns3a +149 -0
- gns3server/appliances/huawei-ar1kv.gns3a +58 -0
- gns3server/appliances/huawei-ce12800.gns3a +43 -0
- gns3server/appliances/huawei-ne40e.gns3a +94 -0
- gns3server/appliances/huawei-usg6kv.gns3a +50 -0
- gns3server/appliances/innovaphone-app.gns3a +50 -0
- gns3server/appliances/innovaphone-ipva.gns3a +78 -0
- gns3server/appliances/ipfire.gns3a +181 -0
- gns3server/appliances/ipterm.gns3a +19 -0
- gns3server/appliances/ipxe.gns3a +47 -0
- gns3server/appliances/juniper-junos-space.gns3a +46 -0
- gns3server/appliances/juniper-vmx-legacy.gns3a +55 -0
- gns3server/appliances/juniper-vmx-vcp.gns3a +520 -0
- gns3server/appliances/juniper-vmx-vfp.gns3a +281 -0
- gns3server/appliances/juniper-vqfx-pfe.gns3a +71 -0
- gns3server/appliances/juniper-vqfx-re.gns3a +85 -0
- gns3server/appliances/juniper-vrr.gns3a +66 -0
- gns3server/appliances/juniper-vsrx.gns3a +332 -0
- gns3server/appliances/jupyter.gns3a +20 -0
- gns3server/appliances/jupyter27.gns3a +20 -0
- gns3server/appliances/kali-linux-cli.gns3a +18 -0
- gns3server/appliances/kali-linux.gns3a +248 -0
- gns3server/appliances/kemp-vlm.gns3a +111 -0
- gns3server/appliances/kerio-connect.gns3a +131 -0
- gns3server/appliances/kerio-control.gns3a +143 -0
- gns3server/appliances/kerio-operator.gns3a +130 -0
- gns3server/appliances/lancom-vrouter.gns3a +45 -0
- gns3server/appliances/loadbalancer_org-va.gns3a +56 -0
- gns3server/appliances/macos-install.gns3a +72 -0
- gns3server/appliances/mcjoin.gns3a +19 -0
- gns3server/appliances/microcore-linux.gns3a +72 -0
- gns3server/appliances/mikrotik-ccr1036-8g-2s+.gns3a +165 -0
- gns3server/appliances/mikrotik-ccr1072-1g-8s+.gns3a +161 -0
- gns3server/appliances/mikrotik-chr.gns3a +108 -0
- gns3server/appliances/mikrotik-crs328-24p-4s+.gns3a +173 -0
- gns3server/appliances/mikrotik-crs328-4c-20s-4s+.gns3a +189 -0
- gns3server/appliances/mikrotik-rb1100ahx4-dude-edition.gns3a +155 -0
- gns3server/appliances/mikrotik-rb2011uias.gns3a +161 -0
- gns3server/appliances/mikrotik-rb3011uias.gns3a +161 -0
- gns3server/appliances/mikrotik-rb4011igs+.gns3a +161 -0
- gns3server/appliances/mikrotik-rb450g.gns3a +155 -0
- gns3server/appliances/mikrotik-rb450gx4.gns3a +155 -0
- gns3server/appliances/mikrotik-winbox.gns3a +19 -0
- gns3server/appliances/mininet.gns3a +47 -0
- gns3server/appliances/net_toolbox.gns3a +20 -0
- gns3server/appliances/netapp-ontapsim.gns3a +185 -0
- gns3server/appliances/netem.gns3a +44 -0
- gns3server/appliances/network_automation.gns3a +19 -0
- gns3server/appliances/nixos.gns3a +52 -0
- gns3server/appliances/nokia-vsim.gns3a +47 -0
- gns3server/appliances/ntopng.gns3a +24 -0
- gns3server/appliances/onos.gns3a +19 -0
- gns3server/appliances/op5-monitor.gns3a +72 -0
- gns3server/appliances/open-media-vault.gns3a +120 -0
- gns3server/appliances/openbsd.gns3a +44 -0
- gns3server/appliances/opennac.gns3a +45 -0
- gns3server/appliances/opensuse.gns3a +47 -0
- gns3server/appliances/openvswitch-management.gns3a +21 -0
- gns3server/appliances/openvswitch.gns3a +21 -0
- gns3server/appliances/openwrt-realview.gns3a +56 -0
- gns3server/appliances/openwrt.gns3a +359 -0
- gns3server/appliances/opnsense.gns3a +122 -0
- gns3server/appliances/oracle-linux-cloud.gns3a +115 -0
- gns3server/appliances/ostinato-wireshark.gns3a +20 -0
- gns3server/appliances/ostinato.gns3a +75 -0
- gns3server/appliances/ovs-snmp.gns3a +18 -0
- gns3server/appliances/packetfence-zen.gns3a +151 -0
- gns3server/appliances/pan-vm-fw.gns3a +241 -0
- gns3server/appliances/parrot-os.gns3a +68 -0
- gns3server/appliances/pfsense.gns3a +122 -0
- gns3server/appliances/proxmox-mg.gns3a +69 -0
- gns3server/appliances/puppy-linux.gns3a +82 -0
- gns3server/appliances/python-go-perl-php.gns3a +17 -0
- gns3server/appliances/raspian.gns3a +79 -0
- gns3server/appliances/reactos.gns3a +67 -0
- gns3server/appliances/rhel.gns3a +207 -0
- gns3server/appliances/riverbed-steelhead-ng-vcx.gns3a +68 -0
- gns3server/appliances/rockylinux.gns3a +100 -0
- gns3server/appliances/security-onion.gns3a +108 -0
- gns3server/appliances/smoothwall.gns3a +54 -0
- gns3server/appliances/sophos-iview.gns3a +66 -0
- gns3server/appliances/sophos-utm.gns3a +263 -0
- gns3server/appliances/sophos-xg.gns3a +198 -0
- gns3server/appliances/stonework.gns3a +21 -0
- gns3server/appliances/tacacs-gui.gns3a +57 -0
- gns3server/appliances/tinycore-linux.gns3a +73 -0
- gns3server/appliances/trendmicro-imsva.gns3a +54 -0
- gns3server/appliances/trendmicro-iwsva.gns3a +53 -0
- gns3server/appliances/truenas.gns3a +104 -0
- gns3server/appliances/turnkey-wordpress.gns3a +20 -0
- gns3server/appliances/ubuntu-cloud.gns3a +116 -0
- gns3server/appliances/ubuntu-docker.gns3a +20 -0
- gns3server/appliances/ubuntu-gui.gns3a +98 -0
- gns3server/appliances/untangle.gns3a +208 -0
- gns3server/appliances/viptela-edge-genericx86-64.gns3a +84 -0
- gns3server/appliances/viptela-smart-genericx86-64.gns3a +82 -0
- gns3server/appliances/viptela-vmanage-genericx86-64.gns3a +95 -0
- gns3server/appliances/vpp.gns3a +45 -0
- gns3server/appliances/vrin.gns3a +118 -0
- gns3server/appliances/vyos.gns3a +179 -0
- gns3server/appliances/watchguard-fireboxv.gns3a +45 -0
- gns3server/appliances/watchguard-xtmv.gns3a +45 -0
- gns3server/appliances/webterm.gns3a +20 -0
- gns3server/appliances/windows-11-dev-env.gns3a +74 -0
- gns3server/appliances/windows-xp+ie.gns3a +52 -0
- gns3server/appliances/windows.gns3a +125 -0
- gns3server/appliances/windows_server.gns3a +83 -0
- gns3server/appliances/zentyal-server.gns3a +159 -0
- gns3server/appliances/zeroshell.gns3a +103 -0
- gns3server/compute/__init__.py +38 -0
- gns3server/compute/adapters/__init__.py +0 -0
- gns3server/compute/adapters/adapter.py +104 -0
- gns3server/compute/adapters/ethernet_adapter.py +33 -0
- gns3server/compute/adapters/serial_adapter.py +32 -0
- gns3server/compute/base_manager.py +547 -0
- gns3server/compute/base_node.py +979 -0
- gns3server/compute/builtin/__init__.py +46 -0
- gns3server/compute/builtin/builtin_node_factory.py +42 -0
- gns3server/compute/builtin/nodes/__init__.py +0 -0
- gns3server/compute/builtin/nodes/cloud.py +548 -0
- gns3server/compute/builtin/nodes/ethernet_hub.py +104 -0
- gns3server/compute/builtin/nodes/ethernet_switch.py +104 -0
- gns3server/compute/builtin/nodes/nat.py +97 -0
- gns3server/compute/compute_error.py +48 -0
- gns3server/compute/docker/__init__.py +320 -0
- gns3server/compute/docker/docker_error.py +33 -0
- gns3server/compute/docker/docker_vm.py +1378 -0
- gns3server/compute/docker/resources/bin/udhcpc +15 -0
- gns3server/compute/docker/resources/etc/udhcpc/default.script +138 -0
- gns3server/compute/docker/resources/init.sh +102 -0
- gns3server/compute/docker/resources/run-cmd.sh +6 -0
- gns3server/compute/dynamips/__init__.py +661 -0
- gns3server/compute/dynamips/adapters/__init__.py +0 -0
- gns3server/compute/dynamips/adapters/adapter.py +165 -0
- gns3server/compute/dynamips/adapters/c1700_mb_1fe.py +36 -0
- gns3server/compute/dynamips/adapters/c1700_mb_wic1.py +37 -0
- gns3server/compute/dynamips/adapters/c2600_mb_1e.py +36 -0
- gns3server/compute/dynamips/adapters/c2600_mb_1fe.py +37 -0
- gns3server/compute/dynamips/adapters/c2600_mb_2e.py +36 -0
- gns3server/compute/dynamips/adapters/c2600_mb_2fe.py +36 -0
- gns3server/compute/dynamips/adapters/c7200_io_2fe.py +36 -0
- gns3server/compute/dynamips/adapters/c7200_io_fe.py +36 -0
- gns3server/compute/dynamips/adapters/c7200_io_ge_e.py +36 -0
- gns3server/compute/dynamips/adapters/gt96100_fe.py +31 -0
- gns3server/compute/dynamips/adapters/leopard_2fe.py +37 -0
- gns3server/compute/dynamips/adapters/nm_16esw.py +32 -0
- gns3server/compute/dynamips/adapters/nm_1e.py +32 -0
- gns3server/compute/dynamips/adapters/nm_1fe_tx.py +32 -0
- gns3server/compute/dynamips/adapters/nm_4e.py +32 -0
- gns3server/compute/dynamips/adapters/nm_4t.py +32 -0
- gns3server/compute/dynamips/adapters/pa_2fe_tx.py +32 -0
- gns3server/compute/dynamips/adapters/pa_4e.py +32 -0
- gns3server/compute/dynamips/adapters/pa_4t.py +32 -0
- gns3server/compute/dynamips/adapters/pa_8e.py +32 -0
- gns3server/compute/dynamips/adapters/pa_8t.py +32 -0
- gns3server/compute/dynamips/adapters/pa_a1.py +32 -0
- gns3server/compute/dynamips/adapters/pa_fe_tx.py +32 -0
- gns3server/compute/dynamips/adapters/pa_ge.py +32 -0
- gns3server/compute/dynamips/adapters/pa_pos_oc3.py +32 -0
- gns3server/compute/dynamips/adapters/wic_1enet.py +40 -0
- gns3server/compute/dynamips/adapters/wic_1t.py +40 -0
- gns3server/compute/dynamips/adapters/wic_2t.py +40 -0
- gns3server/compute/dynamips/dynamips_error.py +26 -0
- gns3server/compute/dynamips/dynamips_factory.py +71 -0
- gns3server/compute/dynamips/dynamips_hypervisor.py +333 -0
- gns3server/compute/dynamips/hypervisor.py +210 -0
- gns3server/compute/dynamips/nios/__init__.py +0 -0
- gns3server/compute/dynamips/nios/nio.py +352 -0
- gns3server/compute/dynamips/nios/nio_generic_ethernet.py +73 -0
- gns3server/compute/dynamips/nios/nio_linux_ethernet.py +72 -0
- gns3server/compute/dynamips/nios/nio_null.py +51 -0
- gns3server/compute/dynamips/nios/nio_tap.py +66 -0
- gns3server/compute/dynamips/nios/nio_udp.py +136 -0
- gns3server/compute/dynamips/nios/nio_unix.py +88 -0
- gns3server/compute/dynamips/nios/nio_vde.py +88 -0
- gns3server/compute/dynamips/nodes/__init__.py +0 -0
- gns3server/compute/dynamips/nodes/atm_switch.py +514 -0
- gns3server/compute/dynamips/nodes/bridge.py +107 -0
- gns3server/compute/dynamips/nodes/c1700.py +160 -0
- gns3server/compute/dynamips/nodes/c2600.py +171 -0
- gns3server/compute/dynamips/nodes/c2691.py +112 -0
- gns3server/compute/dynamips/nodes/c3600.py +155 -0
- gns3server/compute/dynamips/nodes/c3725.py +112 -0
- gns3server/compute/dynamips/nodes/c3745.py +112 -0
- gns3server/compute/dynamips/nodes/c7200.py +268 -0
- gns3server/compute/dynamips/nodes/device.py +134 -0
- gns3server/compute/dynamips/nodes/ethernet_hub.py +241 -0
- gns3server/compute/dynamips/nodes/ethernet_switch.py +496 -0
- gns3server/compute/dynamips/nodes/frame_relay_switch.py +379 -0
- gns3server/compute/dynamips/nodes/router.py +1797 -0
- gns3server/compute/error.py +40 -0
- gns3server/compute/iou/__init__.py +64 -0
- gns3server/compute/iou/iou_error.py +25 -0
- gns3server/compute/iou/iou_vm.py +1482 -0
- gns3server/compute/iou/utils/__init__.py +0 -0
- gns3server/compute/iou/utils/iou_export.py +233 -0
- gns3server/compute/iou/utils/iou_import.py +232 -0
- gns3server/compute/nios/__init__.py +0 -0
- gns3server/compute/nios/nio.py +120 -0
- gns3server/compute/nios/nio_ethernet.py +56 -0
- gns3server/compute/nios/nio_tap.py +56 -0
- gns3server/compute/nios/nio_udp.py +82 -0
- gns3server/compute/notification_manager.py +73 -0
- gns3server/compute/port_manager.py +402 -0
- gns3server/compute/project.py +434 -0
- gns3server/compute/project_manager.py +122 -0
- gns3server/compute/qemu/__init__.py +304 -0
- gns3server/compute/qemu/qemu_error.py +26 -0
- gns3server/compute/qemu/qemu_vm.py +2697 -0
- gns3server/compute/qemu/resources/config.img.zip +0 -0
- gns3server/compute/qemu/utils/__init__.py +0 -0
- gns3server/compute/qemu/utils/guest_cid.py +38 -0
- gns3server/compute/qemu/utils/qcow2.py +138 -0
- gns3server/compute/qemu/utils/ziputils.py +55 -0
- gns3server/compute/ubridge/__init__.py +0 -0
- gns3server/compute/ubridge/hypervisor.py +256 -0
- gns3server/compute/ubridge/ubridge_error.py +32 -0
- gns3server/compute/ubridge/ubridge_hypervisor.py +285 -0
- gns3server/compute/virtualbox/__init__.py +212 -0
- gns3server/compute/virtualbox/virtualbox_error.py +26 -0
- gns3server/compute/virtualbox/virtualbox_vm.py +1255 -0
- gns3server/compute/vmware/__init__.py +725 -0
- gns3server/compute/vmware/vmware_error.py +26 -0
- gns3server/compute/vmware/vmware_vm.py +1007 -0
- gns3server/compute/vpcs/__init__.py +91 -0
- gns3server/compute/vpcs/vpcs_error.py +26 -0
- gns3server/compute/vpcs/vpcs_vm.py +595 -0
- gns3server/config.py +284 -0
- gns3server/config_samples/gns3_server.conf +160 -0
- gns3server/configs/ios_base_startup-config.txt +26 -0
- gns3server/configs/ios_etherswitch_startup-config.txt +181 -0
- gns3server/configs/iou_l2_base_startup-config.txt +133 -0
- gns3server/configs/iou_l3_base_startup-config.txt +109 -0
- gns3server/configs/vpcs_base_config.txt +9 -0
- gns3server/controller/__init__.py +691 -0
- gns3server/controller/appliance.py +86 -0
- gns3server/controller/appliance_manager.py +486 -0
- gns3server/controller/appliance_to_template.py +132 -0
- gns3server/controller/compute.py +677 -0
- gns3server/controller/controller_error.py +77 -0
- gns3server/controller/drawing.py +229 -0
- gns3server/controller/export_project.py +336 -0
- gns3server/controller/gns3vm/__init__.py +412 -0
- gns3server/controller/gns3vm/base_gns3_vm.py +303 -0
- gns3server/controller/gns3vm/gns3_vm_error.py +28 -0
- gns3server/controller/gns3vm/hyperv_gns3_vm.py +346 -0
- gns3server/controller/gns3vm/remote_gns3_vm.py +73 -0
- gns3server/controller/gns3vm/virtualbox_gns3_vm.py +480 -0
- gns3server/controller/gns3vm/vmware_gns3_vm.py +216 -0
- gns3server/controller/import_project.py +332 -0
- gns3server/controller/link.py +461 -0
- gns3server/controller/node.py +840 -0
- gns3server/controller/notification.py +149 -0
- gns3server/controller/ports/__init__.py +0 -0
- gns3server/controller/ports/atm_port.py +51 -0
- gns3server/controller/ports/ethernet_port.py +49 -0
- gns3server/controller/ports/fastethernet_port.py +43 -0
- gns3server/controller/ports/frame_relay_port.py +43 -0
- gns3server/controller/ports/gigabitethernet_port.py +43 -0
- gns3server/controller/ports/port.py +109 -0
- gns3server/controller/ports/port_factory.py +213 -0
- gns3server/controller/ports/pos_port.py +52 -0
- gns3server/controller/ports/serial_port.py +63 -0
- gns3server/controller/project.py +1399 -0
- gns3server/controller/snapshot.py +140 -0
- gns3server/controller/symbol_themes.py +153 -0
- gns3server/controller/symbols.py +168 -0
- gns3server/controller/topology.py +788 -0
- gns3server/controller/udp_link.py +245 -0
- gns3server/core/__init__.py +0 -0
- gns3server/core/tasks.py +99 -0
- gns3server/crash_report.py +167 -0
- gns3server/db/__init__.py +0 -0
- gns3server/db/models/__init__.py +38 -0
- gns3server/db/models/acl.py +46 -0
- gns3server/db/models/base.py +117 -0
- gns3server/db/models/computes.py +33 -0
- gns3server/db/models/images.py +43 -0
- gns3server/db/models/pools.py +52 -0
- gns3server/db/models/privileges.py +359 -0
- gns3server/db/models/roles.py +57 -0
- gns3server/db/models/templates.py +272 -0
- gns3server/db/models/users.py +94 -0
- gns3server/db/repositories/__init__.py +0 -0
- gns3server/db/repositories/base.py +24 -0
- gns3server/db/repositories/computes.py +93 -0
- gns3server/db/repositories/images.py +141 -0
- gns3server/db/repositories/pools.py +218 -0
- gns3server/db/repositories/rbac.py +430 -0
- gns3server/db/repositories/templates.py +172 -0
- gns3server/db/repositories/users.py +289 -0
- gns3server/db/tasks.py +230 -0
- gns3server/db_migrations/README +5 -0
- gns3server/db_migrations/env.py +101 -0
- gns3server/db_migrations/script.py.mako +24 -0
- gns3server/db_migrations/versions/7ceeddd9c9a8_init.py +28 -0
- gns3server/db_migrations/versions/9a5292aa4389_add_mac_address_field_in_docker_.py +27 -0
- gns3server/disks/OVMF.fd +0 -0
- gns3server/disks/OVMF_CODE.fd +0 -0
- gns3server/disks/OVMF_VARS.fd +0 -0
- gns3server/disks/empty100G.qcow2 +0 -0
- gns3server/disks/empty10G.qcow2 +0 -0
- gns3server/disks/empty150G.qcow2 +0 -0
- gns3server/disks/empty1T.qcow2 +0 -0
- gns3server/disks/empty200G.qcow2 +0 -0
- gns3server/disks/empty20G.qcow2 +0 -0
- gns3server/disks/empty250G.qcow2 +0 -0
- gns3server/disks/empty30G.qcow2 +0 -0
- gns3server/disks/empty40G.qcow2 +0 -0
- gns3server/disks/empty500G.qcow2 +0 -0
- gns3server/disks/empty50G.qcow2 +0 -0
- gns3server/disks/empty8G.qcow2 +0 -0
- gns3server/gns3_server.egg-info/PKG-INFO +307 -0
- gns3server/gns3_server.egg-info/SOURCES.txt +0 -0
- gns3server/gns3_server.egg-info/dependency_links.txt +1 -0
- gns3server/gns3_server.egg-info/entry_points.txt +4 -0
- gns3server/gns3_server.egg-info/not-zip-safe +1 -0
- gns3server/gns3_server.egg-info/requires.txt +31 -0
- gns3server/gns3_server.egg-info/top_level.txt +2 -0
- gns3server/logger.py +164 -0
- gns3server/main.py +81 -0
- gns3server/schemas/__init__.py +85 -0
- gns3server/schemas/common.py +71 -0
- gns3server/schemas/compute/__init__.py +0 -0
- gns3server/schemas/compute/atm_switch_nodes.py +55 -0
- gns3server/schemas/compute/cloud_nodes.py +137 -0
- gns3server/schemas/compute/docker_nodes.py +75 -0
- gns3server/schemas/compute/dynamips_nodes.py +197 -0
- gns3server/schemas/compute/ethernet_hub_nodes.py +63 -0
- gns3server/schemas/compute/ethernet_switch_nodes.py +100 -0
- gns3server/schemas/compute/frame_relay_switch_nodes.py +55 -0
- gns3server/schemas/compute/iou_nodes.py +76 -0
- gns3server/schemas/compute/nat_nodes.py +122 -0
- gns3server/schemas/compute/nios.py +66 -0
- gns3server/schemas/compute/qemu_nodes.py +245 -0
- gns3server/schemas/compute/virtualbox_nodes.py +97 -0
- gns3server/schemas/compute/vmware_nodes.py +102 -0
- gns3server/schemas/compute/vpcs_nodes.py +68 -0
- gns3server/schemas/config.py +197 -0
- gns3server/schemas/controller/__init__.py +0 -0
- gns3server/schemas/controller/appliances.py +466 -0
- gns3server/schemas/controller/base.py +25 -0
- gns3server/schemas/controller/capabilities.py +34 -0
- gns3server/schemas/controller/computes.py +168 -0
- gns3server/schemas/controller/drawings.py +34 -0
- gns3server/schemas/controller/gns3vm.py +56 -0
- gns3server/schemas/controller/images.py +44 -0
- gns3server/schemas/controller/iou_license.py +23 -0
- gns3server/schemas/controller/labels.py +30 -0
- gns3server/schemas/controller/links.py +94 -0
- gns3server/schemas/controller/nodes.py +177 -0
- gns3server/schemas/controller/pools.py +81 -0
- gns3server/schemas/controller/projects.py +116 -0
- gns3server/schemas/controller/rbac.py +113 -0
- gns3server/schemas/controller/snapshots.py +42 -0
- gns3server/schemas/controller/templates/__init__.py +83 -0
- gns3server/schemas/controller/templates/cloud_templates.py +44 -0
- gns3server/schemas/controller/templates/docker_templates.py +59 -0
- gns3server/schemas/controller/templates/dynamips_templates.py +199 -0
- gns3server/schemas/controller/templates/ethernet_hub_templates.py +46 -0
- gns3server/schemas/controller/templates/ethernet_switch_templates.py +57 -0
- gns3server/schemas/controller/templates/iou_templates.py +47 -0
- gns3server/schemas/controller/templates/qemu_templates.py +94 -0
- gns3server/schemas/controller/templates/virtualbox_templates.py +64 -0
- gns3server/schemas/controller/templates/vmware_templates.py +61 -0
- gns3server/schemas/controller/templates/vpcs_templates.py +39 -0
- gns3server/schemas/controller/tokens.py +29 -0
- gns3server/schemas/controller/topology.py +82 -0
- gns3server/schemas/controller/users.py +105 -0
- gns3server/schemas/link.py +0 -0
- gns3server/schemas/qemu_disk_image.py +103 -0
- gns3server/schemas/version.py +25 -0
- gns3server/server.py +348 -0
- gns3server/services/__init__.py +19 -0
- gns3server/services/authentication.py +83 -0
- gns3server/services/computes.py +82 -0
- gns3server/services/templates.py +329 -0
- gns3server/static/.gitkeep +0 -0
- gns3server/static/favicon.ico +0 -0
- gns3server/static/redoc.standalone.js +1782 -0
- gns3server/static/swagger-ui-bundle.js +2 -0
- gns3server/static/swagger-ui.css +3 -0
- gns3server/static/web-ui/3rdpartylicenses.txt +2604 -0
- gns3server/static/web-ui/465.92c7ab880f2504d3.js +1 -0
- gns3server/static/web-ui/MaterialIcons-Regular.196fa4a92dd6fa73.ttf +0 -0
- gns3server/static/web-ui/MaterialIcons-Regular.1e50f5c2ffa6aba4.eot +0 -0
- gns3server/static/web-ui/MaterialIcons-Regular.7ea2023eeca07427.woff2 +0 -0
- gns3server/static/web-ui/MaterialIcons-Regular.db852539204b1a34.woff +0 -0
- gns3server/static/web-ui/NotoSans-Bold.635e9291df1a5a00.woff2 +0 -0
- gns3server/static/web-ui/NotoSans-Bold.885427cced6d8c94.woff +0 -0
- gns3server/static/web-ui/NotoSans-Bold.93203a43bc93ad9c.svg +8453 -0
- gns3server/static/web-ui/NotoSans-Bold.a7ab189a45f553b4.eot +0 -0
- gns3server/static/web-ui/NotoSans-Bold.e989c11744b36f58.ttf +0 -0
- gns3server/static/web-ui/NotoSans-BoldItalic.2baf33b639fc86a4.woff +0 -0
- gns3server/static/web-ui/NotoSans-BoldItalic.2eea9ba02e25c1d3.ttf +0 -0
- gns3server/static/web-ui/NotoSans-BoldItalic.46a5eec91da0d900.svg +8453 -0
- gns3server/static/web-ui/NotoSans-BoldItalic.7fdef73b477daa73.eot +0 -0
- gns3server/static/web-ui/NotoSans-BoldItalic.c62f70f121f271aa.woff2 +0 -0
- gns3server/static/web-ui/NotoSans-Italic.219ee88e5bc4e168.ttf +0 -0
- gns3server/static/web-ui/NotoSans-Italic.3d6f7cf772169c8d.svg +8453 -0
- gns3server/static/web-ui/NotoSans-Italic.77cd3818b5a2cb97.woff +0 -0
- gns3server/static/web-ui/NotoSans-Italic.85194585ae9d8c36.eot +0 -0
- gns3server/static/web-ui/NotoSans-Italic.eee02500e81db981.woff2 +0 -0
- gns3server/static/web-ui/NotoSans-Regular.156b7584192d70ed.eot +0 -0
- gns3server/static/web-ui/NotoSans-Regular.374d132a6803e279.woff2 +0 -0
- gns3server/static/web-ui/NotoSans-Regular.595e3f5876719740.woff +0 -0
- gns3server/static/web-ui/NotoSans-Regular.bb384defbe36eaec.svg +8453 -0
- gns3server/static/web-ui/NotoSans-Regular.e6139cb1663a1c57.ttf +0 -0
- gns3server/static/web-ui/ReleaseNotes.txt +179 -0
- gns3server/static/web-ui/assets/favicon.ico +0 -0
- gns3server/static/web-ui/assets/gns3_icon.svg +88 -0
- gns3server/static/web-ui/assets/gns3_icon_black.svg +88 -0
- gns3server/static/web-ui/assets/icons/mac/icon.icns +0 -0
- gns3server/static/web-ui/assets/icons/png/1024x1024.png +0 -0
- gns3server/static/web-ui/assets/icons/png/128x128.png +0 -0
- gns3server/static/web-ui/assets/icons/png/16x16.png +0 -0
- gns3server/static/web-ui/assets/icons/png/24x24.png +0 -0
- gns3server/static/web-ui/assets/icons/png/256x256.png +0 -0
- gns3server/static/web-ui/assets/icons/png/32x32.png +0 -0
- gns3server/static/web-ui/assets/icons/png/48x48.png +0 -0
- gns3server/static/web-ui/assets/icons/png/512x512.png +0 -0
- gns3server/static/web-ui/assets/icons/png/64x64.png +0 -0
- gns3server/static/web-ui/assets/icons/win/icon.ico +0 -0
- gns3server/static/web-ui/assets/logo-header.png +0 -0
- gns3server/static/web-ui/assets/resources/images/filter-capture.svg +428 -0
- gns3server/static/web-ui/assets/resources/images/filter.svg +708 -0
- gns3server/static/web-ui/assets/resources/images/inspect.svg +312 -0
- gns3server/static/web-ui/assets/resources/images/pause.svg +752 -0
- gns3server/static/web-ui/favicon.ico +0 -0
- gns3server/static/web-ui/index.html +51 -0
- gns3server/static/web-ui/main.f802edd2b8c6db1d.js +1 -0
- gns3server/static/web-ui/polyfills.319c79dd175e50d0.js +1 -0
- gns3server/static/web-ui/roboto-latin-100.539f0a96b40596f7.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-100.5ba994dac3e79ea8.woff +0 -0
- gns3server/static/web-ui/roboto-latin-100italic.41ba64219cb743c9.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-100italic.d61e7e8b07c0638c.woff +0 -0
- gns3server/static/web-ui/roboto-latin-300.4d8f8086236bad80.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-300.6c1bc461047e61f5.woff +0 -0
- gns3server/static/web-ui/roboto-latin-300italic.3a529751a590d3c1.woff +0 -0
- gns3server/static/web-ui/roboto-latin-300italic.45164643b3bd5824.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-400.1e2d4d3a272629cd.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-400.7e4a045b9373d9c1.woff +0 -0
- gns3server/static/web-ui/roboto-latin-400italic.68431199e5b90ea8.woff +0 -0
- gns3server/static/web-ui/roboto-latin-400italic.bb3c6955c4334c8a.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-500.1dfbc3dbf815e3f3.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-500.e21fe97fd2329ff7.woff +0 -0
- gns3server/static/web-ui/roboto-latin-500italic.7543a42b12b1452f.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-500italic.aaff6867154023d3.woff +0 -0
- gns3server/static/web-ui/roboto-latin-700.02633003129d1e63.woff +0 -0
- gns3server/static/web-ui/roboto-latin-700.12893bfc0762b0f3.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-700italic.bc7179e004e40113.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-700italic.e53062e27c63fafb.woff +0 -0
- gns3server/static/web-ui/roboto-latin-900.282ba77fda1349f3.woff2 +0 -0
- gns3server/static/web-ui/roboto-latin-900.4962e810cbb4d3e5.woff +0 -0
- gns3server/static/web-ui/roboto-latin-900italic.2394134a78bbaef8.woff +0 -0
- gns3server/static/web-ui/roboto-latin-900italic.9c1f80840351fa12.woff2 +0 -0
- gns3server/static/web-ui/runtime.24fa95b7061d7056.js +1 -0
- gns3server/static/web-ui/styles.6e966072487df0b7.css +5 -0
- gns3server/symbols/.gitkeep +0 -0
- gns3server/symbols/affinity/circle/blue/atm.svg +5 -0
- gns3server/symbols/affinity/circle/blue/bug.svg +8 -0
- gns3server/symbols/affinity/circle/blue/camera.svg +5 -0
- gns3server/symbols/affinity/circle/blue/camera_dome.svg +8 -0
- gns3server/symbols/affinity/circle/blue/client.svg +5 -0
- gns3server/symbols/affinity/circle/blue/client_vm.svg +6 -0
- gns3server/symbols/affinity/circle/blue/cloud.svg +5 -0
- gns3server/symbols/affinity/circle/blue/coffee.svg +6 -0
- gns3server/symbols/affinity/circle/blue/cog.svg +5 -0
- gns3server/symbols/affinity/circle/blue/communications.svg +5 -0
- gns3server/symbols/affinity/circle/blue/conversation.svg +12 -0
- gns3server/symbols/affinity/circle/blue/dna.svg +7 -0
- gns3server/symbols/affinity/circle/blue/dna2.svg +7 -0
- gns3server/symbols/affinity/circle/blue/docker.svg +11 -0
- gns3server/symbols/affinity/circle/blue/dslam.svg +5 -0
- gns3server/symbols/affinity/circle/blue/factory.svg +6 -0
- gns3server/symbols/affinity/circle/blue/fingerprint.svg +5 -0
- gns3server/symbols/affinity/circle/blue/firewall.svg +5 -0
- gns3server/symbols/affinity/circle/blue/firewall3.svg +5 -0
- gns3server/symbols/affinity/circle/blue/globe.svg +5 -0
- gns3server/symbols/affinity/circle/blue/grid.svg +5 -0
- gns3server/symbols/affinity/circle/blue/grid2.svg +5 -0
- gns3server/symbols/affinity/circle/blue/health.svg +5 -0
- gns3server/symbols/affinity/circle/blue/house.svg +9 -0
- gns3server/symbols/affinity/circle/blue/hub.svg +5 -0
- gns3server/symbols/affinity/circle/blue/inspect.svg +7 -0
- gns3server/symbols/affinity/circle/blue/inspect2.svg +6 -0
- gns3server/symbols/affinity/circle/blue/interconnect.svg +5 -0
- gns3server/symbols/affinity/circle/blue/ip_phone.svg +21 -0
- gns3server/symbols/affinity/circle/blue/isdn.svg +5 -0
- gns3server/symbols/affinity/circle/blue/laptop.svg +6 -0
- gns3server/symbols/affinity/circle/blue/ldap.svg +5 -0
- gns3server/symbols/affinity/circle/blue/light_bulb.svg +11 -0
- gns3server/symbols/affinity/circle/blue/link.svg +5 -0
- gns3server/symbols/affinity/circle/blue/loadbalancer.svg +5 -0
- gns3server/symbols/affinity/circle/blue/nas.svg +5 -0
- gns3server/symbols/affinity/circle/blue/nat.svg +60 -0
- gns3server/symbols/affinity/circle/blue/nat2.svg +55 -0
- gns3server/symbols/affinity/circle/blue/office.svg +5 -0
- gns3server/symbols/affinity/circle/blue/optical.svg +8 -0
- gns3server/symbols/affinity/circle/blue/phone_cloud.svg +6 -0
- gns3server/symbols/affinity/circle/blue/phone_old.svg +5 -0
- gns3server/symbols/affinity/circle/blue/phone_wireless.svg +8 -0
- gns3server/symbols/affinity/circle/blue/pinpoint.svg +5 -0
- gns3server/symbols/affinity/circle/blue/printer.svg +7 -0
- gns3server/symbols/affinity/circle/blue/rj45.svg +5 -0
- gns3server/symbols/affinity/circle/blue/router.svg +5 -0
- gns3server/symbols/affinity/circle/blue/router2.svg +5 -0
- gns3server/symbols/affinity/circle/blue/router_cloud.svg +6 -0
- gns3server/symbols/affinity/circle/blue/satellite.svg +6 -0
- gns3server/symbols/affinity/circle/blue/satellite_dish.svg +7 -0
- gns3server/symbols/affinity/circle/blue/scull.svg +8 -0
- gns3server/symbols/affinity/circle/blue/server.svg +5 -0
- gns3server/symbols/affinity/circle/blue/server_cluster.svg +7 -0
- gns3server/symbols/affinity/circle/blue/shield.svg +7 -0
- gns3server/symbols/affinity/circle/blue/statistics.svg +7 -0
- gns3server/symbols/affinity/circle/blue/storage.svg +5 -0
- gns3server/symbols/affinity/circle/blue/switch.svg +8 -0
- gns3server/symbols/affinity/circle/blue/switch_multilayer.svg +5 -0
- gns3server/symbols/affinity/circle/blue/tablet.svg +11 -0
- gns3server/symbols/affinity/circle/blue/template.svg +4 -0
- gns3server/symbols/affinity/circle/blue/tree.svg +5 -0
- gns3server/symbols/affinity/circle/blue/user.svg +7 -0
- gns3server/symbols/affinity/circle/blue/virtualbox.svg +7 -0
- gns3server/symbols/affinity/circle/blue/vm.svg +7 -0
- gns3server/symbols/affinity/circle/blue/vmware.svg +7 -0
- gns3server/symbols/affinity/circle/blue/vrf.svg +8 -0
- gns3server/symbols/affinity/circle/blue/wifi.svg +5 -0
- gns3server/symbols/affinity/circle/blue/wlc.svg +5 -0
- gns3server/symbols/affinity/circle/blue/xml.svg +5 -0
- gns3server/symbols/affinity/circle/gray/atm.svg +5 -0
- gns3server/symbols/affinity/circle/gray/bug.svg +8 -0
- gns3server/symbols/affinity/circle/gray/camera.svg +5 -0
- gns3server/symbols/affinity/circle/gray/camera_dome.svg +8 -0
- gns3server/symbols/affinity/circle/gray/client.svg +5 -0
- gns3server/symbols/affinity/circle/gray/client_vm.svg +6 -0
- gns3server/symbols/affinity/circle/gray/cloud.svg +5 -0
- gns3server/symbols/affinity/circle/gray/coffee.svg +6 -0
- gns3server/symbols/affinity/circle/gray/cog.svg +5 -0
- gns3server/symbols/affinity/circle/gray/communications.svg +5 -0
- gns3server/symbols/affinity/circle/gray/conversation.svg +12 -0
- gns3server/symbols/affinity/circle/gray/dna.svg +7 -0
- gns3server/symbols/affinity/circle/gray/dna2.svg +7 -0
- gns3server/symbols/affinity/circle/gray/docker.svg +11 -0
- gns3server/symbols/affinity/circle/gray/dslam.svg +5 -0
- gns3server/symbols/affinity/circle/gray/factory.svg +7 -0
- gns3server/symbols/affinity/circle/gray/fingerprint.svg +5 -0
- gns3server/symbols/affinity/circle/gray/firewall.svg +5 -0
- gns3server/symbols/affinity/circle/gray/firewall3.svg +5 -0
- gns3server/symbols/affinity/circle/gray/globe.svg +5 -0
- gns3server/symbols/affinity/circle/gray/grid.svg +5 -0
- gns3server/symbols/affinity/circle/gray/grid2.svg +5 -0
- gns3server/symbols/affinity/circle/gray/health.svg +5 -0
- gns3server/symbols/affinity/circle/gray/house.svg +9 -0
- gns3server/symbols/affinity/circle/gray/hub.svg +5 -0
- gns3server/symbols/affinity/circle/gray/inspect.svg +7 -0
- gns3server/symbols/affinity/circle/gray/inspect2.svg +6 -0
- gns3server/symbols/affinity/circle/gray/interconnect.svg +5 -0
- gns3server/symbols/affinity/circle/gray/ip_phone.svg +21 -0
- gns3server/symbols/affinity/circle/gray/isdn.svg +5 -0
- gns3server/symbols/affinity/circle/gray/laptop.svg +6 -0
- gns3server/symbols/affinity/circle/gray/ldap.svg +5 -0
- gns3server/symbols/affinity/circle/gray/light_bulb.svg +11 -0
- gns3server/symbols/affinity/circle/gray/link.svg +5 -0
- gns3server/symbols/affinity/circle/gray/loadbalancer.svg +5 -0
- gns3server/symbols/affinity/circle/gray/nas.svg +5 -0
- gns3server/symbols/affinity/circle/gray/nat.svg +60 -0
- gns3server/symbols/affinity/circle/gray/nat2.svg +55 -0
- gns3server/symbols/affinity/circle/gray/office.svg +5 -0
- gns3server/symbols/affinity/circle/gray/optical.svg +8 -0
- gns3server/symbols/affinity/circle/gray/phone_cloud.svg +6 -0
- gns3server/symbols/affinity/circle/gray/phone_old.svg +5 -0
- gns3server/symbols/affinity/circle/gray/phone_wireless.svg +8 -0
- gns3server/symbols/affinity/circle/gray/pinpoint.svg +5 -0
- gns3server/symbols/affinity/circle/gray/printer.svg +25 -0
- gns3server/symbols/affinity/circle/gray/rj45.svg +5 -0
- gns3server/symbols/affinity/circle/gray/router.svg +5 -0
- gns3server/symbols/affinity/circle/gray/router2.svg +5 -0
- gns3server/symbols/affinity/circle/gray/router_cloud.svg +6 -0
- gns3server/symbols/affinity/circle/gray/satellite.svg +6 -0
- gns3server/symbols/affinity/circle/gray/satellite_dish.svg +7 -0
- gns3server/symbols/affinity/circle/gray/scull.svg +8 -0
- gns3server/symbols/affinity/circle/gray/server.svg +5 -0
- gns3server/symbols/affinity/circle/gray/server_cluster.svg +7 -0
- gns3server/symbols/affinity/circle/gray/shield.svg +7 -0
- gns3server/symbols/affinity/circle/gray/statistics.svg +7 -0
- gns3server/symbols/affinity/circle/gray/storage.svg +5 -0
- gns3server/symbols/affinity/circle/gray/switch.svg +8 -0
- gns3server/symbols/affinity/circle/gray/switch_multilayer.svg +5 -0
- gns3server/symbols/affinity/circle/gray/tablet.svg +11 -0
- gns3server/symbols/affinity/circle/gray/template.svg +4 -0
- gns3server/symbols/affinity/circle/gray/tree.svg +5 -0
- gns3server/symbols/affinity/circle/gray/user.svg +7 -0
- gns3server/symbols/affinity/circle/gray/virtualbox.svg +7 -0
- gns3server/symbols/affinity/circle/gray/vm.svg +7 -0
- gns3server/symbols/affinity/circle/gray/vmware.svg +7 -0
- gns3server/symbols/affinity/circle/gray/vrf.svg +8 -0
- gns3server/symbols/affinity/circle/gray/wifi.svg +5 -0
- gns3server/symbols/affinity/circle/gray/wlc.svg +5 -0
- gns3server/symbols/affinity/circle/gray/xml.svg +5 -0
- gns3server/symbols/affinity/circle/green/atm.svg +5 -0
- gns3server/symbols/affinity/circle/green/bug.svg +8 -0
- gns3server/symbols/affinity/circle/green/camera.svg +5 -0
- gns3server/symbols/affinity/circle/green/camera_dome.svg +8 -0
- gns3server/symbols/affinity/circle/green/client.svg +5 -0
- gns3server/symbols/affinity/circle/green/client_vm.svg +6 -0
- gns3server/symbols/affinity/circle/green/cloud.svg +5 -0
- gns3server/symbols/affinity/circle/green/coffee.svg +6 -0
- gns3server/symbols/affinity/circle/green/cog.svg +5 -0
- gns3server/symbols/affinity/circle/green/communications.svg +5 -0
- gns3server/symbols/affinity/circle/green/conversation.svg +12 -0
- gns3server/symbols/affinity/circle/green/dna.svg +7 -0
- gns3server/symbols/affinity/circle/green/dna2.svg +7 -0
- gns3server/symbols/affinity/circle/green/docker.svg +11 -0
- gns3server/symbols/affinity/circle/green/dslam.svg +5 -0
- gns3server/symbols/affinity/circle/green/factory.svg +6 -0
- gns3server/symbols/affinity/circle/green/fingerprint.svg +5 -0
- gns3server/symbols/affinity/circle/green/firewall.svg +5 -0
- gns3server/symbols/affinity/circle/green/firewall3.svg +5 -0
- gns3server/symbols/affinity/circle/green/globe.svg +5 -0
- gns3server/symbols/affinity/circle/green/grid.svg +5 -0
- gns3server/symbols/affinity/circle/green/grid2.svg +5 -0
- gns3server/symbols/affinity/circle/green/health.svg +5 -0
- gns3server/symbols/affinity/circle/green/house.svg +9 -0
- gns3server/symbols/affinity/circle/green/hub.svg +5 -0
- gns3server/symbols/affinity/circle/green/inspect.svg +7 -0
- gns3server/symbols/affinity/circle/green/inspect2.svg +6 -0
- gns3server/symbols/affinity/circle/green/interconnect.svg +5 -0
- gns3server/symbols/affinity/circle/green/ip_phone.svg +21 -0
- gns3server/symbols/affinity/circle/green/isdn.svg +5 -0
- gns3server/symbols/affinity/circle/green/laptop.svg +6 -0
- gns3server/symbols/affinity/circle/green/ldap.svg +5 -0
- gns3server/symbols/affinity/circle/green/light_bulb.svg +11 -0
- gns3server/symbols/affinity/circle/green/link.svg +5 -0
- gns3server/symbols/affinity/circle/green/loadbalancer.svg +5 -0
- gns3server/symbols/affinity/circle/green/nas.svg +5 -0
- gns3server/symbols/affinity/circle/green/nat.svg +60 -0
- gns3server/symbols/affinity/circle/green/nat2.svg +55 -0
- gns3server/symbols/affinity/circle/green/office.svg +5 -0
- gns3server/symbols/affinity/circle/green/optical.svg +8 -0
- gns3server/symbols/affinity/circle/green/phone_cloud.svg +6 -0
- gns3server/symbols/affinity/circle/green/phone_old.svg +5 -0
- gns3server/symbols/affinity/circle/green/phone_wireless.svg +8 -0
- gns3server/symbols/affinity/circle/green/pinpoint.svg +5 -0
- gns3server/symbols/affinity/circle/green/printer.svg +7 -0
- gns3server/symbols/affinity/circle/green/rj45.svg +5 -0
- gns3server/symbols/affinity/circle/green/router.svg +5 -0
- gns3server/symbols/affinity/circle/green/router2.svg +5 -0
- gns3server/symbols/affinity/circle/green/router_cloud.svg +6 -0
- gns3server/symbols/affinity/circle/green/satellite.svg +6 -0
- gns3server/symbols/affinity/circle/green/satellite_dish.svg +7 -0
- gns3server/symbols/affinity/circle/green/scull.svg +8 -0
- gns3server/symbols/affinity/circle/green/server.svg +5 -0
- gns3server/symbols/affinity/circle/green/server_cluster.svg +7 -0
- gns3server/symbols/affinity/circle/green/shield.svg +7 -0
- gns3server/symbols/affinity/circle/green/statistics.svg +7 -0
- gns3server/symbols/affinity/circle/green/storage.svg +5 -0
- gns3server/symbols/affinity/circle/green/switch.svg +8 -0
- gns3server/symbols/affinity/circle/green/switch_multilayer.svg +5 -0
- gns3server/symbols/affinity/circle/green/tablet.svg +11 -0
- gns3server/symbols/affinity/circle/green/template.svg +4 -0
- gns3server/symbols/affinity/circle/green/tree.svg +5 -0
- gns3server/symbols/affinity/circle/green/user.svg +7 -0
- gns3server/symbols/affinity/circle/green/virtualbox.svg +7 -0
- gns3server/symbols/affinity/circle/green/vm.svg +7 -0
- gns3server/symbols/affinity/circle/green/vmware.svg +7 -0
- gns3server/symbols/affinity/circle/green/vrf.svg +8 -0
- gns3server/symbols/affinity/circle/green/wifi.svg +5 -0
- gns3server/symbols/affinity/circle/green/wlc.svg +5 -0
- gns3server/symbols/affinity/circle/green/xml.svg +5 -0
- gns3server/symbols/affinity/circle/red/atm.svg +5 -0
- gns3server/symbols/affinity/circle/red/bug.svg +8 -0
- gns3server/symbols/affinity/circle/red/camera.svg +5 -0
- gns3server/symbols/affinity/circle/red/camera_dome.svg +8 -0
- gns3server/symbols/affinity/circle/red/client.svg +5 -0
- gns3server/symbols/affinity/circle/red/client_vm.svg +6 -0
- gns3server/symbols/affinity/circle/red/cloud.svg +5 -0
- gns3server/symbols/affinity/circle/red/coffee.svg +6 -0
- gns3server/symbols/affinity/circle/red/cog.svg +5 -0
- gns3server/symbols/affinity/circle/red/communications.svg +5 -0
- gns3server/symbols/affinity/circle/red/conversation.svg +12 -0
- gns3server/symbols/affinity/circle/red/dna.svg +7 -0
- gns3server/symbols/affinity/circle/red/dna2.svg +7 -0
- gns3server/symbols/affinity/circle/red/docker.svg +11 -0
- gns3server/symbols/affinity/circle/red/dslam.svg +5 -0
- gns3server/symbols/affinity/circle/red/factory.svg +6 -0
- gns3server/symbols/affinity/circle/red/fingerprint.svg +5 -0
- gns3server/symbols/affinity/circle/red/firewall.svg +5 -0
- gns3server/symbols/affinity/circle/red/firewall3.svg +5 -0
- gns3server/symbols/affinity/circle/red/globe.svg +5 -0
- gns3server/symbols/affinity/circle/red/grid.svg +5 -0
- gns3server/symbols/affinity/circle/red/grid2.svg +5 -0
- gns3server/symbols/affinity/circle/red/health.svg +5 -0
- gns3server/symbols/affinity/circle/red/house.svg +9 -0
- gns3server/symbols/affinity/circle/red/hub.svg +5 -0
- gns3server/symbols/affinity/circle/red/inspect.svg +7 -0
- gns3server/symbols/affinity/circle/red/inspect2.svg +6 -0
- gns3server/symbols/affinity/circle/red/interconnect.svg +5 -0
- gns3server/symbols/affinity/circle/red/ip_phone.svg +21 -0
- gns3server/symbols/affinity/circle/red/isdn.svg +5 -0
- gns3server/symbols/affinity/circle/red/laptop.svg +6 -0
- gns3server/symbols/affinity/circle/red/ldap.svg +5 -0
- gns3server/symbols/affinity/circle/red/light_bulb.svg +11 -0
- gns3server/symbols/affinity/circle/red/link.svg +5 -0
- gns3server/symbols/affinity/circle/red/loadbalancer.svg +5 -0
- gns3server/symbols/affinity/circle/red/nas.svg +5 -0
- gns3server/symbols/affinity/circle/red/nat.svg +60 -0
- gns3server/symbols/affinity/circle/red/nat2.svg +55 -0
- gns3server/symbols/affinity/circle/red/office.svg +5 -0
- gns3server/symbols/affinity/circle/red/optical.svg +8 -0
- gns3server/symbols/affinity/circle/red/phone_cloud.svg +6 -0
- gns3server/symbols/affinity/circle/red/phone_old.svg +5 -0
- gns3server/symbols/affinity/circle/red/phone_wireless.svg +8 -0
- gns3server/symbols/affinity/circle/red/pinpoint.svg +5 -0
- gns3server/symbols/affinity/circle/red/printer.svg +7 -0
- gns3server/symbols/affinity/circle/red/rj45.svg +5 -0
- gns3server/symbols/affinity/circle/red/router.svg +5 -0
- gns3server/symbols/affinity/circle/red/router2.svg +5 -0
- gns3server/symbols/affinity/circle/red/router_cloud.svg +6 -0
- gns3server/symbols/affinity/circle/red/satellite.svg +6 -0
- gns3server/symbols/affinity/circle/red/satellite_dish.svg +7 -0
- gns3server/symbols/affinity/circle/red/scull.svg +8 -0
- gns3server/symbols/affinity/circle/red/server.svg +5 -0
- gns3server/symbols/affinity/circle/red/server_cluster.svg +7 -0
- gns3server/symbols/affinity/circle/red/shield.svg +7 -0
- gns3server/symbols/affinity/circle/red/statistics.svg +7 -0
- gns3server/symbols/affinity/circle/red/storage.svg +5 -0
- gns3server/symbols/affinity/circle/red/switch.svg +8 -0
- gns3server/symbols/affinity/circle/red/switch_multilayer.svg +5 -0
- gns3server/symbols/affinity/circle/red/tablet.svg +11 -0
- gns3server/symbols/affinity/circle/red/template.svg +4 -0
- gns3server/symbols/affinity/circle/red/tree.svg +5 -0
- gns3server/symbols/affinity/circle/red/user.svg +7 -0
- gns3server/symbols/affinity/circle/red/virtualbox.svg +7 -0
- gns3server/symbols/affinity/circle/red/vm.svg +7 -0
- gns3server/symbols/affinity/circle/red/vmware.svg +7 -0
- gns3server/symbols/affinity/circle/red/vrf.svg +8 -0
- gns3server/symbols/affinity/circle/red/wifi.svg +5 -0
- gns3server/symbols/affinity/circle/red/wlc.svg +5 -0
- gns3server/symbols/affinity/circle/red/xml.svg +5 -0
- gns3server/symbols/affinity/square/blue/atm.svg +5 -0
- gns3server/symbols/affinity/square/blue/bug.svg +5 -0
- gns3server/symbols/affinity/square/blue/camera.svg +12 -0
- gns3server/symbols/affinity/square/blue/camera_dome.svg +8 -0
- gns3server/symbols/affinity/square/blue/client.svg +8 -0
- gns3server/symbols/affinity/square/blue/client_vm.svg +8 -0
- gns3server/symbols/affinity/square/blue/cloud.svg +12 -0
- gns3server/symbols/affinity/square/blue/coffee.svg +5 -0
- gns3server/symbols/affinity/square/blue/cog.svg +8 -0
- gns3server/symbols/affinity/square/blue/communications.svg +8 -0
- gns3server/symbols/affinity/square/blue/conversation.svg +12 -0
- gns3server/symbols/affinity/square/blue/dna.svg +7 -0
- gns3server/symbols/affinity/square/blue/dna2.svg +7 -0
- gns3server/symbols/affinity/square/blue/docker.svg +11 -0
- gns3server/symbols/affinity/square/blue/dslam.svg +8 -0
- gns3server/symbols/affinity/square/blue/factory.svg +5 -0
- gns3server/symbols/affinity/square/blue/fingerprint.svg +9 -0
- gns3server/symbols/affinity/square/blue/firewall.svg +7 -0
- gns3server/symbols/affinity/square/blue/firewall3.svg +6 -0
- gns3server/symbols/affinity/square/blue/globe.svg +5 -0
- gns3server/symbols/affinity/square/blue/grid.svg +7 -0
- gns3server/symbols/affinity/square/blue/grid2.svg +7 -0
- gns3server/symbols/affinity/square/blue/health.svg +5 -0
- gns3server/symbols/affinity/square/blue/house.svg +6 -0
- gns3server/symbols/affinity/square/blue/hub.svg +7 -0
- gns3server/symbols/affinity/square/blue/inspect.svg +5 -0
- gns3server/symbols/affinity/square/blue/inspect2.svg +9 -0
- gns3server/symbols/affinity/square/blue/interconnect.svg +8 -0
- gns3server/symbols/affinity/square/blue/ip_phone.svg +23 -0
- gns3server/symbols/affinity/square/blue/isdn.svg +7 -0
- gns3server/symbols/affinity/square/blue/laptop.svg +8 -0
- gns3server/symbols/affinity/square/blue/ldap.svg +5 -0
- gns3server/symbols/affinity/square/blue/light_bulb.svg +11 -0
- gns3server/symbols/affinity/square/blue/link.svg +5 -0
- gns3server/symbols/affinity/square/blue/loadbalancer.svg +5 -0
- gns3server/symbols/affinity/square/blue/nas.svg +7 -0
- gns3server/symbols/affinity/square/blue/nat.svg +58 -0
- gns3server/symbols/affinity/square/blue/nat2.svg +74 -0
- gns3server/symbols/affinity/square/blue/office.svg +5 -0
- gns3server/symbols/affinity/square/blue/optical.svg +8 -0
- gns3server/symbols/affinity/square/blue/phone_cloud.svg +8 -0
- gns3server/symbols/affinity/square/blue/phone_old.svg +7 -0
- gns3server/symbols/affinity/square/blue/phone_wireless.svg +10 -0
- gns3server/symbols/affinity/square/blue/pinpoint.svg +9 -0
- gns3server/symbols/affinity/square/blue/printer.svg +27 -0
- gns3server/symbols/affinity/square/blue/rj45.svg +14 -0
- gns3server/symbols/affinity/square/blue/router.svg +7 -0
- gns3server/symbols/affinity/square/blue/router2.svg +5 -0
- gns3server/symbols/affinity/square/blue/router_cloud.svg +7 -0
- gns3server/symbols/affinity/square/blue/satellite.svg +8 -0
- gns3server/symbols/affinity/square/blue/satellite_dish.svg +7 -0
- gns3server/symbols/affinity/square/blue/scull.svg +10 -0
- gns3server/symbols/affinity/square/blue/server.svg +5 -0
- gns3server/symbols/affinity/square/blue/server_cluster.svg +9 -0
- gns3server/symbols/affinity/square/blue/shield.svg +5 -0
- gns3server/symbols/affinity/square/blue/statistics.svg +7 -0
- gns3server/symbols/affinity/square/blue/storage.svg +7 -0
- gns3server/symbols/affinity/square/blue/switch.svg +10 -0
- gns3server/symbols/affinity/square/blue/switch_multilayer.svg +8 -0
- gns3server/symbols/affinity/square/blue/tablet.svg +9 -0
- gns3server/symbols/affinity/square/blue/template.svg +4 -0
- gns3server/symbols/affinity/square/blue/tree.svg +5 -0
- gns3server/symbols/affinity/square/blue/user.svg +7 -0
- gns3server/symbols/affinity/square/blue/virtualbox.svg +7 -0
- gns3server/symbols/affinity/square/blue/vm.svg +7 -0
- gns3server/symbols/affinity/square/blue/vmware.svg +7 -0
- gns3server/symbols/affinity/square/blue/vrf.svg +5 -0
- gns3server/symbols/affinity/square/blue/wifi.svg +13 -0
- gns3server/symbols/affinity/square/blue/wlc.svg +7 -0
- gns3server/symbols/affinity/square/blue/xml.svg +10 -0
- gns3server/symbols/affinity/square/gray/atm.svg +5 -0
- gns3server/symbols/affinity/square/gray/bug.svg +5 -0
- gns3server/symbols/affinity/square/gray/camera.svg +12 -0
- gns3server/symbols/affinity/square/gray/camera_dome.svg +8 -0
- gns3server/symbols/affinity/square/gray/client.svg +8 -0
- gns3server/symbols/affinity/square/gray/client_vm.svg +8 -0
- gns3server/symbols/affinity/square/gray/cloud.svg +12 -0
- gns3server/symbols/affinity/square/gray/coffee.svg +5 -0
- gns3server/symbols/affinity/square/gray/cog.svg +8 -0
- gns3server/symbols/affinity/square/gray/communications.svg +8 -0
- gns3server/symbols/affinity/square/gray/conversation.svg +12 -0
- gns3server/symbols/affinity/square/gray/dna.svg +7 -0
- gns3server/symbols/affinity/square/gray/dna2.svg +7 -0
- gns3server/symbols/affinity/square/gray/docker.svg +11 -0
- gns3server/symbols/affinity/square/gray/dslam.svg +8 -0
- gns3server/symbols/affinity/square/gray/factory.svg +5 -0
- gns3server/symbols/affinity/square/gray/fingerprint.svg +9 -0
- gns3server/symbols/affinity/square/gray/firewall.svg +7 -0
- gns3server/symbols/affinity/square/gray/firewall3.svg +6 -0
- gns3server/symbols/affinity/square/gray/globe.svg +5 -0
- gns3server/symbols/affinity/square/gray/grid.svg +7 -0
- gns3server/symbols/affinity/square/gray/grid2.svg +7 -0
- gns3server/symbols/affinity/square/gray/health.svg +5 -0
- gns3server/symbols/affinity/square/gray/house.svg +6 -0
- gns3server/symbols/affinity/square/gray/hub.svg +7 -0
- gns3server/symbols/affinity/square/gray/inspect.svg +5 -0
- gns3server/symbols/affinity/square/gray/inspect2.svg +9 -0
- gns3server/symbols/affinity/square/gray/interconnect.svg +8 -0
- gns3server/symbols/affinity/square/gray/ip_phone.svg +23 -0
- gns3server/symbols/affinity/square/gray/isdn.svg +7 -0
- gns3server/symbols/affinity/square/gray/laptop.svg +8 -0
- gns3server/symbols/affinity/square/gray/ldap.svg +5 -0
- gns3server/symbols/affinity/square/gray/light_bulb.svg +11 -0
- gns3server/symbols/affinity/square/gray/link.svg +5 -0
- gns3server/symbols/affinity/square/gray/loadbalancer.svg +5 -0
- gns3server/symbols/affinity/square/gray/nas.svg +7 -0
- gns3server/symbols/affinity/square/gray/nat.svg +58 -0
- gns3server/symbols/affinity/square/gray/nat2.svg +74 -0
- gns3server/symbols/affinity/square/gray/office.svg +5 -0
- gns3server/symbols/affinity/square/gray/optical.svg +8 -0
- gns3server/symbols/affinity/square/gray/phone_cloud.svg +8 -0
- gns3server/symbols/affinity/square/gray/phone_old.svg +7 -0
- gns3server/symbols/affinity/square/gray/phone_wireless.svg +10 -0
- gns3server/symbols/affinity/square/gray/pinpoint.svg +9 -0
- gns3server/symbols/affinity/square/gray/printer.svg +27 -0
- gns3server/symbols/affinity/square/gray/rj45.svg +14 -0
- gns3server/symbols/affinity/square/gray/router.svg +7 -0
- gns3server/symbols/affinity/square/gray/router2.svg +5 -0
- gns3server/symbols/affinity/square/gray/router_cloud.svg +7 -0
- gns3server/symbols/affinity/square/gray/satellite.svg +8 -0
- gns3server/symbols/affinity/square/gray/satellite_dish.svg +7 -0
- gns3server/symbols/affinity/square/gray/scull.svg +10 -0
- gns3server/symbols/affinity/square/gray/server.svg +5 -0
- gns3server/symbols/affinity/square/gray/server_cluster.svg +9 -0
- gns3server/symbols/affinity/square/gray/shield.svg +5 -0
- gns3server/symbols/affinity/square/gray/statistics.svg +7 -0
- gns3server/symbols/affinity/square/gray/storage.svg +5 -0
- gns3server/symbols/affinity/square/gray/switch.svg +10 -0
- gns3server/symbols/affinity/square/gray/switch_multilayer.svg +9 -0
- gns3server/symbols/affinity/square/gray/tablet.svg +9 -0
- gns3server/symbols/affinity/square/gray/template.svg +4 -0
- gns3server/symbols/affinity/square/gray/tree.svg +5 -0
- gns3server/symbols/affinity/square/gray/user.svg +7 -0
- gns3server/symbols/affinity/square/gray/virtualbox.svg +7 -0
- gns3server/symbols/affinity/square/gray/vm.svg +7 -0
- gns3server/symbols/affinity/square/gray/vmware.svg +7 -0
- gns3server/symbols/affinity/square/gray/vrf.svg +5 -0
- gns3server/symbols/affinity/square/gray/wifi.svg +13 -0
- gns3server/symbols/affinity/square/gray/wlc.svg +7 -0
- gns3server/symbols/affinity/square/gray/xml.svg +10 -0
- gns3server/symbols/affinity/square/green/atm.svg +5 -0
- gns3server/symbols/affinity/square/green/bug.svg +5 -0
- gns3server/symbols/affinity/square/green/camera.svg +5 -0
- gns3server/symbols/affinity/square/green/camera_dome.svg +8 -0
- gns3server/symbols/affinity/square/green/client.svg +5 -0
- gns3server/symbols/affinity/square/green/client_vm.svg +6 -0
- gns3server/symbols/affinity/square/green/cloud.svg +12 -0
- gns3server/symbols/affinity/square/green/coffee.svg +5 -0
- gns3server/symbols/affinity/square/green/cog.svg +5 -0
- gns3server/symbols/affinity/square/green/communications.svg +5 -0
- gns3server/symbols/affinity/square/green/conversation.svg +12 -0
- gns3server/symbols/affinity/square/green/dna.svg +7 -0
- gns3server/symbols/affinity/square/green/dna2.svg +7 -0
- gns3server/symbols/affinity/square/green/docker.svg +11 -0
- gns3server/symbols/affinity/square/green/dslam.svg +5 -0
- gns3server/symbols/affinity/square/green/factory.svg +5 -0
- gns3server/symbols/affinity/square/green/fingerprint.svg +5 -0
- gns3server/symbols/affinity/square/green/firewall.svg +5 -0
- gns3server/symbols/affinity/square/green/firewall3.svg +5 -0
- gns3server/symbols/affinity/square/green/globe.svg +5 -0
- gns3server/symbols/affinity/square/green/grid.svg +5 -0
- gns3server/symbols/affinity/square/green/grid2.svg +5 -0
- gns3server/symbols/affinity/square/green/health.svg +5 -0
- gns3server/symbols/affinity/square/green/house.svg +6 -0
- gns3server/symbols/affinity/square/green/hub.svg +5 -0
- gns3server/symbols/affinity/square/green/inspect.svg +5 -0
- gns3server/symbols/affinity/square/green/inspect2.svg +5 -0
- gns3server/symbols/affinity/square/green/interconnect.svg +5 -0
- gns3server/symbols/affinity/square/green/ip_phone.svg +7 -0
- gns3server/symbols/affinity/square/green/isdn.svg +5 -0
- gns3server/symbols/affinity/square/green/laptop.svg +8 -0
- gns3server/symbols/affinity/square/green/ldap.svg +5 -0
- gns3server/symbols/affinity/square/green/light_bulb.svg +5 -0
- gns3server/symbols/affinity/square/green/link.svg +5 -0
- gns3server/symbols/affinity/square/green/loadbalancer.svg +5 -0
- gns3server/symbols/affinity/square/green/nas.svg +5 -0
- gns3server/symbols/affinity/square/green/nat.svg +58 -0
- gns3server/symbols/affinity/square/green/nat2.svg +74 -0
- gns3server/symbols/affinity/square/green/office.svg +5 -0
- gns3server/symbols/affinity/square/green/optical.svg +8 -0
- gns3server/symbols/affinity/square/green/phone_cloud.svg +6 -0
- gns3server/symbols/affinity/square/green/phone_old.svg +5 -0
- gns3server/symbols/affinity/square/green/phone_wireless.svg +5 -0
- gns3server/symbols/affinity/square/green/pinpoint.svg +5 -0
- gns3server/symbols/affinity/square/green/printer.svg +27 -0
- gns3server/symbols/affinity/square/green/rj45.svg +5 -0
- gns3server/symbols/affinity/square/green/router.svg +5 -0
- gns3server/symbols/affinity/square/green/router2.svg +5 -0
- gns3server/symbols/affinity/square/green/router_cloud.svg +6 -0
- gns3server/symbols/affinity/square/green/satellite.svg +5 -0
- gns3server/symbols/affinity/square/green/satellite_dish.svg +5 -0
- gns3server/symbols/affinity/square/green/scull.svg +8 -0
- gns3server/symbols/affinity/square/green/server.svg +5 -0
- gns3server/symbols/affinity/square/green/server_cluster.svg +7 -0
- gns3server/symbols/affinity/square/green/shield.svg +5 -0
- gns3server/symbols/affinity/square/green/statistics.svg +5 -0
- gns3server/symbols/affinity/square/green/storage.svg +5 -0
- gns3server/symbols/affinity/square/green/switch.svg +10 -0
- gns3server/symbols/affinity/square/green/switch_multilayer.svg +5 -0
- gns3server/symbols/affinity/square/green/tablet.svg +9 -0
- gns3server/symbols/affinity/square/green/template.svg +4 -0
- gns3server/symbols/affinity/square/green/tree.svg +5 -0
- gns3server/symbols/affinity/square/green/user.svg +7 -0
- gns3server/symbols/affinity/square/green/virtualbox.svg +7 -0
- gns3server/symbols/affinity/square/green/vm.svg +7 -0
- gns3server/symbols/affinity/square/green/vmware.svg +7 -0
- gns3server/symbols/affinity/square/green/vrf.svg +5 -0
- gns3server/symbols/affinity/square/green/wifi.svg +5 -0
- gns3server/symbols/affinity/square/green/wlc.svg +5 -0
- gns3server/symbols/affinity/square/green/xml.svg +5 -0
- gns3server/symbols/affinity/square/red/atm.svg +5 -0
- gns3server/symbols/affinity/square/red/bug.svg +5 -0
- gns3server/symbols/affinity/square/red/camera.svg +12 -0
- gns3server/symbols/affinity/square/red/camera_dome.svg +8 -0
- gns3server/symbols/affinity/square/red/client.svg +8 -0
- gns3server/symbols/affinity/square/red/client_vm.svg +8 -0
- gns3server/symbols/affinity/square/red/cloud.svg +12 -0
- gns3server/symbols/affinity/square/red/coffee.svg +5 -0
- gns3server/symbols/affinity/square/red/cog.svg +8 -0
- gns3server/symbols/affinity/square/red/communications.svg +8 -0
- gns3server/symbols/affinity/square/red/conversation.svg +12 -0
- gns3server/symbols/affinity/square/red/dna.svg +7 -0
- gns3server/symbols/affinity/square/red/dna2.svg +7 -0
- gns3server/symbols/affinity/square/red/docker.svg +11 -0
- gns3server/symbols/affinity/square/red/dslam.svg +8 -0
- gns3server/symbols/affinity/square/red/factory.svg +5 -0
- gns3server/symbols/affinity/square/red/fingerprint.svg +9 -0
- gns3server/symbols/affinity/square/red/firewall.svg +7 -0
- gns3server/symbols/affinity/square/red/firewall3.svg +5 -0
- gns3server/symbols/affinity/square/red/globe.svg +5 -0
- gns3server/symbols/affinity/square/red/grid.svg +7 -0
- gns3server/symbols/affinity/square/red/grid2.svg +7 -0
- gns3server/symbols/affinity/square/red/health.svg +5 -0
- gns3server/symbols/affinity/square/red/house.svg +6 -0
- gns3server/symbols/affinity/square/red/hub.svg +7 -0
- gns3server/symbols/affinity/square/red/inspect.svg +5 -0
- gns3server/symbols/affinity/square/red/inspect2.svg +9 -0
- gns3server/symbols/affinity/square/red/interconnect.svg +8 -0
- gns3server/symbols/affinity/square/red/ip_phone.svg +7 -0
- gns3server/symbols/affinity/square/red/isdn.svg +7 -0
- gns3server/symbols/affinity/square/red/laptop.svg +8 -0
- gns3server/symbols/affinity/square/red/ldap.svg +5 -0
- gns3server/symbols/affinity/square/red/light_bulb.svg +5 -0
- gns3server/symbols/affinity/square/red/link.svg +5 -0
- gns3server/symbols/affinity/square/red/loadbalancer.svg +5 -0
- gns3server/symbols/affinity/square/red/nas.svg +7 -0
- gns3server/symbols/affinity/square/red/nat.svg +58 -0
- gns3server/symbols/affinity/square/red/nat2.svg +74 -0
- gns3server/symbols/affinity/square/red/office.svg +5 -0
- gns3server/symbols/affinity/square/red/optical.svg +8 -0
- gns3server/symbols/affinity/square/red/phone_cloud.svg +6 -0
- gns3server/symbols/affinity/square/red/phone_old.svg +5 -0
- gns3server/symbols/affinity/square/red/phone_wireless.svg +5 -0
- gns3server/symbols/affinity/square/red/pinpoint.svg +9 -0
- gns3server/symbols/affinity/square/red/printer.svg +27 -0
- gns3server/symbols/affinity/square/red/rj45.svg +14 -0
- gns3server/symbols/affinity/square/red/router.svg +7 -0
- gns3server/symbols/affinity/square/red/router2.svg +5 -0
- gns3server/symbols/affinity/square/red/router_cloud.svg +6 -0
- gns3server/symbols/affinity/square/red/satellite.svg +8 -0
- gns3server/symbols/affinity/square/red/satellite_dish.svg +5 -0
- gns3server/symbols/affinity/square/red/scull.svg +10 -0
- gns3server/symbols/affinity/square/red/server.svg +5 -0
- gns3server/symbols/affinity/square/red/server_cluster.svg +9 -0
- gns3server/symbols/affinity/square/red/shield.svg +5 -0
- gns3server/symbols/affinity/square/red/statistics.svg +5 -0
- gns3server/symbols/affinity/square/red/storage.svg +7 -0
- gns3server/symbols/affinity/square/red/switch.svg +10 -0
- gns3server/symbols/affinity/square/red/switch_multilayer.svg +9 -0
- gns3server/symbols/affinity/square/red/tablet.svg +9 -0
- gns3server/symbols/affinity/square/red/template.svg +4 -0
- gns3server/symbols/affinity/square/red/tree.svg +5 -0
- gns3server/symbols/affinity/square/red/user.svg +7 -0
- gns3server/symbols/affinity/square/red/virtualbox.svg +7 -0
- gns3server/symbols/affinity/square/red/vm.svg +7 -0
- gns3server/symbols/affinity/square/red/vmware.svg +7 -0
- gns3server/symbols/affinity/square/red/vrf.svg +5 -0
- gns3server/symbols/affinity/square/red/wifi.svg +13 -0
- gns3server/symbols/affinity/square/red/wlc.svg +7 -0
- gns3server/symbols/affinity/square/red/xml.svg +10 -0
- gns3server/symbols/classic/PBX.svg +304 -0
- gns3server/symbols/classic/PIX_firewall.svg +187 -0
- gns3server/symbols/classic/access_point.svg +516 -0
- gns3server/symbols/classic/access_server.svg +270 -0
- gns3server/symbols/classic/asa.svg +424 -0
- gns3server/symbols/classic/atm_bridge.svg +219 -0
- gns3server/symbols/classic/atm_switch.svg +243 -0
- gns3server/symbols/classic/call_manager.svg +228 -0
- gns3server/symbols/classic/cloud.svg +163 -0
- gns3server/symbols/classic/computer.svg +560 -0
- gns3server/symbols/classic/docker_guest.svg +657 -0
- gns3server/symbols/classic/dslam.svg +155 -0
- gns3server/symbols/classic/edge_label_switch_router.svg +216 -0
- gns3server/symbols/classic/ethernet_switch.svg +228 -0
- gns3server/symbols/classic/firewall.svg +187 -0
- gns3server/symbols/classic/frame_relay_switch.svg +263 -0
- gns3server/symbols/classic/gateway.svg +309 -0
- gns3server/symbols/classic/hub.svg +204 -0
- gns3server/symbols/classic/ids.svg +310 -0
- gns3server/symbols/classic/iosv_l2_virl.svg +286 -0
- gns3server/symbols/classic/iosv_virl.svg +394 -0
- gns3server/symbols/classic/ip_phone.svg +171 -0
- gns3server/symbols/classic/label_switch_router.svg +223 -0
- gns3server/symbols/classic/lightweight_ap.svg +536 -0
- gns3server/symbols/classic/multilayer_switch.svg +317 -0
- gns3server/symbols/classic/nat.svg +207 -0
- gns3server/symbols/classic/optical_router.svg +207 -0
- gns3server/symbols/classic/printer.svg +178 -0
- gns3server/symbols/classic/qemu_guest.svg +1387 -0
- gns3server/symbols/classic/route_switch_processor.svg +395 -0
- gns3server/symbols/classic/router.awp.svg +362 -0
- gns3server/symbols/classic/router.svg +203 -0
- gns3server/symbols/classic/router_firewall.svg +395 -0
- gns3server/symbols/classic/router_netflow.svg +215 -0
- gns3server/symbols/classic/server.svg +226 -0
- gns3server/symbols/classic/sip_server.svg +305 -0
- gns3server/symbols/classic/traceng.svg +610 -0
- gns3server/symbols/classic/vbox_guest.svg +7691 -0
- gns3server/symbols/classic/vmware_guest.svg +572 -0
- gns3server/symbols/classic/voice_access_server.svg +289 -0
- gns3server/symbols/classic/voice_router.svg +223 -0
- gns3server/symbols/classic/vpcs_guest.svg +574 -0
- gns3server/symbols/classic/wlan_controller.svg +528 -0
- gns3server/templates/compute.html +62 -0
- gns3server/templates/controller.html +55 -0
- gns3server/templates/index.html +12 -0
- gns3server/templates/layout.html +20 -0
- gns3server/templates/project.html +91 -0
- gns3server/templates/upload.html +6 -0
- gns3server/utils/__init__.py +123 -0
- gns3server/utils/application_id.py +49 -0
- gns3server/utils/asyncio/__init__.py +148 -0
- gns3server/utils/asyncio/aiozipstream.py +528 -0
- gns3server/utils/asyncio/embed_shell.py +369 -0
- gns3server/utils/asyncio/input_stream.py +408 -0
- gns3server/utils/asyncio/pool.py +69 -0
- gns3server/utils/asyncio/raw_command_server.py +140 -0
- gns3server/utils/asyncio/serial.py +87 -0
- gns3server/utils/asyncio/telnet_server.py +450 -0
- gns3server/utils/cpu_percent.py +46 -0
- gns3server/utils/file_watcher.py +103 -0
- gns3server/utils/get_resource.py +48 -0
- gns3server/utils/hostname.py +112 -0
- gns3server/utils/http_client.py +71 -0
- gns3server/utils/images.py +378 -0
- gns3server/utils/interfaces.py +254 -0
- gns3server/utils/notification_queue.py +79 -0
- gns3server/utils/path.py +76 -0
- gns3server/utils/picture.py +146 -0
- gns3server/utils/qt.py +44 -0
- gns3server/utils/vmnet.py +277 -0
- gns3server/utils/zipfile_zstd/__init__.py +10 -0
- gns3server/utils/zipfile_zstd/_patcher.py +20 -0
- gns3server/utils/zipfile_zstd/_zipfile.py +64 -0
- gns3server/version.py +36 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2016 GNS3 Technologies Inc.
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
17
|
+
import asyncio
|
|
18
|
+
|
|
19
|
+
from ...base_node import BaseNode
|
|
20
|
+
|
|
21
|
+
import logging
|
|
22
|
+
|
|
23
|
+
log = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class EthernetHub(BaseNode):
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
Ethernet hub
|
|
30
|
+
|
|
31
|
+
:param name: name for this hub
|
|
32
|
+
:param node_id: Node identifier
|
|
33
|
+
:param project: Project instance
|
|
34
|
+
:param manager: Parent VM Manager
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, name, node_id, project, manager):
|
|
38
|
+
|
|
39
|
+
super().__init__(name, node_id, project, manager)
|
|
40
|
+
|
|
41
|
+
def asdict(self):
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
"name": self.name,
|
|
45
|
+
"usage": self.usage,
|
|
46
|
+
"node_id": self.id,
|
|
47
|
+
"project_id": self.project.id
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async def create(self):
|
|
51
|
+
"""
|
|
52
|
+
Creates this hub.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
super().create()
|
|
56
|
+
log.info(f'Ethernet hub "{self._name}" [{self._id}] has been created')
|
|
57
|
+
|
|
58
|
+
async def delete(self):
|
|
59
|
+
"""
|
|
60
|
+
Deletes this hub.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
raise NotImplementedError()
|
|
64
|
+
|
|
65
|
+
async def add_nio(self, nio, port_number):
|
|
66
|
+
"""
|
|
67
|
+
Adds a NIO as new port on this hub.
|
|
68
|
+
|
|
69
|
+
:param nio: NIO instance to add
|
|
70
|
+
:param port_number: port to allocate for the NIO
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
raise NotImplementedError()
|
|
74
|
+
|
|
75
|
+
async def remove_nio(self, port_number):
|
|
76
|
+
"""
|
|
77
|
+
Removes the specified NIO as member of this hub.
|
|
78
|
+
|
|
79
|
+
:param port_number: allocated port number
|
|
80
|
+
|
|
81
|
+
:returns: the NIO that was bound to the allocated port
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
raise NotImplementedError()
|
|
85
|
+
|
|
86
|
+
async def start_capture(self, port_number, output_file, data_link_type="DLT_EN10MB"):
|
|
87
|
+
"""
|
|
88
|
+
Starts a packet capture.
|
|
89
|
+
|
|
90
|
+
:param port_number: allocated port number
|
|
91
|
+
:param output_file: PCAP destination file for the capture
|
|
92
|
+
:param data_link_type: PCAP data link type (DLT_*), default is DLT_EN10MB
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
raise NotImplementedError()
|
|
96
|
+
|
|
97
|
+
async def stop_capture(self, port_number):
|
|
98
|
+
"""
|
|
99
|
+
Stops a packet capture.
|
|
100
|
+
|
|
101
|
+
:param port_number: allocated port number
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2016 GNS3 Technologies Inc.
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
17
|
+
import asyncio
|
|
18
|
+
|
|
19
|
+
from ...base_node import BaseNode
|
|
20
|
+
|
|
21
|
+
import logging
|
|
22
|
+
|
|
23
|
+
log = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class EthernetSwitch(BaseNode):
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
Ethernet switch.
|
|
30
|
+
|
|
31
|
+
:param name: name for this switch
|
|
32
|
+
:param node_id: Node identifier
|
|
33
|
+
:param project: Project instance
|
|
34
|
+
:param manager: Parent VM Manager
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, name, node_id, project, manager):
|
|
38
|
+
|
|
39
|
+
super().__init__(name, node_id, project, manager)
|
|
40
|
+
|
|
41
|
+
def asdict(self):
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
"name": self.name,
|
|
45
|
+
"usage": self.usage,
|
|
46
|
+
"node_id": self.id,
|
|
47
|
+
"project_id": self.project.id
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async def create(self):
|
|
51
|
+
"""
|
|
52
|
+
Creates this switch.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
super().create()
|
|
56
|
+
log.info(f'Ethernet switch "{self._name}" [{self._id}] has been created')
|
|
57
|
+
|
|
58
|
+
async def delete(self):
|
|
59
|
+
"""
|
|
60
|
+
Deletes this switch.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
raise NotImplementedError()
|
|
64
|
+
|
|
65
|
+
async def add_nio(self, nio, port_number):
|
|
66
|
+
"""
|
|
67
|
+
Adds a NIO as new port on this switch.
|
|
68
|
+
|
|
69
|
+
:param nio: NIO instance to add
|
|
70
|
+
:param port_number: port to allocate for the NIO
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
raise NotImplementedError()
|
|
74
|
+
|
|
75
|
+
async def remove_nio(self, port_number):
|
|
76
|
+
"""
|
|
77
|
+
Removes the specified NIO as member of this switch.
|
|
78
|
+
|
|
79
|
+
:param port_number: allocated port number
|
|
80
|
+
|
|
81
|
+
:returns: the NIO that was bound to the allocated port
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
raise NotImplementedError()
|
|
85
|
+
|
|
86
|
+
async def start_capture(self, port_number, output_file, data_link_type="DLT_EN10MB"):
|
|
87
|
+
"""
|
|
88
|
+
Starts a packet capture.
|
|
89
|
+
|
|
90
|
+
:param port_number: allocated port number
|
|
91
|
+
:param output_file: PCAP destination file for the capture
|
|
92
|
+
:param data_link_type: PCAP data link type (DLT_*), default is DLT_EN10MB
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
raise NotImplementedError()
|
|
96
|
+
|
|
97
|
+
async def stop_capture(self, port_number):
|
|
98
|
+
"""
|
|
99
|
+
Stops a packet capture.
|
|
100
|
+
|
|
101
|
+
:param port_number: allocated port number
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2016 GNS3 Technologies Inc.
|
|
4
|
+
#
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU General Public License
|
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
import sys
|
|
19
|
+
|
|
20
|
+
from .cloud import Cloud
|
|
21
|
+
from ...error import NodeError
|
|
22
|
+
|
|
23
|
+
import gns3server.utils.interfaces
|
|
24
|
+
from gns3server.config import Config
|
|
25
|
+
|
|
26
|
+
import logging
|
|
27
|
+
|
|
28
|
+
log = logging.getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class Nat(Cloud):
|
|
32
|
+
"""
|
|
33
|
+
A portable and pre-configured node allowing topologies to get a
|
|
34
|
+
NAT access.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, name, node_id, project, manager, ports=None):
|
|
38
|
+
|
|
39
|
+
allowed_interfaces = Config.instance().settings.Server.allowed_interfaces
|
|
40
|
+
if allowed_interfaces:
|
|
41
|
+
allowed_interfaces = allowed_interfaces.split(',')
|
|
42
|
+
if sys.platform.startswith("linux"):
|
|
43
|
+
nat_interface = Config.instance().settings.Server.default_nat_interface
|
|
44
|
+
if not nat_interface:
|
|
45
|
+
nat_interface = "virbr0"
|
|
46
|
+
if allowed_interfaces and nat_interface not in allowed_interfaces:
|
|
47
|
+
raise NodeError("NAT interface {} is not allowed be used on this server. "
|
|
48
|
+
"Please check the server configuration file.".format(nat_interface))
|
|
49
|
+
if nat_interface not in [interface["name"] for interface in gns3server.utils.interfaces.interfaces()]:
|
|
50
|
+
raise NodeError(f"NAT interface {nat_interface} is missing, please install libvirt")
|
|
51
|
+
interface = nat_interface
|
|
52
|
+
else:
|
|
53
|
+
nat_interface = Config.instance().settings.Server.default_nat_interface
|
|
54
|
+
if not nat_interface:
|
|
55
|
+
nat_interface = "vmnet8"
|
|
56
|
+
if allowed_interfaces and nat_interface not in allowed_interfaces:
|
|
57
|
+
raise NodeError("NAT interface {} is not allowed be used on this server. "
|
|
58
|
+
"Please check the server configuration file.".format(nat_interface))
|
|
59
|
+
interfaces = list(
|
|
60
|
+
filter(
|
|
61
|
+
lambda x: nat_interface in x.lower(),
|
|
62
|
+
[interface["name"] for interface in gns3server.utils.interfaces.interfaces()],
|
|
63
|
+
)
|
|
64
|
+
)
|
|
65
|
+
if not len(interfaces):
|
|
66
|
+
raise NodeError(
|
|
67
|
+
f"NAT interface {nat_interface} is missing. "
|
|
68
|
+
f"You need to install VMware or use the NAT node on GNS3 VM"
|
|
69
|
+
)
|
|
70
|
+
interface = interfaces[0] # take the first available interface containing the vmnet8 name
|
|
71
|
+
|
|
72
|
+
log.info(f"NAT node '{name}' configured to use NAT interface '{interface}'")
|
|
73
|
+
ports = [{"name": "nat0", "type": "ethernet", "interface": interface, "port_number": 0}]
|
|
74
|
+
super().__init__(name, node_id, project, manager, ports=ports)
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def ports_mapping(self):
|
|
78
|
+
return self._ports_mapping
|
|
79
|
+
|
|
80
|
+
@ports_mapping.setter
|
|
81
|
+
def ports_mapping(self, ports):
|
|
82
|
+
# It's not allowed to change it
|
|
83
|
+
pass
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def is_supported(self):
|
|
87
|
+
return True
|
|
88
|
+
|
|
89
|
+
def asdict(self):
|
|
90
|
+
return {
|
|
91
|
+
"name": self.name,
|
|
92
|
+
"usage": self.usage,
|
|
93
|
+
"node_id": self.id,
|
|
94
|
+
"project_id": self.project.id,
|
|
95
|
+
"status": "started",
|
|
96
|
+
"ports_mapping": self.ports_mapping,
|
|
97
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2020 GNS3 Technologies Inc.
|
|
4
|
+
#
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU General Public License
|
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ComputeError(Exception):
|
|
20
|
+
def __init__(self, message: str):
|
|
21
|
+
super().__init__()
|
|
22
|
+
self._message = message
|
|
23
|
+
|
|
24
|
+
def __repr__(self):
|
|
25
|
+
return self._message
|
|
26
|
+
|
|
27
|
+
def __str__(self):
|
|
28
|
+
return self._message
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ComputeNotFoundError(ComputeError):
|
|
32
|
+
def __init__(self, message: str):
|
|
33
|
+
super().__init__(message)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class ComputeUnauthorizedError(ComputeError):
|
|
37
|
+
def __init__(self, message: str):
|
|
38
|
+
super().__init__(message)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ComputeForbiddenError(ComputeError):
|
|
42
|
+
def __init__(self, message: str):
|
|
43
|
+
super().__init__(message)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class ComputeTimeoutError(ComputeError):
|
|
47
|
+
def __init__(self, message: str):
|
|
48
|
+
super().__init__(message)
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2015 GNS3 Technologies Inc.
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
17
|
+
"""
|
|
18
|
+
Docker server module.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
import os
|
|
22
|
+
import sys
|
|
23
|
+
import json
|
|
24
|
+
import asyncio
|
|
25
|
+
import logging
|
|
26
|
+
import aiohttp
|
|
27
|
+
import shutil
|
|
28
|
+
import platformdirs
|
|
29
|
+
|
|
30
|
+
from gns3server.utils import parse_version
|
|
31
|
+
from gns3server.config import Config
|
|
32
|
+
from gns3server.utils.asyncio import locking
|
|
33
|
+
from gns3server.compute.base_manager import BaseManager
|
|
34
|
+
from gns3server.compute.docker.docker_vm import DockerVM
|
|
35
|
+
from gns3server.compute.docker.docker_error import DockerError, DockerHttp304Error, DockerHttp404Error
|
|
36
|
+
|
|
37
|
+
log = logging.getLogger(__name__)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# Be careful to keep it consistent
|
|
41
|
+
DOCKER_MINIMUM_API_VERSION = "1.25"
|
|
42
|
+
DOCKER_MINIMUM_VERSION = "1.13"
|
|
43
|
+
DOCKER_PREFERRED_API_VERSION = "1.30"
|
|
44
|
+
CHUNK_SIZE = 1024 * 8 # 8KB
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class Docker(BaseManager):
|
|
48
|
+
|
|
49
|
+
_NODE_CLASS = DockerVM
|
|
50
|
+
|
|
51
|
+
def __init__(self):
|
|
52
|
+
|
|
53
|
+
super().__init__()
|
|
54
|
+
self._server_url = "/var/run/docker.sock"
|
|
55
|
+
self._connected = False
|
|
56
|
+
# Allow locking during ubridge operations
|
|
57
|
+
self.ubridge_lock = asyncio.Lock()
|
|
58
|
+
self._connector = None
|
|
59
|
+
self._session = None
|
|
60
|
+
self._api_version = DOCKER_MINIMUM_API_VERSION
|
|
61
|
+
|
|
62
|
+
@staticmethod
|
|
63
|
+
async def install_busybox(dst_dir):
|
|
64
|
+
|
|
65
|
+
dst_busybox = os.path.join(dst_dir, "bin", "busybox")
|
|
66
|
+
if os.path.isfile(dst_busybox):
|
|
67
|
+
return
|
|
68
|
+
for busybox_exec in ("busybox-static", "busybox.static", "busybox"):
|
|
69
|
+
busybox_path = shutil.which(busybox_exec)
|
|
70
|
+
if busybox_path:
|
|
71
|
+
try:
|
|
72
|
+
# check that busybox is statically linked
|
|
73
|
+
# (dynamically linked busybox will fail to run in a container)
|
|
74
|
+
proc = await asyncio.create_subprocess_exec(
|
|
75
|
+
"ldd",
|
|
76
|
+
busybox_path,
|
|
77
|
+
stdout=asyncio.subprocess.PIPE,
|
|
78
|
+
stderr=asyncio.subprocess.DEVNULL
|
|
79
|
+
)
|
|
80
|
+
stdout, _ = await proc.communicate()
|
|
81
|
+
if proc.returncode == 1:
|
|
82
|
+
# ldd returns 1 if the file is not a dynamic executable
|
|
83
|
+
log.info(f"Installing busybox from '{busybox_path}' to '{dst_busybox}'")
|
|
84
|
+
shutil.copy2(busybox_path, dst_busybox, follow_symlinks=True)
|
|
85
|
+
return
|
|
86
|
+
else:
|
|
87
|
+
log.warning(f"Busybox '{busybox_path}' is dynamically linked\n"
|
|
88
|
+
f"{stdout.decode('utf-8', errors='ignore').strip()}")
|
|
89
|
+
except OSError as e:
|
|
90
|
+
raise DockerError(f"Could not install busybox: {e}")
|
|
91
|
+
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")
|
|
92
|
+
|
|
93
|
+
@staticmethod
|
|
94
|
+
def resources_path():
|
|
95
|
+
"""
|
|
96
|
+
Get the Docker resources storage directory
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
resources_path = Config.instance().settings.Server.resources_path
|
|
100
|
+
if not resources_path:
|
|
101
|
+
appname = vendor = "GNS3"
|
|
102
|
+
resources_path = platformdirs.user_data_dir(appname, vendor, roaming=True)
|
|
103
|
+
else:
|
|
104
|
+
resources_path = os.path.expanduser(resources_path)
|
|
105
|
+
docker_resources_dir = os.path.join(resources_path, "docker")
|
|
106
|
+
os.makedirs(docker_resources_dir, exist_ok=True)
|
|
107
|
+
return docker_resources_dir
|
|
108
|
+
|
|
109
|
+
async def install_resources(self):
|
|
110
|
+
"""
|
|
111
|
+
Copy the necessary resources to a writable location and install busybox
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
try:
|
|
115
|
+
dst_path = self.resources_path()
|
|
116
|
+
log.info(f"Installing Docker resources in '{dst_path}'")
|
|
117
|
+
from gns3server.controller import Controller
|
|
118
|
+
Controller.instance().install_resource_files(dst_path, "compute/docker/resources")
|
|
119
|
+
await self.install_busybox(dst_path)
|
|
120
|
+
except OSError as e:
|
|
121
|
+
raise DockerError(f"Could not install Docker resources to {dst_path}: {e}")
|
|
122
|
+
|
|
123
|
+
async def _check_connection(self):
|
|
124
|
+
|
|
125
|
+
if not self._connected:
|
|
126
|
+
try:
|
|
127
|
+
self._connected = True
|
|
128
|
+
version = await self.query("GET", "version")
|
|
129
|
+
except (aiohttp.ClientError, FileNotFoundError):
|
|
130
|
+
self._connected = False
|
|
131
|
+
raise DockerError("Can't connect to docker daemon")
|
|
132
|
+
|
|
133
|
+
docker_version = parse_version(version["ApiVersion"])
|
|
134
|
+
|
|
135
|
+
if docker_version < parse_version(DOCKER_MINIMUM_API_VERSION):
|
|
136
|
+
raise DockerError(
|
|
137
|
+
f"Docker version is {version['Version']}. "
|
|
138
|
+
f"GNS3 requires a minimum version of {DOCKER_MINIMUM_VERSION}"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
preferred_api_version = parse_version(DOCKER_PREFERRED_API_VERSION)
|
|
142
|
+
if docker_version >= preferred_api_version:
|
|
143
|
+
self._api_version = DOCKER_PREFERRED_API_VERSION
|
|
144
|
+
|
|
145
|
+
def connector(self):
|
|
146
|
+
|
|
147
|
+
if self._connector is None or self._connector.closed:
|
|
148
|
+
if not sys.platform.startswith("linux"):
|
|
149
|
+
raise DockerError("Docker is supported only on Linux")
|
|
150
|
+
try:
|
|
151
|
+
self._connector = aiohttp.connector.UnixConnector(self._server_url, limit=None)
|
|
152
|
+
except (aiohttp.ClientError, FileNotFoundError):
|
|
153
|
+
raise DockerError("Can't connect to docker daemon")
|
|
154
|
+
return self._connector
|
|
155
|
+
|
|
156
|
+
async def unload(self):
|
|
157
|
+
|
|
158
|
+
await super().unload()
|
|
159
|
+
if self._connected:
|
|
160
|
+
if self._connector and not self._connector.closed:
|
|
161
|
+
await self._connector.close()
|
|
162
|
+
if self._session and not self._session.closed:
|
|
163
|
+
await self._session.close()
|
|
164
|
+
|
|
165
|
+
async def query(self, method, path, data={}, params={}):
|
|
166
|
+
"""
|
|
167
|
+
Makes a query to the Docker daemon and decode the request
|
|
168
|
+
|
|
169
|
+
:param method: HTTP method
|
|
170
|
+
:param path: Endpoint in API
|
|
171
|
+
:param data: Dictionary with the body. Will be transformed to a JSON
|
|
172
|
+
:param params: Parameters added as a query arg
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
response = await self.http_query(method, path, data=data, params=params)
|
|
176
|
+
body = await response.read()
|
|
177
|
+
response.close()
|
|
178
|
+
if body and len(body):
|
|
179
|
+
if response.headers.get('CONTENT-TYPE') == 'application/json':
|
|
180
|
+
body = json.loads(body.decode("utf-8"))
|
|
181
|
+
else:
|
|
182
|
+
body = body.decode("utf-8")
|
|
183
|
+
log.debug("Query Docker %s %s params=%s data=%s Response: %s", method, path, params, data, body)
|
|
184
|
+
return body
|
|
185
|
+
|
|
186
|
+
async def http_query(self, method, path, data={}, params={}, timeout=300):
|
|
187
|
+
"""
|
|
188
|
+
Makes a query to the docker daemon
|
|
189
|
+
|
|
190
|
+
:param method: HTTP method
|
|
191
|
+
:param path: Endpoint in API
|
|
192
|
+
:param data: Dictionnary with the body. Will be transformed to a JSON
|
|
193
|
+
:param params: Parameters added as a query arg
|
|
194
|
+
:param timeout: Timeout
|
|
195
|
+
:returns: HTTP response
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
data = json.dumps(data)
|
|
199
|
+
if timeout is None:
|
|
200
|
+
timeout = 60 * 60 * 24 * 31 # One month timeout
|
|
201
|
+
|
|
202
|
+
if path == 'version':
|
|
203
|
+
url = "http://docker/v1.24/" + path
|
|
204
|
+
else:
|
|
205
|
+
url = "http://docker/v" + DOCKER_MINIMUM_API_VERSION + "/" + path
|
|
206
|
+
try:
|
|
207
|
+
if path != "version": # version is use by check connection
|
|
208
|
+
await self._check_connection()
|
|
209
|
+
if self._session is None or self._session.closed:
|
|
210
|
+
connector = self.connector()
|
|
211
|
+
self._session = aiohttp.ClientSession(connector=connector)
|
|
212
|
+
response = await self._session.request(
|
|
213
|
+
method,
|
|
214
|
+
url,
|
|
215
|
+
params=params,
|
|
216
|
+
data=data,
|
|
217
|
+
headers={
|
|
218
|
+
"content-type": "application/json",
|
|
219
|
+
},
|
|
220
|
+
timeout=timeout,
|
|
221
|
+
)
|
|
222
|
+
except aiohttp.ClientError as e:
|
|
223
|
+
raise DockerError(f"Docker has returned an error: {e}")
|
|
224
|
+
except asyncio.TimeoutError:
|
|
225
|
+
raise DockerError("Docker timeout " + method + " " + path)
|
|
226
|
+
if response.status >= 300:
|
|
227
|
+
body = await response.read()
|
|
228
|
+
try:
|
|
229
|
+
body = json.loads(body.decode("utf-8"))["message"]
|
|
230
|
+
except ValueError:
|
|
231
|
+
pass
|
|
232
|
+
log.debug(f"Query Docker {method} {path} params={params} data={data} Response: {body}")
|
|
233
|
+
if response.status == 304:
|
|
234
|
+
raise DockerHttp304Error(f"Docker has returned an error: {response.status} {body}")
|
|
235
|
+
elif response.status == 404:
|
|
236
|
+
raise DockerHttp404Error(f"Docker has returned an error: {response.status} {body}")
|
|
237
|
+
else:
|
|
238
|
+
raise DockerError(f"Docker has returned an error: {response.status} {body}")
|
|
239
|
+
return response
|
|
240
|
+
|
|
241
|
+
async def websocket_query(self, path, params={}):
|
|
242
|
+
"""
|
|
243
|
+
Opens a websocket connection
|
|
244
|
+
|
|
245
|
+
:param path: Endpoint in API
|
|
246
|
+
:param params: Parameters added as a query arg
|
|
247
|
+
:returns: Websocket
|
|
248
|
+
"""
|
|
249
|
+
|
|
250
|
+
url = "http://docker/v" + self._api_version + "/" + path
|
|
251
|
+
connection = await self._session.ws_connect(url, origin="http://docker", autoping=True)
|
|
252
|
+
return connection
|
|
253
|
+
|
|
254
|
+
@locking
|
|
255
|
+
async def pull_image(self, image, progress_callback=None):
|
|
256
|
+
"""
|
|
257
|
+
Pulls an image from the Docker repository
|
|
258
|
+
|
|
259
|
+
:params image: Image name
|
|
260
|
+
:params progress_callback: A function that receive a log message about image download progress
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
try:
|
|
264
|
+
await self.query("GET", f"images/{image}/json")
|
|
265
|
+
return # We already have the image skip the download
|
|
266
|
+
except DockerHttp404Error:
|
|
267
|
+
pass
|
|
268
|
+
|
|
269
|
+
if progress_callback:
|
|
270
|
+
progress_callback(f"Pulling '{image}' from docker hub")
|
|
271
|
+
try:
|
|
272
|
+
response = await self.http_query("POST", "images/create", params={"fromImage": image}, timeout=None)
|
|
273
|
+
except DockerError as e:
|
|
274
|
+
raise DockerError(
|
|
275
|
+
f"Could not pull the '{image}' image from Docker Hub, "
|
|
276
|
+
f"please check your Internet connection (original error: {e})"
|
|
277
|
+
)
|
|
278
|
+
# The pull api will stream status via an HTTP JSON stream
|
|
279
|
+
content = ""
|
|
280
|
+
while True:
|
|
281
|
+
try:
|
|
282
|
+
chunk = await response.content.read(CHUNK_SIZE)
|
|
283
|
+
except aiohttp.ServerDisconnectedError:
|
|
284
|
+
log.error(f"Disconnected from server while pulling Docker image '{image}' from docker hub")
|
|
285
|
+
break
|
|
286
|
+
except asyncio.TimeoutError:
|
|
287
|
+
log.error(f"Timeout while pulling Docker image '{image}' from docker hub")
|
|
288
|
+
break
|
|
289
|
+
if not chunk:
|
|
290
|
+
break
|
|
291
|
+
content += chunk.decode("utf-8")
|
|
292
|
+
|
|
293
|
+
try:
|
|
294
|
+
while True:
|
|
295
|
+
content = content.lstrip(" \r\n\t")
|
|
296
|
+
answer, index = json.JSONDecoder().raw_decode(content)
|
|
297
|
+
if "progress" in answer and progress_callback:
|
|
298
|
+
progress_callback("Pulling image {}:{}: {}".format(image, answer["id"], answer["progress"]))
|
|
299
|
+
content = content[index:]
|
|
300
|
+
except ValueError: # Partial JSON
|
|
301
|
+
pass
|
|
302
|
+
response.close()
|
|
303
|
+
if progress_callback:
|
|
304
|
+
progress_callback(f"Success pulling image {image}")
|
|
305
|
+
|
|
306
|
+
async def list_images(self):
|
|
307
|
+
"""
|
|
308
|
+
Gets Docker image list.
|
|
309
|
+
|
|
310
|
+
:returns: list of dicts
|
|
311
|
+
:rtype: list
|
|
312
|
+
"""
|
|
313
|
+
|
|
314
|
+
images = []
|
|
315
|
+
for image in await self.query("GET", "images/json", params={"all": 0}):
|
|
316
|
+
if image["RepoTags"]:
|
|
317
|
+
for tag in image["RepoTags"]:
|
|
318
|
+
if tag != "<none>:<none>":
|
|
319
|
+
images.append({"image": tag})
|
|
320
|
+
return sorted(images, key=lambda i: i["image"])
|