Skip to content

Commit

Permalink
Merge branch 'dev' into gns-125
Browse files Browse the repository at this point in the history
  • Loading branch information
jseutter committed Nov 7, 2014
2 parents 6105a16 + d866ced commit 0698b39
Show file tree
Hide file tree
Showing 25 changed files with 350 additions and 260 deletions.
49 changes: 49 additions & 0 deletions gns3/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
Main window for the GUI.
"""

import traceback
import sys
import os
import platform
import time
Expand Down Expand Up @@ -1234,6 +1236,47 @@ def saveProject(self, path):
self._setCurrentFile(path)
return True

def _convertOldProject(self, path):
"""
Converts old ini-style GNS3 topologies (<=0.8.7) to the newer version 1+ JSON format.
:param path: path to the project file.
"""

try:
from gns3converter.main import do_conversion
except ImportError:
QtGui.QMessageBox.critical(self, "GNS3 converter", "Please install GNS3 converter in order to open old ini-style GNS3 projects")
return

try:
project_name = os.path.basename(os.path.dirname(path))
project_dir = os.path.join(self._settings["projects_path"], project_name)

while os.path.isdir(project_dir):
text, ok = QtGui.QInputDialog.getText(self,
"GNS3 converter",
"Project '{}' already exists. Please choose an alternative project name:".format(project_name),
text=project_name + "2")
if ok:
project_name = text
project_dir = os.path.join(self._settings["projects_path"], project_name)
else:
return

topology_def = {'file': path, 'snapshot': False}
do_conversion(topology_def, project_name, project_dir)
except Exception:
exc_type, exc_value, exc_tb = sys.exc_info()
lines = traceback.format_exception(exc_type, exc_value, exc_tb)
tb = "".join(lines)
MessageBox(self, "GNS3 converter", "Could not convert project {}".format(path), details=tb)
return

QtGui.QMessageBox.information(self, "GNS3 converter", "Your project has been converted to a new format and can be found in: {}".format(project_dir))
project_path = os.path.join(project_dir, project_name + ".gns3")
self.loadProject(project_path)

def loadProject(self, path):
"""
Loads a project into GNS3.
Expand All @@ -1244,6 +1287,12 @@ def loadProject(self, path):
self.uiGraphicsView.reset()
topology = Topology.instance()
try:

extension = os.path.splitext(path)[1]
if extension == ".net":
self._convertOldProject(path)
return

QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
with open(path, "r") as f:
need_to_save = False
Expand Down
55 changes: 12 additions & 43 deletions gns3/modules/dynamips/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@
from .nodes.ethernet_hub import EthernetHub
from .nodes.frame_relay_switch import FrameRelaySwitch
from .nodes.atm_switch import ATMSwitch
from .settings import DYNAMIPS_SETTINGS, DYNAMIPS_SETTING_TYPES, PLATFORMS_DEFAULT_RAM
from .settings import DYNAMIPS_SETTINGS, DYNAMIPS_SETTING_TYPES
from .settings import IOS_ROUTER_SETTINGS, IOS_ROUTER_SETTING_TYPES
from .settings import PLATFORMS_DEFAULT_RAM

PLATFORM_TO_CLASS = {
"c1700": C1700,
Expand Down Expand Up @@ -111,54 +113,18 @@ def _loadIOSRouters(self):
settings = QtCore.QSettings()
settings.beginGroup("IOSRouters")

#FIXME: this is ugly
# load the IOS images
size = settings.beginReadArray("ios_router")
for index in range(0, size):
settings.setArrayIndex(index)
name = settings.value("name", "")
path = settings.value("path", "")
image = settings.value("image", "")
startup_config = settings.value("startup_config", "")
private_config = settings.value("private_config", "")
default_symbol = settings.value("default_symbol", ":/symbols/router.normal.svg")
hover_symbol = settings.value("hover_symbol", ":/symbols/router.selected.svg")
category = settings.value("category", Node.routers, type=int)
platform = settings.value("platform", "")
chassis = settings.value("chassis", "")
idlepc = settings.value("idlepc", "")
mac_addr = settings.value("mac_addr", "")
ram = settings.value("ram", 128, type=int)
nvram = settings.value("nvram", 256, type=int)
disk0 = settings.value("disk0", 16, type=int)
disk1 = settings.value("disk1", 0, type=int)
confreg = settings.value("confreg", "0x2102")
system_id = settings.value("system_id", "FTX0945W0MY")
server = settings.value("server", "local")

name = settings.value("name")
server = settings.value("server")
key = "{server}:{name}".format(server=server, name=name)
if key in self._ios_routers:
if key in self._ios_routers or not name or not server:
continue

self._ios_routers[key] = {"name": name,
"path": path,
"image": image,
"default_symbol": default_symbol,
"hover_symbol": hover_symbol,
"category": category,
"startup_config": startup_config,
"private_config": private_config,
"platform": platform,
"chassis": chassis,
"idlepc": idlepc,
"ram": ram,
"nvram": nvram,
"mac_addr": mac_addr,
"disk0": disk0,
"disk1": disk1,
"confreg": confreg,
"system_id": system_id,
"server": server}
self._ios_routers[key] = {}
for setting_name, default_value in IOS_ROUTER_SETTINGS.items():
self._ios_routers[key][setting_name] = settings.value(setting_name, default_value, IOS_ROUTER_SETTING_TYPES[setting_name])

for slot_id in range(0, 7):
slot = "slot{}".format(slot_id)
Expand All @@ -170,6 +136,9 @@ def _loadIOSRouters(self):
if settings.contains(wic):
self._ios_routers[key][wic] = settings.value(wic, "")

platform = self._ios_routers[key]["platform"]
chassis = self._ios_routers[key]["chassis"]

if platform == "c7200":
self._ios_routers[key]["midplane"] = settings.value("midplane", "vxr")
self._ios_routers[key]["npe"] = settings.value("npe", "npe-400")
Expand Down
39 changes: 15 additions & 24 deletions gns3/modules/dynamips/pages/ios_router_preferences_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@
import zipfile

from gns3.qt import QtCore, QtGui
from gns3.node import Node
from gns3.main_window import MainWindow
from gns3.utils.progress_dialog import ProgressDialog
from gns3.dialogs.symbol_selection_dialog import SymbolSelectionDialog
from gns3.dialogs.configuration_dialog import ConfigurationDialog
from gns3.cloud.utils import UploadFileThread

from .. import Dynamips
from ..settings import IOS_ROUTER_SETTINGS
from ..utils.decompress_ios import isIOSCompressed
from ..utils.decompress_ios_thread import DecompressIOSThread
from .. import Dynamips
from ..ui.ios_router_preferences_page_ui import Ui_IOSRouterPreferencesPageWidget
from ..pages.ios_router_configuration_page import IOSRouterConfigurationPage
from ..dialogs.ios_router_wizard import IOSRouterWizard
Expand Down Expand Up @@ -110,25 +110,11 @@ def _iosRouterNewSlot(self):
ios_base_config_path = pkg_resources.resource_filename("gns3", resource_name)
private_config = os.path.normpath(ios_base_config_path)

self._ios_routers[key] = {"name": ios_settings["name"],
"path": ios_settings["path"],
"image": ios_settings["image"],
"default_symbol": ":/symbols/router.normal.svg",
"hover_symbol": ":/symbols/router.selected.svg",
"category": Node.routers,
"startup_config": startup_config,
"private_config": private_config,
"platform": ios_settings["platform"],
"chassis": ios_settings["chassis"],
"idlepc": ios_settings["idlepc"],
"ram": ios_settings["ram"],
"nvram": 256,
"mac_addr": "",
"disk0": 1,
"disk1": 0,
"confreg": "0x2102",
"system_id": "FTX0945W0MY",
"server": ios_settings["server"]}
ios_settings["startup_config"] = startup_config
ios_settings["private_config"] = private_config

self._ios_routers[key] = IOS_ROUTER_SETTINGS.copy()
self._ios_routers[key].update(ios_settings)

if ios_settings["server"] == 'cloud':
import logging
Expand Down Expand Up @@ -193,11 +179,16 @@ def _iosRouterEditSlot(self):
dialog.show()
if dialog.exec_():
if ios_router["name"] != item.text(0):
if "{}:{}".format(ios_router["server"], ios_router["name"]) in self._ios_routers:
# FIXME: bug when changing name
QtGui.QMessageBox.critical(self, "New IOS router", "IOS router name {} already exists".format(ios_router["name"]))
new_key = "{server}:{name}".format(server=ios_router["server"], name=ios_router["name"])
if new_key in self._ios_routers:
QtGui.QMessageBox.critical(self, "IOS router", "IOS router name {} already exists for server {}".format(ios_router["name"],
ios_router["server"]))
ios_router["name"] = item.text(0)
return
self._ios_routers[new_key] = self._ios_routers[key]
del self._ios_routers[key]
item.setText(0, ios_router["name"])
item.setData(0, QtCore.Qt.UserRole, new_key)
self._refreshInfo(ios_router)

def _iosRouterDeleteSlot(self):
Expand Down
47 changes: 46 additions & 1 deletion gns3/modules/dynamips/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@
Default Dynamips settings.
"""

from gns3.node import Node

import sys
import os
from collections import OrderedDict


# default path to Dynamips executable
Expand Down Expand Up @@ -81,6 +82,50 @@
"mmap_support": bool,
}

IOS_ROUTER_SETTINGS = {
"name": "",
"path": "",
"image": "",
"default_symbol": ":/symbols/router.normal.svg",
"hover_symbol": ":/symbols/router.selected.svg",
"category": Node.routers,
"startup_config": "",
"private_config": "",
"platform": "",
"chassis": "",
"idlepc": "",
"ram": 128,
"nvram": 256,
"mac_addr": "",
"disk0": 1,
"disk1": 0,
"confreg": "0x2102",
"system_id": "FTX0945W0MY",
"server": "local"
}

IOS_ROUTER_SETTING_TYPES = {
"name": str,
"path": str,
"image": str,
"default_symbol": str,
"hover_symbol": str,
"category": int,
"startup_config": str,
"private_config": str,
"platform": str,
"chassis": str,
"idlepc": str,
"ram": int,
"nvram": int,
"mac_addr": str,
"disk0": int,
"disk1": int,
"confreg": str,
"system_id": str,
"server": str
}

# supported platforms with the default RAM value
PLATFORMS_DEFAULT_RAM = {"c1700": 64,
"c2600": 64,
Expand Down
34 changes: 8 additions & 26 deletions gns3/modules/iou/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from ..module_error import ModuleError
from .iou_device import IOUDevice
from .settings import IOU_SETTINGS, IOU_SETTING_TYPES
from .settings import IOU_DEVICE_SETTINGS, IOU_DEVICE_SETTING_TYPES

import logging
log = logging.getLogger(__name__)
Expand Down Expand Up @@ -91,33 +92,14 @@ def _loadIOUDevices(self):
size = settings.beginReadArray("iou_device")
for index in range(0, size):
settings.setArrayIndex(index)
name = settings.value("name", "IOU{}".format(index + 1))
default_symbol = settings.value("default_symbol", ":/symbols/multilayer_switch.normal.svg")
hover_symbol = settings.value("hover_symbol", ":/symbols/multilayer_switch.selected.svg")
category = settings.value("category", Node.routers, type=int)
path = settings.value("path", "")
image = settings.value("image", "")
initial_config = settings.value("initial_config", "")
use_default_iou_values = settings.value("use_default_iou_values", True, type=bool)
ram = settings.value("ram", 256, type=int)
nvram = settings.value("nvram", 128, type=int)
ethernet_adapters = settings.value("ethernet_adapters", 2, type=int)
serial_adapters = settings.value("serial_adapters", 2, type=int)
server = settings.value("server", "local")
name = settings.value("name")
server = settings.value("server")
key = "{server}:{name}".format(server=server, name=name)
self._iou_devices[key] = {"name": name,
"path": path,
"default_symbol": default_symbol,
"hover_symbol": hover_symbol,
"category": category,
"image": image,
"initial_config": initial_config,
"use_default_iou_values": use_default_iou_values,
"ram": ram,
"nvram": nvram,
"ethernet_adapters": ethernet_adapters,
"serial_adapters": serial_adapters,
"server": server}
if key in self._iou_devices or not name or not server:
continue
self._iou_devices[key] = {}
for setting_name, default_value in IOU_DEVICE_SETTINGS.items():
self._iou_devices[key][setting_name] = settings.value(setting_name, default_value, IOU_DEVICE_SETTING_TYPES[setting_name])

settings.endArray()
settings.endGroup()
Expand Down
11 changes: 6 additions & 5 deletions gns3/modules/iou/iou_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from gns3.ports.ethernet_port import EthernetPort
from gns3.ports.serial_port import SerialPort
from gns3.utils.normalize_filename import normalize_filename
from .settings import IOU_DEVICE_SETTINGS

import logging
log = logging.getLogger(__name__)
Expand Down Expand Up @@ -54,11 +55,11 @@ def __init__(self, module, server):
"path": "",
"initial_config": "",
"l1_keepalives": False,
"use_default_iou_values": True,
"ram": 256,
"nvram": 128,
"ethernet_adapters": 2,
"serial_adapters": 2,
"use_default_iou_values": IOU_DEVICE_SETTINGS["use_default_iou_values"],
"ram": IOU_DEVICE_SETTINGS["ram"],
"nvram": IOU_DEVICE_SETTINGS["nvram"],
"ethernet_adapters": IOU_DEVICE_SETTINGS["ethernet_adapters"],
"serial_adapters": IOU_DEVICE_SETTINGS["serial_adapters"],
"console": None}

#self._occupied_slots = []
Expand Down
Loading

0 comments on commit 0698b39

Please sign in to comment.