From 3af55a78fcd572f93b1a46178bffc4c8e90534f2 Mon Sep 17 00:00:00 2001 From: Dino Simeon Madarang Date: Wed, 15 Jul 2015 09:22:07 +0100 Subject: vnfs: Enable PVP using vhost-user Enable booting of a VM with DPDK and run testpmd for PVP testing. * Added throughput and back2back tests with pvp deployment scenario in 01_testcases.conf * PVP requires DPDK 2.0 with VHOST_USER enabled and QEMU 2.2.0 * Tested on CentOS7 and Fedora 20 * Fix conflict with change 1078 Recent Changes: * Fix merge conflict (testcase.py and testcases.conf) * Remove QEMU_DIR. User must set QEMU_BIN * Set bidir traffic to True * Add flow for bi-directional traffic * Use working OVS_TAG ad2e649834be20dd01b1632799fe778106a96a2d * Merge change 1096 (src: Add QEMU makefile) * Set virtio-net-pci csum=off and other variables to off * Move hardcoded values to conf/* JIRA: VSPERF-56 Change-Id: I4ad184531064855493483d9833a7722c9f7d3576 Signed-off-by: Madarang, Dino Simeon Signed-off-by: Meghan Halton Reviewed-by: Billy O Mahony Reviewed-by: Maryam Tahhan Reviewed-by: Martin Klozik --- core/vswitch_controller_pvp.py | 60 +++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 12 deletions(-) (limited to 'core/vswitch_controller_pvp.py') diff --git a/core/vswitch_controller_pvp.py b/core/vswitch_controller_pvp.py index c0286323..8c409dc2 100644 --- a/core/vswitch_controller_pvp.py +++ b/core/vswitch_controller_pvp.py @@ -18,6 +18,12 @@ import logging from core.vswitch_controller import IVswitchController +from vswitches.utils import add_ports_to_flow + +_FLOW_TEMPLATE = { + 'idle_timeout': '0' +} +BRIDGE_NAME = 'br0' class VswitchControllerPVP(IVswitchController): """VSwitch controller for PVP deployment scenario. @@ -28,7 +34,7 @@ class VswitchControllerPVP(IVswitchController): _deployment_scenario: A string describing the scenario to set-up in the constructor. """ - def __init__(self, vswitch_class): + def __init__(self, vswitch_class, bidir=False): """Initializes up the prerequisites for the PVP deployment scenario. :vswitch_class: the vSwitch class to be used. @@ -37,22 +43,55 @@ class VswitchControllerPVP(IVswitchController): self._vswitch_class = vswitch_class self._vswitch = vswitch_class() self._deployment_scenario = "PVP" + self._bidir = bidir self._logger.debug('Creation using ' + str(self._vswitch_class)) def setup(self): + """ Sets up the switch for pvp """ - Sets up the switch for the particular deployment scenario passed in to - the constructor. - """ - # TODO call IVSwitch methods to configure VSwitch for PVP scenario. self._logger.debug('Setup using ' + str(self._vswitch_class)) + try: + self._vswitch.start() + + self._vswitch.add_switch(BRIDGE_NAME) + + (_, phy1_number) = self._vswitch.add_phy_port(BRIDGE_NAME) + (_, phy2_number) = self._vswitch.add_phy_port(BRIDGE_NAME) + (_, vport1_number) = self._vswitch.add_vport(BRIDGE_NAME) + (_, vport2_number) = self._vswitch.add_vport(BRIDGE_NAME) + + self._vswitch.del_flow(BRIDGE_NAME) + flow1 = add_ports_to_flow(_FLOW_TEMPLATE, phy1_number, + vport1_number) + flow2 = add_ports_to_flow(_FLOW_TEMPLATE, vport2_number, + phy2_number) + self._vswitch.add_flow(BRIDGE_NAME, flow1) + self._vswitch.add_flow(BRIDGE_NAME, flow2) + + if self._bidir: + flow3 = add_ports_to_flow(_FLOW_TEMPLATE, phy2_number, + vport2_number) + flow4 = add_ports_to_flow(_FLOW_TEMPLATE, vport1_number, + phy1_number) + self._vswitch.add_flow(BRIDGE_NAME, flow3) + self._vswitch.add_flow(BRIDGE_NAME, flow4) + + except: + self._vswitch.stop() + raise + def stop(self): + """Tears down the switch created in setup(). """ - Tears down the switch created in setup(). - """ - # TODO call IVSwitch methods to stop VSwitch for PVP scenario. self._logger.debug('Stop using ' + str(self._vswitch_class)) + self._vswitch.stop() + + def __enter__(self): + self.setup() + + def __exit__(self, type_, value, traceback): + self.stop() def get_vswitch(self): """See IVswitchController for description @@ -63,7 +102,4 @@ class VswitchControllerPVP(IVswitchController): """See IVswitchController for description """ self._logger.debug('get_ports_info using ' + str(self._vswitch_class)) - return [] - - - + return self._vswitch.get_ports(BRIDGE_NAME) -- cgit 1.2.3-korg