Skip to content

Commit

Permalink
Get port names from server
Browse files Browse the repository at this point in the history
  • Loading branch information
julien-duponchelle committed Sep 14, 2016
1 parent fa12721 commit 1bcf669
Show file tree
Hide file tree
Showing 28 changed files with 218 additions and 1,222 deletions.
1 change: 0 additions & 1 deletion gns3/graphics_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,6 @@ def reset(self):
# nodes, links and ports
Node.reset()
Link.reset()
Port.reset()

# reset the topology
self._topology.reset()
Expand Down
5 changes: 3 additions & 2 deletions gns3/local_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,11 @@ def __init__(self, parent=None):
self._local_server_path = ""
self._local_server_process = None
self._config_directory = LocalConfig.instance().configDirectory()
self._settings = {}
self.localServerSettings()
self._port = self._settings["port"]
self._port = self._settings.get("port", 3080)

if not self._settings["auto_start"]:
if not self._settings.get("auto_start", True):
self._http_client = HTTPClient(self._settings)
Controller.instance().setHttpClient(self._http_client)

Expand Down
41 changes: 2 additions & 39 deletions gns3/modules/builtin/atm_switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import uuid

from gns3.node import Node
from gns3.ports.atm_port import ATMPort

import logging
log = logging.getLogger(__name__)
Expand All @@ -45,37 +44,6 @@ def __init__(self, module, server, project):
self._always_on = True
self.settings().update({"mappings": {}})

def _updatePortsFromMappings(self, mappings):
"""
Updates the ports based on the ATM mappings.
:param mappings: ATM mappings
"""

ports_to_create = []
for source, destination in mappings.items():
source_port = source.split(":")[0]
destination_port = destination.split(":")[0]
if source_port not in ports_to_create:
ports_to_create.append(source_port)
if destination_port not in ports_to_create:
ports_to_create.append(destination_port)

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())

for port_name in ports_to_create:
port = ATMPort(port_name)
port.setAdapterNumber(0) # adapter number is always 0
port.setPortNumber(int(port_name))
port.setStatus(ATMPort.started)
self._ports.append(port)
log.debug("port {} has been added".format(port_name))

def create(self, name=None, node_id=None, mappings=None, default_name_format="ATM{0}"):
"""
Creates this ATM switch.
Expand All @@ -96,9 +64,7 @@ def _createCallback(self, result):
:param result: server response (dict)
"""

if "mappings" in result:
self._updatePortsFromMappings(result["mappings"])
self.settings()["mappings"] = result["mappings"]

def update(self, new_settings):
"""
Expand All @@ -120,10 +86,7 @@ def _updateCallback(self, result):
:param result: server response
"""

if "mappings" in result:
self._updatePortsFromMappings(result["mappings"])
self._settings["mappings"] = result["mappings"].copy()
self.settings()["mappings"] = result["mappings"]

def info(self):
"""
Expand Down
69 changes: 11 additions & 58 deletions gns3/modules/builtin/cloud.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,6 @@ def interfaces(self):

return self._interfaces

@staticmethod
def isSpecialInterface(interface):

for special_interface in ("lo", "vmnet", "vboxnet", "docker", "lxcbr", "virbr", "ovs-system", "veth", "fw", "p2p"):
if interface.lower().startswith(special_interface):
return True
return False

def create(self, name=None, node_id=None, ports=None, default_name_format="Cloud{0}"):
"""
Creates this cloud.
Expand All @@ -77,30 +69,22 @@ def _createCallback(self, result, error=False, **kwargs):
:param result: server response
"""
if "ports_mapping" in result:
self._settings["ports_mapping"] = result["ports_mapping"].copy()

if "interfaces" in result:
self._interfaces = result["interfaces"].copy()

if error:
log.error("Error while creating cloud: {}".format(result["message"]))
return

self._interfaces = result["interfaces"].copy()
if "ports_mapping" in result and result["ports_mapping"]:
for port_info in result["ports_mapping"]:
port = Port(port_info["name"])
port.setAdapterNumber(0) # adapter number is always 0
port.setPortNumber(port_info["port_number"])
port.setStatus(Port.started)
self._ports.append(port)
log.debug("port {} has been added".format(port_info["port_number"]))
else:
port_number = 1
# If the cloud is empty fill it with all interfaces (like the 1.X host node)
if "ports_mapping" not in result or len(result["ports_mapping"]) == 0:
settings = {"ports_mapping": []}
for interface in self._interfaces:
if self.isSpecialInterface(interface["name"]):
if interface["special"]:
continue
settings["ports_mapping"].append({"name": interface["name"],
"port_number": port_number,
"type": interface["type"],
"interface": interface["name"]})
"port_number": port_number,
"type": interface["type"],
"interface": interface["name"]})
port_number += 1
self.update(settings)

Expand All @@ -118,23 +102,6 @@ def update(self, new_settings):
if params:
self._update(params)

def _updatePort(self, port_name, port_number):

# update the port if existing
for port in self._ports:
if port.portNumber() == port_number:
port.setName(port_name)
log.debug("port {} has been updated".format(port_number))
return

# otherwise create a new port
port = Port(port_name)
port.setAdapterNumber(0) # adapter number is always 0
port.setPortNumber(port_number)
port.setStatus(Port.started)
self._ports.append(port)
log.debug("port {} has been added".format(port_number))

def _updateCallback(self, result):
"""
Callback for update.
Expand All @@ -143,18 +110,6 @@ def _updateCallback(self, result):
"""

if "ports_mapping" in result:
updated_port_list = []
# add/update ports
for port_info in result["ports_mapping"]:
self._updatePort(port_info["name"], port_info["port_number"])
updated_port_list.append(port_info["port_number"])

# delete ports
for port in self._ports.copy():
if port.isFree() and port.portNumber() not in updated_port_list:
self._ports.remove(port)
log.debug("port {} has been removed".format(port.portNumber()))

self._settings["ports_mapping"] = result["ports_mapping"].copy()

if "interfaces" in result:
Expand All @@ -181,8 +136,6 @@ def info(self):

return info + port_info



def configPage(self):
"""
Returns the configuration page widget to be used by the node properties dialog.
Expand Down
76 changes: 2 additions & 74 deletions gns3/modules/builtin/ethernet_hub.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import uuid
from gns3.node import Node
from gns3.ports.ethernet_port import EthernetPort

import logging
log = logging.getLogger(__name__)
Expand Down Expand Up @@ -61,15 +60,7 @@ def _createCallback(self, result):
:param result: server response (dict)
"""

if "ports_mapping" in result:
for port_info in result["ports_mapping"]:
port = EthernetPort(port_info["name"])
port.setAdapterNumber(0) # adapter number is always 0
port.setPortNumber(port_info["port_number"])
port.setStatus(EthernetPort.started)
self._ports.append(port)
log.debug("port {} has been added".format(port_info["port_number"]))
self.settings()["ports_mapping"] = result["ports_mapping"]

def update(self, new_settings):
"""
Expand All @@ -86,44 +77,13 @@ def update(self, new_settings):
if params:
self._update(params)

def _updatePort(self, port_name, port_number):

# update the port if existing
for port in self._ports:
if port.portNumber() == port_number:
port.setName(port_name)
log.debug("port {} has been updated".format(port_number))
return

# otherwise create a new port
port = EthernetPort(port_name)
port.setAdapterNumber(0) # adapter number is always 0
port.setPortNumber(port_number)
port.setStatus(EthernetPort.started)
self._ports.append(port)
log.debug("port {} has been added".format(port_number))

def _updateCallback(self, result):
"""
Callback for update.
:param result: server response
"""

if "ports_mapping" in result:
updated_port_list = []
# add/update ports
for port_info in result["ports_mapping"]:
self._updatePort(port_info["name"], port_info["port_number"])
updated_port_list.append(port_info["port_number"])

# delete ports
for port in self._ports.copy():
if port.isFree() and port.portNumber() not in updated_port_list:
self._ports.remove(port)
log.debug("port {} has been removed".format(port.portNumber()))

self._settings["ports_mapping"] = list(map(int, updated_port_list))
self.settings()["ports_mapping"] = result["ports_mapping"]

def info(self):
"""
Expand Down Expand Up @@ -151,38 +111,6 @@ def info(self):

return info + port_info

def dump(self):
"""
Returns a representation of this Ethernet hub
(to be saved in a topology file)
:returns: representation of the node (dictionary)
"""

return super().dump()

def load(self, node_info):
"""
Loads an Ethernet hub representation
(from a topology file).
:param node_info: representation of the node (dictionary)
"""

super().load(node_info)
properties = node_info["properties"]
name = properties.pop("name")

# Ethernet hubs do not have an UUID before version 2.0
node_id = properties.get("node_id", str(uuid.uuid4()))

ports = []
if "ports_mapping" in node_info:
ports = [{"port_number": port["port_number"], "name": port["name"]} for port in node_info["ports_mapping"]]

log.info("Ethernet hub {} is loading".format(name))
self.create(name, node_id, ports)

def configPage(self):
"""
Returns the configuration page widget to be used by the node properties dialog.
Expand Down
Loading

0 comments on commit 1bcf669

Please sign in to comment.