From 57e2fd9943bbc3ef013d4d03ec9ecca628abf4bb Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Thu, 10 Nov 2016 22:39:16 +0100 Subject: [PATCH] If we can found a common subnet we return the host binding for link creation Fix #773 --- gns3server/controller/compute.py | 4 ++++ tests/controller/test_compute.py | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/gns3server/controller/compute.py b/gns3server/controller/compute.py index 70d4b0bd..16baa7d9 100644 --- a/gns3server/controller/compute.py +++ b/gns3server/controller/compute.py @@ -618,4 +618,8 @@ class Compute: other_network = ipaddress.ip_network("{}/{}".format(other_interface["ip_address"], other_interface["netmask"]), strict=False) if this_network.overlaps(other_network): return (this_interface["ip_address"], other_interface["ip_address"]) + + # Perhaps the user has correct network gateway + if (self.host_ip not in ('0.0.0.0', '127.0.0.1') and other_compute.host_ip not in ('0.0.0.0', '127.0.0.1')): + return (self.host_ip, other_compute.host_ip) raise ValueError("No common subnet for compute {} and {}".format(self.name, other_compute.name)) diff --git a/tests/controller/test_compute.py b/tests/controller/test_compute.py index 86f9a2cc..5af58274 100644 --- a/tests/controller/test_compute.py +++ b/tests/controller/test_compute.py @@ -447,7 +447,6 @@ def test_get_ip_on_same_subnet(controller, async_run): assert async_run(compute1.get_ip_on_same_subnet(compute2)) == ("192.168.1.1", "192.168.1.2") #No common interface - # Case 2 compute2 host is on a different network but a common interface is available compute2 = Compute("compute2", host="127.0.0.1", controller=controller) compute2._interfaces_cache = [ { @@ -481,5 +480,4 @@ def test_get_ip_on_same_subnet(controller, async_run): "netmask": "255.255.0.0" }, ] - with pytest.raises(ValueError): - assert async_run(compute1.get_ip_on_same_subnet(compute2)) + assert async_run(compute1.get_ip_on_same_subnet(compute2)) == ('192.168.2.1', '192.168.1.2')