diff --git a/gns3server/modules/dynamips/nodes/ethernet_switch.py b/gns3server/modules/dynamips/nodes/ethernet_switch.py index 72645679..398c1c83 100644 --- a/gns3server/modules/dynamips/nodes/ethernet_switch.py +++ b/gns3server/modules/dynamips/nodes/ethernet_switch.py @@ -21,12 +21,12 @@ http://github.com/GNS3/dynamips/blob/master/README.hypervisor#L558 """ import asyncio +from pkg_resources import parse_version from .device import Device from ..nios.nio_udp import NIOUDP from ..dynamips_error import DynamipsError - import logging log = logging.getLogger(__name__) @@ -255,16 +255,19 @@ class EthernetSwitch(Device): raise DynamipsError("Port {} is not allocated".format(port_number)) nio = self._nios[port_number] + if ethertype != "0x8100" and parse_version(self.hypervisor.version) < parse_version('0.2.16'): + raise DynamipsError("Dynamips version required is >= 0.2.16 to change the default QinQ Ethernet type, detected version is {}".format(self.hypervisor.version)) + yield from self._hypervisor.send('ethsw set_qinq_port "{name}" {nio} {outer_vlan} {ethertype}'.format(name=self._name, - nio=nio, - outer_vlan=outer_vlan, - ethertype=ethertype if ethertype != "0x8100" else "")) + nio=nio, + outer_vlan=outer_vlan, + ethertype=ethertype if ethertype != "0x8100" else "")) log.info('Ethernet switch "{name}" [{id}]: port {port} set as a QinQ ({ethertype}) port with outer VLAN {vlan_id}'.format(name=self._name, - id=self._id, - port=port_number, - vlan_id=outer_vlan, - ethertype=ethertype)) + id=self._id, + port=port_number, + vlan_id=outer_vlan, + ethertype=ethertype)) self._mappings[port_number] = ("qinq", outer_vlan, ethertype) @asyncio.coroutine