From 1550ca01e6c7f0f74e448f37191248f164d5efad Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Fri, 13 Feb 2015 16:41:18 +0100 Subject: [PATCH] IOU support nio ethernet --- gns3server/modules/base_manager.py | 3 ++ .../modules/nios/nio_generic_ethernet.py | 54 +++++++++++++++++++ tests/api/test_iou.py | 11 ++++ 3 files changed, 68 insertions(+) create mode 100644 gns3server/modules/nios/nio_generic_ethernet.py diff --git a/gns3server/modules/base_manager.py b/gns3server/modules/base_manager.py index f38feacd..a93cf1fd 100644 --- a/gns3server/modules/base_manager.py +++ b/gns3server/modules/base_manager.py @@ -34,6 +34,7 @@ from .project_manager import ProjectManager from .nios.nio_udp import NIO_UDP from .nios.nio_tap import NIO_TAP +from .nios.nio_generic_ethernet import NIO_GenericEthernet class BaseManager: @@ -280,5 +281,7 @@ class BaseManager: if not self._has_privileged_access(executable): raise aiohttp.web.HTTPForbidden(text="{} has no privileged access to {}.".format(executable, tap_device)) nio = NIO_TAP(tap_device) + elif nio_settings["type"] == "nio_generic_ethernet": + nio = NIO_GenericEthernet(nio_settings["ethernet_device"]) assert nio is not None return nio diff --git a/gns3server/modules/nios/nio_generic_ethernet.py b/gns3server/modules/nios/nio_generic_ethernet.py new file mode 100644 index 00000000..16b46e05 --- /dev/null +++ b/gns3server/modules/nios/nio_generic_ethernet.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013 GNS3 Technologies Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +""" +Interface for generic Ethernet NIOs (PCAP library). +""" + +from .nio import NIO + + +class NIO_GenericEthernet(NIO): + """ + Generic Ethernet NIO. + + :param ethernet_device: Ethernet device name (e.g. eth0) + """ + + def __init__(self, ethernet_device): + + NIO.__init__(self) + self._ethernet_device = ethernet_device + + @property + def ethernet_device(self): + """ + Returns the Ethernet device used by this NIO. + + :returns: the Ethernet device name + """ + + return self._ethernet_device + + def __str__(self): + + return "NIO Ethernet" + + def __json__(self): + + return {"type": "nio_generic_ethernet", + "ethernet_device": self._ethernet_device} diff --git a/tests/api/test_iou.py b/tests/api/test_iou.py index 61837160..3f5b40cb 100644 --- a/tests/api/test_iou.py +++ b/tests/api/test_iou.py @@ -146,6 +146,17 @@ def test_iou_nio_create_udp(server, vm): assert response.json["type"] == "nio_udp" +def test_iou_nio_create_ethernet(server, vm): + response = server.post("/projects/{project_id}/iou/vms/{vm_id}/ports/0/nio".format(project_id=vm["project_id"], vm_id=vm["vm_id"]), {"type": "nio_generic_ethernet", + "ethernet_device": "eth0", + }, + example=True) + assert response.status == 201 + assert response.route == "/projects/{project_id}/iou/vms/{vm_id}/ports/{port_number:\d+}/nio" + assert response.json["type"] == "nio_generic_ethernet" + assert response.json["ethernet_device"] == "eth0" + + def test_iou_nio_create_tap(server, vm): with patch("gns3server.modules.base_manager.BaseManager._has_privileged_access", return_value=True): response = server.post("/projects/{project_id}/iou/vms/{vm_id}/ports/0/nio".format(project_id=vm["project_id"], vm_id=vm["vm_id"]), {"type": "nio_tap",