mirror of
https://github.com/GNS3/gns3-gui.git
synced 2026-05-17 00:46:01 +03:00
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:
@@ -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
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
"""
|
||||
|
||||
@@ -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):
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = ""
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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))
|
||||
|
||||
37
gns3/node.py
37
gns3/node.py
@@ -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.
|
||||
|
||||
@@ -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):
|
||||
|
||||
238295
gns3/resources_rc.py
238295
gns3/resources_rc.py
File diff suppressed because it is too large
Load Diff
@@ -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!
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user