Clean the Dynamips client implementation (still some to do).

Add support for more NIOs on for non-router devices.
Improve the node configurator for group settings.
Delete extra resources file.
This commit is contained in:
grossmj
2014-02-05 15:56:51 -07:00
parent 3476f834de
commit c9f309b680
21 changed files with 568 additions and 238669 deletions

View File

@@ -22,7 +22,6 @@ Asynchronously sends JSON messages to the GNS3 server and receives responses wit
from gns3.node import Node
from gns3.ports.serial_port import SerialPort
from gns3.nios.nio_udp import NIO_UDP
import logging
log = logging.getLogger(__name__)
@@ -46,27 +45,31 @@ class ATMSwitch(Node):
def setup(self, name=None):
"""
Setups this switch.
Setups this ATM switch.
:param image: IOS image path
:param ram: amount of RAM
:param name: optional name for this router
:param name: optional name for this switch.
"""
self._server.send_message("dynamips.atmsw.create", None, self.setupCallback)
self._server.send_message("dynamips.atmsw.create", None, self._setupCallback)
def setupCallback(self, response, error=False):
def _setupCallback(self, result, error=False):
"""
Callback for the setup.
Callback for setup.
:param result: server response
:param error: ..
:param error: indicates an error (boolean)
"""
self._atmsw_id = response["id"]
self._settings["name"] = response["name"]
if error:
log.error("error while setting up {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
return
# let the GUI knows about this router name
self._atmsw_id = result["id"]
self._settings["name"] = result["name"]
log.info("ATM switch {} has been created".format(result["name"]))
# let the GUI knows about this switch name
self.newname_signal.emit(self._settings["name"])
def delete(self):
@@ -74,13 +77,14 @@ class ATMSwitch(Node):
Deletes this ATM switch.
"""
log.debug("ATM switch {} is being deleted".format(self.name()))
# first delete all the links attached to this node
self.delete_links_signal.emit()
self._server.send_message("dynamips.atmsw.delete", {"id": self._atmsw_id}, self._deleteCallback)
def _deleteCallback(self, result, error=False):
"""
Callback for the delete method.
Callback for delete.
:param result: server response
:param error: indicates an error (boolean)
@@ -90,7 +94,7 @@ class ATMSwitch(Node):
log.error("error while deleting {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
else:
log.info("{} has been deleted".format(self.name()))
log.info("ATM switch {} has been deleted".format(self.name()))
self.delete_signal.emit()
def update(self, new_settings):
@@ -102,7 +106,6 @@ class ATMSwitch(Node):
ports_to_create = []
mapping = new_settings["mapping"]
print(mapping)
for source, destination in mapping.items():
source_port = source.split(":")[0]
@@ -122,15 +125,10 @@ class ATMSwitch(Node):
port = SerialPort(port_name)
port.port = int(port_name)
self._ports.append(port)
log.debug("port {} has been added".format(port_name))
self._settings["mapping"] = new_settings["mapping"].copy()
#self._server.send_message("dynamips.ethsw.update", params, self.updateCallback)
def updateCallback(self, response, error=False):
print(response)
def allocateUDPPort(self):
"""
Requests an UDP port allocation.
@@ -164,14 +162,12 @@ class ATMSwitch(Node):
:param nio: NIO object.
"""
if isinstance(nio, NIO_UDP):
params = {"id": self._atmsw_id,
"nio": "NIO_UDP",
"port": port.port,
"lport": nio.lport,
"rhost": nio.rhost,
"rport": nio.rport}
nio_type = str(nio)
params = {"id": self._atmsw_id,
"nio": nio_type,
"port": port.port}
self.addNIOInfo(nio, params)
params["mapping"] = {}
for source, destination in self._settings["mapping"].items():
source_port = source.split(":")[0]
@@ -180,8 +176,8 @@ class ATMSwitch(Node):
params["mapping"][source] = destination
if port.name == destination_port:
params["mapping"][destination] = source
log.debug("{} is adding an UDP NIO: {}".format(self.name(), params))
log.debug("{} is adding an {}: {}".format(self.name(), nio_type, params))
self._server.send_message("dynamips.atmsw.add_nio", params, self._addNIOCallback)
def _addNIOCallback(self, result, error=False):
@@ -196,24 +192,36 @@ class ATMSwitch(Node):
log.error("error while adding an UDP NIO for {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
else:
log.info("{} has added a new NIO: {}".format(self.name(), result))
self.nio_signal.emit(self.id)
def deleteNIO(self, port):
"""
Deletes an NIO from the specified port on this switch.
:param port: Port object.
"""
params = {"id": self._atmsw_id,
"port": port.port}
port.nio = None
log.debug("{} is deleting an NIO: {}".format(self.name(), params))
self._server.send_message("dynamips.atmsw.delete_nio", params, self.deleteNIOCallback)
def deleteNIOCallback(self, result, error=False):
"""
Callback for deleteNIO.
print("NIO deleted!")
print(result)
:param result: server response
:param error: indicates an error (boolean)
"""
log.info("{} has deleted a NIO: {}".format(self.name(), result))
def name(self):
"""
Returns the name of this router.
Returns the name of this switch.
:returns: name (string)
"""
@@ -222,7 +230,7 @@ class ATMSwitch(Node):
def settings(self):
"""
Returns all this router settings.
Returns all this switch settings.
:returns: settings dictionary
"""
@@ -231,7 +239,7 @@ class ATMSwitch(Node):
def ports(self):
"""
Returns all the ports for this router.
Returns all the ports for this switch.
:returns: list of Port objects
"""

View File

@@ -59,17 +59,6 @@ class Cloud(Node):
self._settings = {"nios": [],
"interfaces": []}
def setup(self, name=None):
"""
Setups this cloud.
:param image: IOS image path
:param ram: amount of RAM
:param name: optional name for this router
"""
self._server.send_message("dynamips.nio.get_interfaces", None, self.setupCallback)
def delete(self):
"""
Deletes this cloud.
@@ -79,18 +68,32 @@ class Cloud(Node):
self.delete_links_signal.emit()
self.delete_signal.emit()
def setupCallback(self, response, error=False):
def setup(self, name=None):
"""
Callback for the setup.
Setups this cloud.
:param name: optional name for this cloud
"""
self._server.send_message("dynamips.nio.get_interfaces", None, self._setupCallback)
def _setupCallback(self, response, error=False):
"""
Callback for setup.
:param result: server response
:param error: ..
:param error: indicates an error (boolean)
"""
for interface in response:
self._settings["interfaces"].append(interface)
def _createNIOUDP(self, nio):
"""
Creates a NIO UDP.
:param nio: nio string
"""
match = re.search(r"""^nio_udp:(\d+):(.+):(\d+)$""", nio)
if match:
@@ -101,6 +104,11 @@ class Cloud(Node):
return None
def _createNIOGenericEthernet(self, nio):
"""
Creates a NIO Generic Ethernet.
:param nio: nio string
"""
match = re.search(r"""^nio_gen_eth:(.+)$""", nio)
if match:
@@ -109,6 +117,11 @@ class Cloud(Node):
return None
def _createNIOLinuxEthernet(self, nio):
"""
Creates a NIO Linux Ethernet.
:param nio: nio string
"""
match = re.search(r"""^nio_gen_linux:(.+)$""", nio)
if match:
@@ -117,6 +130,11 @@ class Cloud(Node):
return None
def _createNIOTAP(self, nio):
"""
Creates a NIO TAP.
:param nio: nio string
"""
match = re.search(r"""^nio_tap:(.+)$""", nio)
if match:
@@ -125,6 +143,11 @@ class Cloud(Node):
return None
def _createNIOUNIX(self, nio):
"""
Creates a NIO UNIX.
:param nio: nio string
"""
match = re.search(r"""^nio_unix:(.+):(.+)$""", nio)
if match:
@@ -134,6 +157,11 @@ class Cloud(Node):
return None
def _createNIOVDE(self, nio):
"""
Creates a NIO VDE.
:param nio: nio string
"""
match = re.search(r"""^nio_vde:(.+):(.+)$""", nio)
if match:
@@ -143,6 +171,11 @@ class Cloud(Node):
return None
def _createNIONull(self, nio):
"""
Creates a NIO Null.
:param nio: nio string
"""
match = re.search(r"""^nio_null:(.+)$""", nio)
if match:
@@ -182,62 +215,28 @@ class Cloud(Node):
if nio_object == None:
log.error("Could not create NIO object from {}".format(nio))
continue
print("Create port for {}".format(nio))
port = Port(nio, nio_object, stub=True)
self._ports.append(port)
log.debug("port {} has been added".format(nio))
# delete ports
for nio in self._settings["nios"]:
if nio not in nios:
for port in self._ports.copy():
if port.name == nio:
print("Delete port {}".format(nio))
self._ports.remove(port)
log.debug("port {} has been deleted".format(nio))
break
self._settings = new_settings.copy()
# def addNIO(self, port, nio):
# """
# Adds a new NIO on the specified port for this router.
#
# :param port: Port object.
# :param nio: NIO object.
# """
#
# if isinstance(nio, NIO_UDP):
# params = {"id": self._router_id,
# "nio": "NIO_UDP",
# "slot": port.slot,
# "port": port.port,
# "lport": nio.lport,
# "rhost": nio.rhost,
# "rport": nio.rport}
# log.debug("{} is adding an UDP NIO: {}".format(self.name(), params))
#
# self._server.send_message("dynamips.vm.add_nio", params, self._addNIOCallback)
#
# def _addNIOCallback(self, result, error=False):
# """
# Callback for addNIO.
#
# :param result: server response
# :param error: indicates an error (boolean)
# """
#
# if error:
# log.error("error while adding an UDP NIO for {}: {}".format(self.name(), result["message"]))
# self.error_signal.emit(self.name(), result["code"], result["message"])
# else:
# self.nio_signal.emit(self.id)
def deleteNIO(self, port):
port.nio = None
def name(self):
"""
Returns the name of this router.
Returns the name of this cloud.
:returns: name (string)
"""
@@ -246,7 +245,7 @@ class Cloud(Node):
def settings(self):
"""
Returns all this router settings.
Returns all this cloud settings.
:returns: settings dictionary
"""
@@ -255,7 +254,7 @@ class Cloud(Node):
def ports(self):
"""
Returns all the ports for this router.
Returns all the ports for this cloud.
:returns: list of Port objects
"""

View File

@@ -22,7 +22,6 @@ Asynchronously sends JSON messages to the GNS3 server and receives responses wit
from gns3.node import Node
from gns3.ports.ethernet_port import EthernetPort
from gns3.nios.nio_udp import NIO_UDP
import logging
log = logging.getLogger(__name__)
@@ -48,25 +47,24 @@ class EthernetHub(Node):
"""
Setups this hub.
:param image: IOS image path
:param ram: amount of RAM
:param name: optional name for this router
:param name: optional name for this hub
"""
self._server.send_message("dynamips.ethhub.create", None, self.setupCallback)
self._server.send_message("dynamips.ethhub.create", None, self._setupCallback)
def setupCallback(self, response, error=False):
def _setupCallback(self, result, error=False):
"""
Callback for the setup.
Callback for setup.
:param result: server response
:param error: ..
:param error: indicates an error (boolean)
"""
self._ethhub_id = response["id"]
self._settings["name"] = response["name"]
self._ethhub_id = result["id"]
self._settings["name"] = result["name"]
# let the GUI knows about this router name
# let the GUI knows about this hub name
log.info("Ethernet hub {} has been created".format(result["name"]))
self.newname_signal.emit(self._settings["name"])
def delete(self):
@@ -74,13 +72,14 @@ class EthernetHub(Node):
Deletes this Ethernet hub.
"""
log.debug("Ethernet hub {} is being deleted".format(self.name()))
# first delete all the links attached to this node
self.delete_links_signal.emit()
self._server.send_message("dynamips.ethhub.delete", {"id": self._ethhub_id}, self._deleteCallback)
def _deleteCallback(self, result, error=False):
"""
Callback for the delete method.
Callback for delete.
:param result: server response
:param error: indicates an error (boolean)
@@ -95,7 +94,7 @@ class EthernetHub(Node):
def update(self, new_settings):
"""
Updates the settings for this cloud.
Updates the settings for this Ethernet hub.
:param new_settings: settings dictionary
"""
@@ -110,6 +109,7 @@ class EthernetHub(Node):
for port in self._ports.copy():
if port.isFree():
self._ports.remove(port)
log.debug("port {} has been removed".format(port.name))
else:
ports_to_create.remove(port.name)
@@ -117,13 +117,10 @@ class EthernetHub(Node):
port = EthernetPort(port_name)
port.port = int(port_name)
self._ports.append(port)
log.debug("port {} has been added".format(port_name))
self._settings["ports"] = new_settings["ports"].copy()
def updateCallback(self, response, error=False):
print(response)
def allocateUDPPort(self):
"""
Requests an UDP port allocation.
@@ -151,21 +148,19 @@ class EthernetHub(Node):
def addNIO(self, port, nio):
"""
Adds a new NIO on the specified port for this router.
Adds a new NIO on the specified port for this hub.
:param port: Port object.
:param nio: NIO object.
"""
if isinstance(nio, NIO_UDP):
params = {"id": self._ethhub_id,
"nio": "NIO_UDP",
"port": port.port,
"lport": nio.lport,
"rhost": nio.rhost,
"rport": nio.rport}
log.debug("{} is adding an UDP NIO: {}".format(self.name(), params))
nio_type = str(nio)
params = {"id": self._ethhub_id,
"nio": nio_type,
"port": port.port}
self.addNIOInfo(nio, params)
log.debug("{} is adding an {}: {}".format(self.name(), nio_type, params))
self._server.send_message("dynamips.ethhub.add_nio", params, self._addNIOCallback)
def _addNIOCallback(self, result, error=False):
@@ -183,21 +178,32 @@ class EthernetHub(Node):
self.nio_signal.emit(self.id)
def deleteNIO(self, port):
"""
Deletes an NIO from the specified port on this hub.
:param port: Port object.
"""
params = {"id": self._ethhub_id,
"port": port.port}
port.nio = None
self._server.send_message("dynamips.ethhub.delete_nio", params, self.deleteNIOCallback)
log.debug("{} is deleting an NIO: {}".format(self.name(), params))
self._server.send_message("dynamips.ethhub.delete_nio", params, self._deleteNIOCallback)
def deleteNIOCallback(self, result, error=False):
def _deleteNIOCallback(self, result, error=False):
"""
Callback for deleteNIO.
print("NIO deleted!")
print(result)
:param result: server response
:param error: indicates an error (boolean)
"""
log.info("{} has deleted a NIO: {}".format(self.name(), result))
def name(self):
"""
Returns the name of this router.
Returns the name of this hub.
:returns: name (string)
"""
@@ -206,7 +212,7 @@ class EthernetHub(Node):
def settings(self):
"""
Returns all this router settings.
Returns all this hub settings.
:returns: settings dictionary
"""
@@ -215,7 +221,7 @@ class EthernetHub(Node):
def ports(self):
"""
Returns all the ports for this router.
Returns all the ports for this hub.
:returns: list of Port objects
"""

View File

@@ -22,7 +22,6 @@ Asynchronously sends JSON messages to the GNS3 server and receives responses wit
from gns3.node import Node
from gns3.ports.ethernet_port import EthernetPort
from gns3.nios.nio_udp import NIO_UDP
import logging
log = logging.getLogger(__name__)
@@ -35,8 +34,6 @@ class EthernetSwitch(Node):
:param server: GNS3 server instance
"""
#_name_instance_count = 1
def __init__(self, server):
Node.__init__(self)
@@ -46,34 +43,33 @@ class EthernetSwitch(Node):
self._settings = {"name": "",
"ports": {}}
# create an unique id and name
# self._name_id = EthernetSwitch._name_instance_count
# EthernetSwitch._name_instance_count += 1
# self._name = "SW{}".format(self._name_id)
def setup(self, name=None):
"""
Setups this switch.
Setups this Ethernet switch.
:param image: IOS image path
:param ram: amount of RAM
:param name: optional name for this router
:param name: optional name for this switch
"""
self._server.send_message("dynamips.ethsw.create", None, self.setupCallback)
self._server.send_message("dynamips.ethsw.create", None, self._setupCallback)
def setupCallback(self, response, error=False):
def _setupCallback(self, result, error=False):
"""
Callback for the setup.
Callback for setup.
:param result: server response
:param error: ..
:param error: indicates an error (boolean)
"""
self._ethsw_id = response["id"]
self._settings["name"] = response["name"]
if error:
log.error("error while setting up {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
return
# let the GUI knows about this router name
self._ethsw_id = result["id"]
self._settings["name"] = result["name"]
log.info("Ethernet switch {} has been created".format(result["name"]))
# let the GUI knows about this switch name
self.newname_signal.emit(self._settings["name"])
def delete(self):
@@ -81,13 +77,14 @@ class EthernetSwitch(Node):
Deletes this Ethernet switch.
"""
log.debug("Ethernet switch {} is being deleted".format(self.name()))
# first delete all the links attached to this node
self.delete_links_signal.emit()
self._server.send_message("dynamips.ethsw.delete", {"id": self._ethsw_id}, self._deleteCallback)
def _deleteCallback(self, result, error=False):
"""
Callback for the delete method.
Callback for delete.
:param result: server response
:param error: indicates an error (boolean)
@@ -97,7 +94,7 @@ class EthernetSwitch(Node):
log.error("error while deleting {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
else:
log.info("{} has been deleted".format(self.name()))
log.info("Ethernet switch {} has been deleted".format(self.name()))
self.delete_signal.emit()
def update(self, new_settings):
@@ -121,19 +118,31 @@ class EthernetSwitch(Node):
port = EthernetPort(str(port_id))
port.port = port_id
self._ports.append(port)
log.debug("port {} has been added".format(port_id))
if ports_to_update:
params = {"id": self._ethsw_id,
"ports": {}}
for port_id, info in ports_to_update.items():
params["ports"][port_id] = info
self._server.send_message("dynamips.ethsw.update", params, self.updateCallback)
log.debug("{} is being updated: {}".format(self.name(), params))
self._server.send_message("dynamips.ethsw.update", params, self._updateCallback)
self._settings["ports"] = new_settings["ports"].copy()
def updateCallback(self, response, error=False):
def _updateCallback(self, result, error=False):
"""
Callback for update.
print(response)
:param result: server response
:param error: indicates an error (boolean)
"""
if error:
log.error("error while updating {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
else:
log.info("{} has been updated".format(self.name()))
def allocateUDPPort(self):
"""
@@ -162,24 +171,22 @@ class EthernetSwitch(Node):
def addNIO(self, port, nio):
"""
Adds a new NIO on the specified port for this router.
Adds a new NIO on the specified port for this switch.
:param port: Port object.
:param nio: NIO object.
"""
port_info = self._settings["ports"][port.port]
if isinstance(nio, NIO_UDP):
params = {"id": self._ethsw_id,
"nio": "NIO_UDP",
"port": port.port,
"vlan": port_info["vlan"],
"port_type": port_info["type"],
"lport": nio.lport,
"rhost": nio.rhost,
"rport": nio.rport}
log.debug("{} is adding an UDP NIO: {}".format(self.name(), params))
nio_type = str(nio)
params = {"id": self._ethsw_id,
"nio": nio_type,
"port": port.port,
"vlan": port_info["vlan"],
"port_type": port_info["type"]}
self.addNIOInfo(nio, params)
log.debug("{} is adding an {}: {}".format(self.name(), nio_type, params))
self._server.send_message("dynamips.ethsw.add_nio", params, self._addNIOCallback)
def _addNIOCallback(self, result, error=False):
@@ -194,24 +201,36 @@ class EthernetSwitch(Node):
log.error("error while adding an UDP NIO for {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
else:
log.info("{} has added a new NIO: {}".format(self.name(), result))
self.nio_signal.emit(self.id)
def deleteNIO(self, port):
"""
Deletes an NIO from the specified port on this switch.
:param port: Port object.
"""
params = {"id": self._ethsw_id,
"port": port.port}
port.nio = None
self._server.send_message("dynamips.ethsw.delete_nio", params, self.deleteNIOCallback)
log.debug("{} is deleting an NIO: {}".format(self.name(), params))
self._server.send_message("dynamips.ethsw.delete_nio", params, self._deleteNIOCallback)
def deleteNIOCallback(self, result, error=False):
def _deleteNIOCallback(self, result, error=False):
"""
Callback for deleteNIO.
print("NIO deleted!")
print(result)
:param result: server response
:param error: indicates an error (boolean)
"""
log.info("{} has deleted a NIO: {}".format(self.name(), result))
def name(self):
"""
Returns the name of this router.
Returns the name of this switch.
:returns: name (string)
"""
@@ -220,7 +239,7 @@ class EthernetSwitch(Node):
def settings(self):
"""
Returns all this router settings.
Returns all this switch settings.
:returns: settings dictionary
"""
@@ -229,7 +248,7 @@ class EthernetSwitch(Node):
def ports(self):
"""
Returns all the ports for this router.
Returns all the ports for this switch.
:returns: list of Port objects
"""

View File

@@ -22,7 +22,6 @@ Asynchronously sends JSON messages to the GNS3 server and receives responses wit
from gns3.node import Node
from gns3.ports.serial_port import SerialPort
from gns3.nios.nio_udp import NIO_UDP
import logging
log = logging.getLogger(__name__)
@@ -46,27 +45,26 @@ class FrameRelaySwitch(Node):
def setup(self, name=None):
"""
Setups this switch.
Setups this Frame Relay switch.
:param image: IOS image path
:param ram: amount of RAM
:param name: optional name for this router
:param name: optional name for this switch.
"""
self._server.send_message("dynamips.frsw.create", None, self.setupCallback)
self._server.send_message("dynamips.frsw.create", None, self._setupCallback)
def setupCallback(self, response, error=False):
def _setupCallback(self, result, error=False):
"""
Callback for the setup.
Callback for setup.
:param result: server response
:param error: ..
:param error: indicates an error (boolean)
"""
self._frsw_id = response["id"]
self._settings["name"] = response["name"]
self._frsw_id = result["id"]
self._settings["name"] = result["name"]
# let the GUI knows about this router name
# let the GUI knows about this switch name
log.info("Frame Relay switch {} has been created".format(result["name"]))
self.newname_signal.emit(self._settings["name"])
def delete(self):
@@ -74,6 +72,7 @@ class FrameRelaySwitch(Node):
Deletes this Frame Relay switch.
"""
log.debug("Frame Relay switch {} is being deleted".format(self.name()))
# first delete all the links attached to this node
self.delete_links_signal.emit()
self._server.send_message("dynamips.frsw.delete", {"id": self._frsw_id}, self._deleteCallback)
@@ -114,6 +113,7 @@ class FrameRelaySwitch(Node):
for port in self._ports.copy():
if port.isFree():
self._ports.remove(port)
log.debug("port {} has been removed".format(port.name))
else:
ports_to_create.remove(port.name)
@@ -121,15 +121,10 @@ class FrameRelaySwitch(Node):
port = SerialPort(port_name)
port.port = int(port_name)
self._ports.append(port)
log.debug("port {} has been added".format(port_name))
self._settings["mapping"] = new_settings["mapping"].copy()
# self._server.send_message("dynamips.ethsw.update", params, self.updateCallback)
def updateCallback(self, response, error=False):
print(response)
def allocateUDPPort(self):
"""
Requests an UDP port allocation.
@@ -163,14 +158,12 @@ class FrameRelaySwitch(Node):
:param nio: NIO object.
"""
if isinstance(nio, NIO_UDP):
params = {"id": self._frsw_id,
"nio": "NIO_UDP",
"port": port.port,
"lport": nio.lport,
"rhost": nio.rhost,
"rport": nio.rport}
nio_type = str(nio)
params = {"id": self._frsw_id,
"nio": nio_type,
"port": port.port}
self.addNIOInfo(nio, params)
params["mapping"] = {}
for source, destination in self._settings["mapping"].items():
source_port = source.split(":")[0]
@@ -181,6 +174,7 @@ class FrameRelaySwitch(Node):
params["mapping"][destination] = source
log.debug("{} is adding an UDP NIO: {}".format(self.name(), params))
log.debug("{} is adding an {}: {}".format(self.name(), nio_type, params))
self._server.send_message("dynamips.frsw.add_nio", params, self._addNIOCallback)
def _addNIOCallback(self, result, error=False):
@@ -195,24 +189,36 @@ class FrameRelaySwitch(Node):
log.error("error while adding an UDP NIO for {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
else:
log.info("{} has added a new NIO: {}".format(self.name(), result))
self.nio_signal.emit(self.id)
def deleteNIO(self, port):
"""
Deletes an NIO from the specified port on this switch.
:param port: Port object.
"""
params = {"id": self._frsw_id,
"port": port.port}
port.nio = None
self._server.send_message("dynamips.frsw.delete_nio", params, self.deleteNIOCallback)
log.debug("{} is deleting an NIO: {}".format(self.name(), params))
self._server.send_message("dynamips.frsw.delete_nio", params, self._deleteNIOCallback)
def deleteNIOCallback(self, result, error=False):
def _deleteNIOCallback(self, result, error=False):
"""
Callback for deleteNIO.
print("NIO deleted!")
print(result)
:param result: server response
:param error: indicates an error (boolean)
"""
log.info("{} has deleted a NIO: {}".format(self.name(), result))
def name(self):
"""
Returns the name of this router.
Returns the name of this switch.
:returns: name (string)
"""
@@ -221,7 +227,7 @@ class FrameRelaySwitch(Node):
def settings(self):
"""
Returns all this router settings.
Returns all this switch settings.
:returns: settings dictionary
"""
@@ -230,7 +236,7 @@ class FrameRelaySwitch(Node):
def ports(self):
"""
Returns all the ports for this router.
Returns all the ports for this switch.
:returns: list of Port objects
"""

View File

@@ -39,6 +39,7 @@ class Router(Node):
def __init__(self, server, platform="c7200"):
Node.__init__(self)
log.info("router {} is being created".format(platform))
self._server = server
self._defaults = {}
self._ports = []
@@ -74,11 +75,9 @@ class Router(Node):
"wic1": None,
"wic2": None}
#self._ethernet_wic_port_id = 0
#self._serial_wic_port_id = 0
def _addAdapterPorts(self, adapter, slot_id):
"""
Adds ports based on what adapter is inserted in which slot.
:param adapter: adapter name
:param slot_id: slot identifier (integer)
@@ -96,16 +95,23 @@ class Router(Node):
new_port.slot = slot_id
new_port.port = port_id
self._ports.append(new_port)
log.debug("port {} has been added".format(port_name))
def _removeAdapterPorts(self, slot_id):
"""
Removes ports when an adapter is removed from a slot.
:param slot_id: slot identifier (integer)
"""
for port in self._ports.copy():
if port.slot == slot_id:
self._ports.remove(port)
log.debug("port {} has been removed".format(port.name))
def _addWICPorts(self, wic, wic_slot_id):
"""
Adds ports based on what WIC is inserted in which slot.
:param wic: WIC name
:param wic_slot_id: WIC slot identifier (integer)
@@ -122,8 +128,14 @@ class Router(Node):
# Dynamips WICs slot IDs start on a multiple of 16.
new_port.port = base + port_id
self._ports.append(new_port)
log.debug("port {} has been added".format(port_name))
def _removeWICPorts(self, wic, wic_slot_id):
"""
Removes ports when a WIC is removed from a slot.
:param wic_slot_id: WIC slot identifier (integer)
"""
wic_ports_to_delete = []
nb_ports = WIC_MATRIX[wic]["nb_ports"]
@@ -133,19 +145,52 @@ class Router(Node):
for port in self._ports.copy():
if port.slot == 0 and port.port in wic_ports_to_delete:
self._ports.remove(port)
log.debug("port {} has been removed".format(port.name))
def _updateWICNumbering(self):
"""
Updates the port names that are located on a WIC adapter
(based on the number of WICs and their slot number).
"""
wic_ethernet_port_count = 0
wic_serial_port_count = 0
for wic_slot_id in range(0, 3):
base = 16 * (wic_slot_id + 1)
wic_slot = "wic" + str(wic_slot_id)
if self._settings[wic_slot]:
wic = self._settings[wic_slot]
nb_ports = WIC_MATRIX[wic]["nb_ports"]
for port_id in range(0, nb_ports):
for port in self._ports:
if port.slot == 0 and port.port == base + port_id:
if port.linkType() == "Serial":
wic_port_id = wic_serial_port_count
wic_serial_port_count += 1
else:
wic_port_id = wic_ethernet_port_count
wic_ethernet_port_count += 1
old_name = port.name
if "chassis" in self._settings and self._settings["chassis"] in ("1720", "1721", "1750"):
# these chassis show their interface without a slot number
port.name = port.longNameType() + str(wic_port_id)
else:
port.name = port.longNameType() + "0/" + str(wic_port_id)
log.debug("port {} renamed to {}".format(old_name, port.name))
def delete(self):
"""
Deletes this router.
"""
log.debug("router {} is being deleted: {}".format(self.name()))
# first delete all the links attached to this node
self.delete_links_signal.emit()
self._server.send_message("dynamips.vm.delete", {"id": self._router_id}, self._deleteCallback)
def _deleteCallback(self, result, error=False):
"""
Callback for the delete method.
Callback for delete.
:param result: server response
:param error: indicates an error (boolean)
@@ -155,7 +200,7 @@ class Router(Node):
log.error("error while deleting {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
else:
log.info("{} has been deleted".format(self.name()))
log.info("router {} has been deleted".format(self.name()))
self.delete_signal.emit()
def setup(self, image, ram, name=None):
@@ -190,14 +235,14 @@ class Router(Node):
self._settings["name"] = name
params["name"] = name
self._server.send_message("dynamips.vm.create", params, self.setupCallback)
self._server.send_message("dynamips.vm.create", params, self._setupCallback)
def setupCallback(self, response, error=False):
def _setupCallback(self, response, error=False):
"""
Callback for the setup.
Callback for setup.
:param result: server response
:param error: ..
:param error: indicates an error (boolean)
"""
if error:
@@ -236,36 +281,23 @@ class Router(Node):
if name in self._settings and self._settings[name] != value:
params[name] = value
self._server.send_message("dynamips.vm.update", params, self.updateCallback)
log.debug("{} is updating settings: {}".format(self.name(), params))
self._server.send_message("dynamips.vm.update", params, self._updateCallback)
def _updateWICNumbering(self):
def _updateCallback(self, result, error=False):
"""
Callback for update.
wic_ethernet_port_count = 0
wic_serial_port_count = 0
for wic_slot_id in range(0, 3):
base = 16 * (wic_slot_id + 1)
wic_slot = "wic" + str(wic_slot_id)
if self._settings[wic_slot]:
wic = self._settings[wic_slot]
nb_ports = WIC_MATRIX[wic]["nb_ports"]
for port_id in range(0, nb_ports):
for port in self._ports:
if port.slot == 0 and port.port == base + port_id:
if port.linkType() == "Serial":
wic_port_id = wic_serial_port_count
wic_serial_port_count += 1
else:
wic_port_id = wic_ethernet_port_count
wic_ethernet_port_count += 1
if "chassis" in self._settings and self._settings["chassis"] in ("1720", "1721", "1750"):
# these chassis show their interface without a slot number
port.name = port.longNameType() + str(wic_port_id)
else:
port.name = port.longNameType() + "0/" + str(wic_port_id)
:param result: server response
:param error: indicates an error (boolean)
"""
def updateCallback(self, response, error=False):
if error:
log.error("error while deleting {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
return
for name, value in response.items():
for name, value in result.items():
if name in self._settings and self._settings[name] != value:
log.info("{}: updating {} from {} to {}".format(self.name(), name, self._settings[name], value))
if name.startswith("slot"):
@@ -399,34 +431,7 @@ class Router(Node):
"slot": port.slot,
"port": port.port}
if nio_type == "NIO_UDP":
# add NIO UDP params
params["lport"] = nio.lport
params["rhost"] = nio.rhost
params["rport"] = nio.rport
elif nio_type == "NIO_GenericEthernet":
# add NIO generic Ethernet param
params["ethernet_device"] = nio.ethernet_device
elif nio_type == "NIO_LinuxEthernet":
# add NIO Linux Ethernet param
params["ethernet_device"] = nio.ethernet_device
elif nio_type == "NIO_TAP":
# add NIO TAP param
params["tap_device"] = nio.tap_device
elif nio_type == "NIO_UNIX":
# add NIO UNIX params
params["local_file"] = nio.local_file
params["remote_file"] = nio.remote_file
elif nio_type == "NIO_VDE":
# add NIO VDE params
params["control_file"] = nio.control_file
params["local_file"] = nio.local_file
self.addNIOInfo(nio, params)
log.debug("{} is adding an {}: {}".format(self.name(), nio_type, params))
self._server.send_message("dynamips.vm.add_nio", params, self._addNIOCallback)
@@ -442,22 +447,33 @@ class Router(Node):
log.error("error while adding an UDP NIO for {}: {}".format(self.name(), result["message"]))
self.error_signal.emit(self.name(), result["code"], result["message"])
else:
log.info("{} has added a new NIO: {}".format(self.name(), result))
self.nio_signal.emit(self.id)
def deleteNIO(self, port):
"""
Deletes an NIO from the specified port on this router.
:param port: Port object.
"""
params = {"id": self._router_id,
"nio": "NIO_UDP",
"slot": port.slot,
"port": port.port}
port.nio = None
self._server.send_message("dynamips.vm.delete_nio", params, self.deleteNIOCallback)
log.debug("{} is deleting an NIO: {}".format(self.name(), params))
self._server.send_message("dynamips.vm.delete_nio", params, self._deleteNIOCallback)
def deleteNIOCallback(self, result, error=False):
def _deleteNIOCallback(self, result, error=False):
"""
Callback for deleteNIO.
print("NIO deleted!")
print(result)
:param result: server response
:param error: indicates an error (boolean)
"""
log.info("{} has deleted a NIO: {}".format(self.name(), result))
def name(self):
"""

View File

@@ -130,12 +130,13 @@ class ATMBridgeConfigurationPage(QtGui.QWidget, Ui_atmBridgeConfigPageWidget):
del self.mapping[ethernet_port]
self.uiMappingTreeWidget.takeTopLevelItem(self.uiMappingTreeWidget.indexOfTopLevelItem(item))
def loadSettings(self, settings, node):
def loadSettings(self, settings, node, group=False):
"""
Loads the ATM bridge settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
self.uiMappingTreeWidget.clear()
@@ -152,12 +153,13 @@ class ATMBridgeConfigurationPage(QtGui.QWidget, Ui_atmBridgeConfigPageWidget):
self.uiMappingTreeWidget.resizeColumnToContents(0)
self.uiMappingTreeWidget.resizeColumnToContents(1)
def saveSettings(self, settings, node):
def saveSettings(self, settings, node, group=False):
"""
Saves the ATM bridge settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
# these setting cannot be shared by nodes and updated

View File

@@ -150,12 +150,13 @@ class ATMSwitchConfigurationPage(QtGui.QWidget, Ui_atmSwitchConfigPageWidget):
del self._mapping[source]
self.uiMappingTreeWidget.takeTopLevelItem(self.uiMappingTreeWidget.indexOfTopLevelItem(item))
def loadSettings(self, settings, node):
def loadSettings(self, settings, node, group=False):
"""
Loads the ATM switch settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
self.uiMappingTreeWidget.clear()
@@ -172,12 +173,13 @@ class ATMSwitchConfigurationPage(QtGui.QWidget, Ui_atmSwitchConfigPageWidget):
self.uiMappingTreeWidget.resizeColumnToContents(0)
self.uiMappingTreeWidget.resizeColumnToContents(1)
def saveSettings(self, settings, node):
def saveSettings(self, settings, node, group=False):
"""
Saves the ATM switch settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
# these setting cannot be shared by nodes and updated

View File

@@ -454,12 +454,13 @@ class CloudConfigurationPage(QtGui.QWidget, Ui_cloudConfigPageWidget):
self._nios.remove(nio)
self.uiNIONullListWidget.takeItem(self.uiNIONullListWidget.currentRow())
def loadSettings(self, settings, node, parent):
def loadSettings(self, settings, node, group=False):
"""
Loads the cloud settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
self._node = node
@@ -501,12 +502,13 @@ class CloudConfigurationPage(QtGui.QWidget, Ui_cloudConfigPageWidget):
elif nio.lower().startswith("nio_null"):
self.uiNIONullListWidget.addItem(nio)
def saveSettings(self, settings, node):
def saveSettings(self, settings, node, group=False):
"""
Saves the cloud settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
settings["nios"] = list(self._nios)

View File

@@ -34,23 +34,25 @@ class EthernetHubConfigurationPage(QtGui.QWidget, Ui_ethernetHubConfigPageWidget
QtGui.QWidget.__init__(self)
self.setupUi(self)
def loadSettings(self, settings, node):
def loadSettings(self, settings, node, group=False):
"""
Loads the Ethernet hub settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
nbports = len(settings["ports"])
self.uiPortsSpinBox.setValue(nbports)
def saveSettings(self, settings, node):
def saveSettings(self, settings, node, group=False):
"""
Saves the Ethernet hub settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
# these setting cannot be shared by nodes and updated

View File

@@ -122,12 +122,13 @@ class EthernetSwitchConfigurationPage(QtGui.QWidget, Ui_ethernetSwitchConfigPage
else:
self.uiPortSpinBox.setValue(1)
def loadSettings(self, settings, node):
def loadSettings(self, settings, node, group=False):
"""
Loads the Ethernet switch settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
self.uiPortsTreeWidget.clear()
@@ -147,12 +148,13 @@ class EthernetSwitchConfigurationPage(QtGui.QWidget, Ui_ethernetSwitchConfigPage
if len(self._ports) > 0:
self.uiPortSpinBox.setValue(max(self._ports) + 1)
def saveSettings(self, settings, node):
def saveSettings(self, settings, node, group=False):
"""
Saves the Ethernet switch settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
# these setting cannot be shared by nodes and updated

View File

@@ -125,12 +125,13 @@ class FrameRelaySwitchConfigurationPage(QtGui.QWidget, Ui_frameRelaySwitchConfig
del self._mapping[source]
self.uiMappingTreeWidget.takeTopLevelItem(self.uiMappingTreeWidget.indexOfTopLevelItem(item))
def loadSettings(self, settings, node):
def loadSettings(self, settings, node, group=False):
"""
Loads the Frame-Relay switch settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
self.uiMappingTreeWidget.clear()
@@ -147,12 +148,13 @@ class FrameRelaySwitchConfigurationPage(QtGui.QWidget, Ui_frameRelaySwitchConfig
self.uiMappingTreeWidget.resizeColumnToContents(0)
self.uiMappingTreeWidget.resizeColumnToContents(1)
def saveSettings(self, settings, node):
def saveSettings(self, settings, node, group=False):
"""
Saves the Frame-Relay switch settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group
"""
# these setting cannot be shared by nodes and updated

View File

@@ -224,14 +224,28 @@ class RouterConfigurationPage(QtGui.QWidget, Ui_routerConfigPageWidget):
if (index != -1):
self._widget_wics[wic_number].setCurrentIndex(index)
def loadSettings(self, settings, node):
def loadSettings(self, settings, node, group=False):
"""
Loads the router settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group of routers
"""
#print("loading {}".format(group))
if not group:
self.uiNameLineEdit.setText(settings["name"])
self.uiConsolePortSpinBox.setValue(settings["console"])
self.uiAuxPortSpinBox.setValue(settings["aux"])
else:
self.uiNameLabel.hide()
self.uiNameLineEdit.hide()
self.uiConsolePortLabel.hide()
self.uiConsolePortSpinBox.hide()
self.uiAuxPortLabel.hide()
self.uiAuxPortSpinBox.hide()
# show the platform and chassis if applicable
platform = settings["platform"]
chassis = ""
@@ -245,7 +259,7 @@ class RouterConfigurationPage(QtGui.QWidget, Ui_routerConfigPageWidget):
self.uiIOSImageTextLabel.setText(os.path.basename(settings["image"]))
#TODO: startup-config setting
self.uiStartupConfigTextLabel.setText("None")
#self.uiStartupConfigTextLabel.setText("None")
if platform == "c7200":
@@ -344,24 +358,34 @@ class RouterConfigurationPage(QtGui.QWidget, Ui_routerConfigPageWidget):
wic))
raise ConfigurationError()
def saveSettings(self, settings, node):
def saveSettings(self, settings, node, group=False):
"""
Saves the router settings.
:param settings: the settings (dictionary)
:param node: Node object
:param group: indicates the settings apply to a group of routers
"""
#print("saving {}".format(group))
# these settings cannot be shared by nodes and updated
# in the node configurator.
if "name" in settings:
del settings["name"]
if "console" in settings:
del settings["console"]
if "aux" in settings:
del settings["aux"]
#del self._settings["image"]
if not group:
settings["name"] = self.uiNameLineEdit.text()
settings["console"] = self.uiConsolePortSpinBox.value()
settings["aux"] = self.uiAuxPortSpinBox.value()
else:
#if "name" in settings:
del settings["name"]
#if "console" in settings:
del settings["console"]
#if "aux" in settings:
del settings["aux"]
#del self._settings["image"]
# get the platform and chassis if applicable
platform = settings["platform"]
chassis = ""

View File

@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file '/home/grossmj/workspace/git/gns3-gui/gns3/modules/dynamips/ui/dynamips_preferences_page.ui'
#
# Created: Thu Jan 30 21:18:31 2014
# Created: Tue Feb 4 22:54:42 2014
# by: PyQt4 UI code generator 4.10
#
# WARNING! All changes made in this file will be lost!

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>439</width>
<height>488</height>
<height>480</height>
</rect>
</property>
<property name="windowTitle">
@@ -23,57 +23,81 @@
<attribute name="title">
<string>General</string>
</attribute>
<layout class="QGridLayout">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="uiNameLabel">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="uiNameLineEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="uiConsolePortLabel">
<property name="text">
<string>Console port:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QSpinBox" name="uiConsolePortSpinBox">
<property name="maximum">
<number>65535</number>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="uiAuxPortLabel">
<property name="text">
<string>Aux console port:</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="uiAuxPortSpinBox">
<property name="maximum">
<number>65535</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="uiPlatformLabel">
<property name="text">
<string>Platform:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="uiPlatformTextLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<item row="4" column="0">
<widget class="QLabel" name="uiIOSImageLabel">
<property name="text">
<string>IOS image:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="uiIOSImageTextLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="5" column="0">
<widget class="QLabel" name="uiStartupConfigLabel">
<property name="text">
<string>Startup-config:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="5" column="2">
<widget class="QLabel" name="uiStartupConfigTextLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<item row="6" column="0">
<widget class="QLabel" name="uiMidplaneLabel">
<property name="text">
<string>Midplane:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="6" column="1" colspan="2">
<widget class="QComboBox" name="uiMidplaneComboBox">
<property name="enabled">
<bool>true</bool>
@@ -86,14 +110,14 @@
</property>
</widget>
</item>
<item row="4" column="0">
<item row="7" column="0">
<widget class="QLabel" name="uiNPELabel">
<property name="text">
<string>NPE:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<item row="7" column="1" colspan="2">
<widget class="QComboBox" name="uiNPEComboBox">
<property name="enabled">
<bool>true</bool>
@@ -106,7 +130,7 @@
</property>
</widget>
</item>
<item row="5" column="1">
<item row="8" column="1" colspan="2">
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -119,6 +143,20 @@
</property>
</spacer>
</item>
<item row="3" column="2">
<widget class="QLabel" name="uiPlatformTextLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLabel" name="uiIOSImageTextLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="uiMemoriesTabWidget">

View File

@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file '/home/grossmj/workspace/git/gns3-gui/gns3/modules/dynamips/ui/router_configuration_page.ui'
#
# Created: Wed Jan 29 11:33:10 2014
# Created: Tue Feb 4 22:59:03 2014
# by: PyQt4 UI code generator 4.10
#
# WARNING! All changes made in this file will be lost!
@@ -26,39 +26,51 @@ except AttributeError:
class Ui_routerConfigPageWidget(object):
def setupUi(self, routerConfigPageWidget):
routerConfigPageWidget.setObjectName(_fromUtf8("routerConfigPageWidget"))
routerConfigPageWidget.resize(439, 488)
routerConfigPageWidget.resize(439, 480)
self.vboxlayout = QtGui.QVBoxLayout(routerConfigPageWidget)
self.vboxlayout.setObjectName(_fromUtf8("vboxlayout"))
self.uiTabWidget = QtGui.QTabWidget(routerConfigPageWidget)
self.uiTabWidget.setObjectName(_fromUtf8("uiTabWidget"))
self.uiGeneralTabWidget = QtGui.QWidget()
self.uiGeneralTabWidget.setObjectName(_fromUtf8("uiGeneralTabWidget"))
self.gridlayout = QtGui.QGridLayout(self.uiGeneralTabWidget)
self.gridlayout.setObjectName(_fromUtf8("gridlayout"))
self.gridLayout_2 = QtGui.QGridLayout(self.uiGeneralTabWidget)
self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
self.uiNameLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiNameLabel.setObjectName(_fromUtf8("uiNameLabel"))
self.gridLayout_2.addWidget(self.uiNameLabel, 0, 0, 1, 1)
self.uiNameLineEdit = QtGui.QLineEdit(self.uiGeneralTabWidget)
self.uiNameLineEdit.setObjectName(_fromUtf8("uiNameLineEdit"))
self.gridLayout_2.addWidget(self.uiNameLineEdit, 0, 2, 1, 1)
self.uiConsolePortLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiConsolePortLabel.setObjectName(_fromUtf8("uiConsolePortLabel"))
self.gridLayout_2.addWidget(self.uiConsolePortLabel, 1, 0, 1, 1)
self.uiConsolePortSpinBox = QtGui.QSpinBox(self.uiGeneralTabWidget)
self.uiConsolePortSpinBox.setMaximum(65535)
self.uiConsolePortSpinBox.setObjectName(_fromUtf8("uiConsolePortSpinBox"))
self.gridLayout_2.addWidget(self.uiConsolePortSpinBox, 1, 2, 1, 1)
self.uiAuxPortLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiAuxPortLabel.setObjectName(_fromUtf8("uiAuxPortLabel"))
self.gridLayout_2.addWidget(self.uiAuxPortLabel, 2, 0, 1, 2)
self.uiAuxPortSpinBox = QtGui.QSpinBox(self.uiGeneralTabWidget)
self.uiAuxPortSpinBox.setMaximum(65535)
self.uiAuxPortSpinBox.setObjectName(_fromUtf8("uiAuxPortSpinBox"))
self.gridLayout_2.addWidget(self.uiAuxPortSpinBox, 2, 2, 1, 1)
self.uiPlatformLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiPlatformLabel.setObjectName(_fromUtf8("uiPlatformLabel"))
self.gridlayout.addWidget(self.uiPlatformLabel, 0, 0, 1, 1)
self.uiPlatformTextLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiPlatformTextLabel.setText(_fromUtf8(""))
self.uiPlatformTextLabel.setObjectName(_fromUtf8("uiPlatformTextLabel"))
self.gridlayout.addWidget(self.uiPlatformTextLabel, 0, 1, 1, 1)
self.gridLayout_2.addWidget(self.uiPlatformLabel, 3, 0, 1, 1)
self.uiIOSImageLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiIOSImageLabel.setObjectName(_fromUtf8("uiIOSImageLabel"))
self.gridlayout.addWidget(self.uiIOSImageLabel, 1, 0, 1, 1)
self.uiIOSImageTextLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiIOSImageTextLabel.setText(_fromUtf8(""))
self.uiIOSImageTextLabel.setObjectName(_fromUtf8("uiIOSImageTextLabel"))
self.gridlayout.addWidget(self.uiIOSImageTextLabel, 1, 1, 1, 1)
self.gridLayout_2.addWidget(self.uiIOSImageLabel, 4, 0, 1, 1)
self.uiStartupConfigLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiStartupConfigLabel.setObjectName(_fromUtf8("uiStartupConfigLabel"))
self.gridlayout.addWidget(self.uiStartupConfigLabel, 2, 0, 1, 1)
self.gridLayout_2.addWidget(self.uiStartupConfigLabel, 5, 0, 1, 1)
self.uiStartupConfigTextLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiStartupConfigTextLabel.setText(_fromUtf8(""))
self.uiStartupConfigTextLabel.setObjectName(_fromUtf8("uiStartupConfigTextLabel"))
self.gridlayout.addWidget(self.uiStartupConfigTextLabel, 2, 1, 1, 1)
self.gridLayout_2.addWidget(self.uiStartupConfigTextLabel, 5, 2, 1, 1)
self.uiMidplaneLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiMidplaneLabel.setObjectName(_fromUtf8("uiMidplaneLabel"))
self.gridlayout.addWidget(self.uiMidplaneLabel, 3, 0, 1, 1)
self.gridLayout_2.addWidget(self.uiMidplaneLabel, 6, 0, 1, 1)
self.uiMidplaneComboBox = QtGui.QComboBox(self.uiGeneralTabWidget)
self.uiMidplaneComboBox.setEnabled(True)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
@@ -67,10 +79,10 @@ class Ui_routerConfigPageWidget(object):
sizePolicy.setHeightForWidth(self.uiMidplaneComboBox.sizePolicy().hasHeightForWidth())
self.uiMidplaneComboBox.setSizePolicy(sizePolicy)
self.uiMidplaneComboBox.setObjectName(_fromUtf8("uiMidplaneComboBox"))
self.gridlayout.addWidget(self.uiMidplaneComboBox, 3, 1, 1, 1)
self.gridLayout_2.addWidget(self.uiMidplaneComboBox, 6, 1, 1, 2)
self.uiNPELabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiNPELabel.setObjectName(_fromUtf8("uiNPELabel"))
self.gridlayout.addWidget(self.uiNPELabel, 4, 0, 1, 1)
self.gridLayout_2.addWidget(self.uiNPELabel, 7, 0, 1, 1)
self.uiNPEComboBox = QtGui.QComboBox(self.uiGeneralTabWidget)
self.uiNPEComboBox.setEnabled(True)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
@@ -79,9 +91,17 @@ class Ui_routerConfigPageWidget(object):
sizePolicy.setHeightForWidth(self.uiNPEComboBox.sizePolicy().hasHeightForWidth())
self.uiNPEComboBox.setSizePolicy(sizePolicy)
self.uiNPEComboBox.setObjectName(_fromUtf8("uiNPEComboBox"))
self.gridlayout.addWidget(self.uiNPEComboBox, 4, 1, 1, 1)
self.gridLayout_2.addWidget(self.uiNPEComboBox, 7, 1, 1, 2)
spacerItem = QtGui.QSpacerItem(263, 151, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.gridlayout.addItem(spacerItem, 5, 1, 1, 1)
self.gridLayout_2.addItem(spacerItem, 8, 1, 1, 2)
self.uiPlatformTextLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiPlatformTextLabel.setText(_fromUtf8(""))
self.uiPlatformTextLabel.setObjectName(_fromUtf8("uiPlatformTextLabel"))
self.gridLayout_2.addWidget(self.uiPlatformTextLabel, 3, 2, 1, 1)
self.uiIOSImageTextLabel = QtGui.QLabel(self.uiGeneralTabWidget)
self.uiIOSImageTextLabel.setText(_fromUtf8(""))
self.uiIOSImageTextLabel.setObjectName(_fromUtf8("uiIOSImageTextLabel"))
self.gridLayout_2.addWidget(self.uiIOSImageTextLabel, 4, 2, 1, 1)
self.uiTabWidget.addTab(self.uiGeneralTabWidget, _fromUtf8(""))
self.uiMemoriesTabWidget = QtGui.QWidget()
self.uiMemoriesTabWidget.setObjectName(_fromUtf8("uiMemoriesTabWidget"))
@@ -89,11 +109,11 @@ class Ui_routerConfigPageWidget(object):
self.vboxlayout1.setObjectName(_fromUtf8("vboxlayout1"))
self.uiMemoriesGroupBox = QtGui.QGroupBox(self.uiMemoriesTabWidget)
self.uiMemoriesGroupBox.setObjectName(_fromUtf8("uiMemoriesGroupBox"))
self.gridlayout1 = QtGui.QGridLayout(self.uiMemoriesGroupBox)
self.gridlayout1.setObjectName(_fromUtf8("gridlayout1"))
self.gridlayout = QtGui.QGridLayout(self.uiMemoriesGroupBox)
self.gridlayout.setObjectName(_fromUtf8("gridlayout"))
self.uiRamLabel = QtGui.QLabel(self.uiMemoriesGroupBox)
self.uiRamLabel.setObjectName(_fromUtf8("uiRamLabel"))
self.gridlayout1.addWidget(self.uiRamLabel, 0, 0, 1, 1)
self.gridlayout.addWidget(self.uiRamLabel, 0, 0, 1, 1)
self.uiRamSpinBox = QtGui.QSpinBox(self.uiMemoriesGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -104,10 +124,10 @@ class Ui_routerConfigPageWidget(object):
self.uiRamSpinBox.setSingleStep(4)
self.uiRamSpinBox.setProperty("value", 128)
self.uiRamSpinBox.setObjectName(_fromUtf8("uiRamSpinBox"))
self.gridlayout1.addWidget(self.uiRamSpinBox, 0, 1, 1, 1)
self.gridlayout.addWidget(self.uiRamSpinBox, 0, 1, 1, 1)
self.uiNvramLabel = QtGui.QLabel(self.uiMemoriesGroupBox)
self.uiNvramLabel.setObjectName(_fromUtf8("uiNvramLabel"))
self.gridlayout1.addWidget(self.uiNvramLabel, 1, 0, 1, 1)
self.gridlayout.addWidget(self.uiNvramLabel, 1, 0, 1, 1)
self.uiNvramSpinBox = QtGui.QSpinBox(self.uiMemoriesGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -118,15 +138,15 @@ class Ui_routerConfigPageWidget(object):
self.uiNvramSpinBox.setSingleStep(4)
self.uiNvramSpinBox.setProperty("value", 128)
self.uiNvramSpinBox.setObjectName(_fromUtf8("uiNvramSpinBox"))
self.gridlayout1.addWidget(self.uiNvramSpinBox, 1, 1, 1, 1)
self.gridlayout.addWidget(self.uiNvramSpinBox, 1, 1, 1, 1)
self.vboxlayout1.addWidget(self.uiMemoriesGroupBox)
self.uiDisksGroupBox = QtGui.QGroupBox(self.uiMemoriesTabWidget)
self.uiDisksGroupBox.setObjectName(_fromUtf8("uiDisksGroupBox"))
self.gridlayout2 = QtGui.QGridLayout(self.uiDisksGroupBox)
self.gridlayout2.setObjectName(_fromUtf8("gridlayout2"))
self.gridlayout1 = QtGui.QGridLayout(self.uiDisksGroupBox)
self.gridlayout1.setObjectName(_fromUtf8("gridlayout1"))
self.uiDisk0Label = QtGui.QLabel(self.uiDisksGroupBox)
self.uiDisk0Label.setObjectName(_fromUtf8("uiDisk0Label"))
self.gridlayout2.addWidget(self.uiDisk0Label, 0, 0, 1, 1)
self.gridlayout1.addWidget(self.uiDisk0Label, 0, 0, 1, 1)
self.uiDisk0SpinBox = QtGui.QSpinBox(self.uiDisksGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -136,10 +156,10 @@ class Ui_routerConfigPageWidget(object):
self.uiDisk0SpinBox.setMaximum(99999)
self.uiDisk0SpinBox.setSingleStep(4)
self.uiDisk0SpinBox.setObjectName(_fromUtf8("uiDisk0SpinBox"))
self.gridlayout2.addWidget(self.uiDisk0SpinBox, 0, 1, 1, 1)
self.gridlayout1.addWidget(self.uiDisk0SpinBox, 0, 1, 1, 1)
self.uiDisk1Label = QtGui.QLabel(self.uiDisksGroupBox)
self.uiDisk1Label.setObjectName(_fromUtf8("uiDisk1Label"))
self.gridlayout2.addWidget(self.uiDisk1Label, 1, 0, 1, 1)
self.gridlayout1.addWidget(self.uiDisk1Label, 1, 0, 1, 1)
self.uiDisk1SpinBox = QtGui.QSpinBox(self.uiDisksGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -149,7 +169,7 @@ class Ui_routerConfigPageWidget(object):
self.uiDisk1SpinBox.setMaximum(99999)
self.uiDisk1SpinBox.setSingleStep(4)
self.uiDisk1SpinBox.setObjectName(_fromUtf8("uiDisk1SpinBox"))
self.gridlayout2.addWidget(self.uiDisk1SpinBox, 1, 1, 1, 1)
self.gridlayout1.addWidget(self.uiDisk1SpinBox, 1, 1, 1, 1)
self.vboxlayout1.addWidget(self.uiDisksGroupBox)
spacerItem1 = QtGui.QSpacerItem(20, 21, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.vboxlayout1.addItem(spacerItem1)
@@ -242,8 +262,8 @@ class Ui_routerConfigPageWidget(object):
self.verticalLayout.addWidget(self.uiAdaptersGroupBox)
self.uiWicsGroupBox = QtGui.QGroupBox(self.uiSlotsTabWidget)
self.uiWicsGroupBox.setObjectName(_fromUtf8("uiWicsGroupBox"))
self.gridlayout3 = QtGui.QGridLayout(self.uiWicsGroupBox)
self.gridlayout3.setObjectName(_fromUtf8("gridlayout3"))
self.gridlayout2 = QtGui.QGridLayout(self.uiWicsGroupBox)
self.gridlayout2.setObjectName(_fromUtf8("gridlayout2"))
self.uiWic0Label = QtGui.QLabel(self.uiWicsGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
@@ -251,10 +271,10 @@ class Ui_routerConfigPageWidget(object):
sizePolicy.setHeightForWidth(self.uiWic0Label.sizePolicy().hasHeightForWidth())
self.uiWic0Label.setSizePolicy(sizePolicy)
self.uiWic0Label.setObjectName(_fromUtf8("uiWic0Label"))
self.gridlayout3.addWidget(self.uiWic0Label, 0, 0, 1, 1)
self.gridlayout2.addWidget(self.uiWic0Label, 0, 0, 1, 1)
self.uiWic0comboBox = QtGui.QComboBox(self.uiWicsGroupBox)
self.uiWic0comboBox.setObjectName(_fromUtf8("uiWic0comboBox"))
self.gridlayout3.addWidget(self.uiWic0comboBox, 0, 1, 1, 1)
self.gridlayout2.addWidget(self.uiWic0comboBox, 0, 1, 1, 1)
self.uiWic1Label = QtGui.QLabel(self.uiWicsGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
@@ -262,10 +282,10 @@ class Ui_routerConfigPageWidget(object):
sizePolicy.setHeightForWidth(self.uiWic1Label.sizePolicy().hasHeightForWidth())
self.uiWic1Label.setSizePolicy(sizePolicy)
self.uiWic1Label.setObjectName(_fromUtf8("uiWic1Label"))
self.gridlayout3.addWidget(self.uiWic1Label, 1, 0, 1, 1)
self.gridlayout2.addWidget(self.uiWic1Label, 1, 0, 1, 1)
self.uiWic1comboBox = QtGui.QComboBox(self.uiWicsGroupBox)
self.uiWic1comboBox.setObjectName(_fromUtf8("uiWic1comboBox"))
self.gridlayout3.addWidget(self.uiWic1comboBox, 1, 1, 1, 1)
self.gridlayout2.addWidget(self.uiWic1comboBox, 1, 1, 1, 1)
self.uiWic2Label = QtGui.QLabel(self.uiWicsGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
@@ -273,21 +293,21 @@ class Ui_routerConfigPageWidget(object):
sizePolicy.setHeightForWidth(self.uiWic2Label.sizePolicy().hasHeightForWidth())
self.uiWic2Label.setSizePolicy(sizePolicy)
self.uiWic2Label.setObjectName(_fromUtf8("uiWic2Label"))
self.gridlayout3.addWidget(self.uiWic2Label, 2, 0, 1, 1)
self.gridlayout2.addWidget(self.uiWic2Label, 2, 0, 1, 1)
self.uiWic2comboBox = QtGui.QComboBox(self.uiWicsGroupBox)
self.uiWic2comboBox.setObjectName(_fromUtf8("uiWic2comboBox"))
self.gridlayout3.addWidget(self.uiWic2comboBox, 2, 1, 1, 1)
self.gridlayout2.addWidget(self.uiWic2comboBox, 2, 1, 1, 1)
self.verticalLayout.addWidget(self.uiWicsGroupBox)
spacerItem2 = QtGui.QSpacerItem(325, 31, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem2)
self.uiTabWidget.addTab(self.uiSlotsTabWidget, _fromUtf8(""))
self.uiAdvancedTabWidget = QtGui.QWidget()
self.uiAdvancedTabWidget.setObjectName(_fromUtf8("uiAdvancedTabWidget"))
self.gridlayout4 = QtGui.QGridLayout(self.uiAdvancedTabWidget)
self.gridlayout4.setObjectName(_fromUtf8("gridlayout4"))
self.gridlayout3 = QtGui.QGridLayout(self.uiAdvancedTabWidget)
self.gridlayout3.setObjectName(_fromUtf8("gridlayout3"))
self.uiConfregLabel = QtGui.QLabel(self.uiAdvancedTabWidget)
self.uiConfregLabel.setObjectName(_fromUtf8("uiConfregLabel"))
self.gridlayout4.addWidget(self.uiConfregLabel, 0, 0, 1, 1)
self.gridlayout3.addWidget(self.uiConfregLabel, 0, 0, 1, 1)
self.uiConfregLineEdit = QtGui.QLineEdit(self.uiAdvancedTabWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -295,10 +315,10 @@ class Ui_routerConfigPageWidget(object):
sizePolicy.setHeightForWidth(self.uiConfregLineEdit.sizePolicy().hasHeightForWidth())
self.uiConfregLineEdit.setSizePolicy(sizePolicy)
self.uiConfregLineEdit.setObjectName(_fromUtf8("uiConfregLineEdit"))
self.gridlayout4.addWidget(self.uiConfregLineEdit, 0, 1, 1, 1)
self.gridlayout3.addWidget(self.uiConfregLineEdit, 0, 1, 1, 1)
self.uiBaseMacLabel = QtGui.QLabel(self.uiAdvancedTabWidget)
self.uiBaseMacLabel.setObjectName(_fromUtf8("uiBaseMacLabel"))
self.gridlayout4.addWidget(self.uiBaseMacLabel, 1, 0, 1, 1)
self.gridlayout3.addWidget(self.uiBaseMacLabel, 1, 0, 1, 1)
self.uiBaseMACLineEdit = QtGui.QLineEdit(self.uiAdvancedTabWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -307,10 +327,10 @@ class Ui_routerConfigPageWidget(object):
self.uiBaseMACLineEdit.setSizePolicy(sizePolicy)
self.uiBaseMACLineEdit.setText(_fromUtf8(""))
self.uiBaseMACLineEdit.setObjectName(_fromUtf8("uiBaseMACLineEdit"))
self.gridlayout4.addWidget(self.uiBaseMACLineEdit, 1, 1, 1, 1)
self.gridlayout3.addWidget(self.uiBaseMACLineEdit, 1, 1, 1, 1)
self.uiExecAreaLabel = QtGui.QLabel(self.uiAdvancedTabWidget)
self.uiExecAreaLabel.setObjectName(_fromUtf8("uiExecAreaLabel"))
self.gridlayout4.addWidget(self.uiExecAreaLabel, 2, 0, 1, 1)
self.gridlayout3.addWidget(self.uiExecAreaLabel, 2, 0, 1, 1)
self.uiExecAreaSpinBox = QtGui.QSpinBox(self.uiAdvancedTabWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -321,10 +341,10 @@ class Ui_routerConfigPageWidget(object):
self.uiExecAreaSpinBox.setSingleStep(4)
self.uiExecAreaSpinBox.setProperty("value", 64)
self.uiExecAreaSpinBox.setObjectName(_fromUtf8("uiExecAreaSpinBox"))
self.gridlayout4.addWidget(self.uiExecAreaSpinBox, 2, 1, 1, 1)
self.gridlayout3.addWidget(self.uiExecAreaSpinBox, 2, 1, 1, 1)
self.uiIomemLabel = QtGui.QLabel(self.uiAdvancedTabWidget)
self.uiIomemLabel.setObjectName(_fromUtf8("uiIomemLabel"))
self.gridlayout4.addWidget(self.uiIomemLabel, 3, 0, 1, 1)
self.gridlayout3.addWidget(self.uiIomemLabel, 3, 0, 1, 1)
self.uiIomemSpinBox = QtGui.QSpinBox(self.uiAdvancedTabWidget)
self.uiIomemSpinBox.setEnabled(True)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
@@ -336,9 +356,9 @@ class Ui_routerConfigPageWidget(object):
self.uiIomemSpinBox.setSingleStep(5)
self.uiIomemSpinBox.setProperty("value", 5)
self.uiIomemSpinBox.setObjectName(_fromUtf8("uiIomemSpinBox"))
self.gridlayout4.addWidget(self.uiIomemSpinBox, 3, 1, 1, 1)
self.gridlayout3.addWidget(self.uiIomemSpinBox, 3, 1, 1, 1)
spacerItem3 = QtGui.QSpacerItem(304, 251, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.gridlayout4.addItem(spacerItem3, 4, 0, 1, 2)
self.gridlayout3.addItem(spacerItem3, 4, 0, 1, 2)
self.uiTabWidget.addTab(self.uiAdvancedTabWidget, _fromUtf8(""))
self.vboxlayout.addWidget(self.uiTabWidget)
@@ -368,6 +388,9 @@ class Ui_routerConfigPageWidget(object):
def retranslateUi(self, routerConfigPageWidget):
routerConfigPageWidget.setWindowTitle(_translate("routerConfigPageWidget", "Dynamips IOS Router configuration", None))
self.uiNameLabel.setText(_translate("routerConfigPageWidget", "Name:", None))
self.uiConsolePortLabel.setText(_translate("routerConfigPageWidget", "Console port:", None))
self.uiAuxPortLabel.setText(_translate("routerConfigPageWidget", "Aux console port:", None))
self.uiPlatformLabel.setText(_translate("routerConfigPageWidget", "Platform:", None))
self.uiIOSImageLabel.setText(_translate("routerConfigPageWidget", "IOS image:", None))
self.uiStartupConfigLabel.setText(_translate("routerConfigPageWidget", "Startup-config:", None))

View File

@@ -88,6 +88,43 @@ class Node(QtCore.QObject):
raise NotImplementedError()
def addNIOInfo(self, nio, params):
"""
Adds NIO information to a dictionary.
:param nio: NIO object
:param params: dictionary
"""
nio_type = str(nio)
if nio_type == "NIO_UDP":
# add NIO UDP params
params["lport"] = nio.lport
params["rhost"] = nio.rhost
params["rport"] = nio.rport
elif nio_type == "NIO_GenericEthernet":
# add NIO generic Ethernet param
params["ethernet_device"] = nio.ethernet_device
elif nio_type == "NIO_LinuxEthernet":
# add NIO Linux Ethernet param
params["ethernet_device"] = nio.ethernet_device
elif nio_type == "NIO_TAP":
# add NIO TAP param
params["tap_device"] = nio.tap_device
elif nio_type == "NIO_UNIX":
# add NIO UNIX params
params["local_file"] = nio.local_file
params["remote_file"] = nio.remote_file
elif nio_type == "NIO_VDE":
# add NIO VDE params
params["control_file"] = nio.control_file
params["local_file"] = nio.local_file
def configPage(self):
"""
Returns the configuration page widget to be used by the node configurator.

View File

@@ -99,14 +99,15 @@ class NodeConfigurator(QtGui.QDialog, Ui_NodeConfiguratorDialog):
self.uiTitleLabel.setText("{} configuration".format(item.text(0)))
item = item.child(0)
page = item.page()
# load the item temporary settings onto the page
page.loadSettings(item.settings(), item.node(), group=True)
else:
self.uiTitleLabel.setText("{} configuration".format(item.node().name()))
page = item.page()
self.previousItem = item
self.previousPage = page
# load the item temporary settings onto the page
page.loadSettings(item.settings(), item.node())
# load the item temporary settings onto the page
page.loadSettings(item.settings(), item.node())
self.uiConfigStackedWidget.addWidget(page)
self.uiConfigStackedWidget.setCurrentWidget(page)
@@ -153,12 +154,15 @@ class NodeConfigurator(QtGui.QDialog, Ui_NodeConfiguratorDialog):
# save the temporary settings for the current group
# by applying the first child temporary settings to
# all children for that group
settings = item.child(0).settings()
self.previousItem = None
self.previousNode = None
settings = item.child(0).settings().copy()
node = item.child(0).node()
page.saveSettings(settings, node)
page.saveSettings(settings, node, group=True)
for index in range(0, item.childCount()):
child = item.child(index)
child.setSettings(settings.copy())
child.node().update(settings)
child.settings().update(settings)
# update the nodes with the settings
for item in self._parent_items.values():
@@ -181,14 +185,15 @@ class NodeConfigurator(QtGui.QDialog, Ui_NodeConfiguratorDialog):
else:
# this is a group item (no parent), reload the settings
# on the current page by taking the settings of the first child.
page.loadSettings(item.child(0).settings(), item.child(0).node())
self.previousItem = None
self.previousNode = None
page.loadSettings(item.child(0).settings().copy(), item.child(0).node(), group=True)
# reset the settings
for item in self._parent_items.values():
settings = item.child(0).node().settings()
for index in range(0, item.childCount()):
child = item.child(index)
child.setSettings(settings.copy())
child.setSettings(child.node().settings().copy())
class ConfigurationPageItem(QtGui.QTreeWidgetItem):

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
# Resource object code
#
# Created: Thu Jan 2 15:28:11 2014
# Created: Wed Feb 5 15:55:34 2014
# by: The Resource Compiler for PyQt (Qt v4.8.4)
#
# WARNING! All changes made in this file will be lost!

View File

@@ -52,7 +52,8 @@ def recursive(function, path):
if __name__ == '__main__':
cwd = os.path.dirname(os.path.abspath(__file__))
ui_path = os.path.abspath(os.path.join(cwd, "../gns3/"))
recursive(build_ui, ui_path)
gns3_path = os.path.abspath(os.path.join(cwd, "../gns3/"))
ui_path = os.path.abspath(os.path.join(cwd, "../gns3/ui"))
recursive(build_ui, gns3_path)
rcc_path = os.path.abspath(os.path.join(cwd, "../resources"))
build_resources(rcc_path, ui_path)