From 3ea5df7462315de6cd4717c178d502d244a57b2f Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Tue, 27 Sep 2016 11:47:18 +0200 Subject: [PATCH] Make better error when we have no netmask Fix #1541 --- gns3server/compute/builtin/nodes/cloud.py | 2 ++ gns3server/utils/interfaces.py | 16 ++++++++++++++++ tests/utils/test_interfaces.py | 12 +++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/gns3server/compute/builtin/nodes/cloud.py b/gns3server/compute/builtin/nodes/cloud.py index 5b5bfdf7..8f4a1417 100644 --- a/gns3server/compute/builtin/nodes/cloud.py +++ b/gns3server/compute/builtin/nodes/cloud.py @@ -215,6 +215,8 @@ class Cloud(BaseNode): yield from self._ubridge_send('bridge add_nio_fusion_vmnet {name} "{interface}"'.format(name=bridge_name, interface=port_info["interface"])) else: + if not gns3server.utils.interfaces.has_netmask(port_info["interface"]): + raise NodeError("Interface {} don't have a netmask".format(port_info["interface"])) yield from self._ubridge_send('bridge add_nio_ethernet {name} "{interface}"'.format(name=bridge_name, interface=port_info["interface"])) diff --git a/gns3server/utils/interfaces.py b/gns3server/utils/interfaces.py index 4dfe102c..a3e09a67 100644 --- a/gns3server/utils/interfaces.py +++ b/gns3server/utils/interfaces.py @@ -111,6 +111,22 @@ def get_windows_interfaces(): return interfaces +def has_netmask(interface_name): + """ + Checks if an interface has a netmask. + + :param interface: interface name + + :returns: boolean + """ + for interface in interfaces(): + if interface["name"] == interface_name: + if interface["netmask"] and len(interface["netmask"]) > 0: + return True + return False + return False + + def is_interface_up(interface): """ Checks if an interface is up. diff --git a/tests/utils/test_interfaces.py b/tests/utils/test_interfaces.py index f9d75963..43d4471c 100644 --- a/tests/utils/test_interfaces.py +++ b/tests/utils/test_interfaces.py @@ -17,7 +17,7 @@ import sys -from gns3server.utils.interfaces import interfaces, is_interface_up +from gns3server.utils.interfaces import interfaces, is_interface_up, has_netmask def test_interfaces(): @@ -29,6 +29,16 @@ def test_interfaces(): assert interface["special"] +def test_has_netmask(): + if sys.platform.startswith("win"): + # No loopback + pass + elif sys.platform.startswith("darwin"): + assert has_netmask("lo0") is True + else: + assert has_netmask("lo") is True + + def test_is_interface_up(): if sys.platform.startswith("win"): # is_interface_up() always returns True on Windows