diff options
-rw-r--r-- | conf/04_vnf.conf | 16 | ||||
-rw-r--r-- | testcases/testcase.py | 47 | ||||
-rw-r--r-- | vnfs/qemu/qemu.py | 43 |
3 files changed, 65 insertions, 41 deletions
diff --git a/conf/04_vnf.conf b/conf/04_vnf.conf index 2be96859..dc15fd15 100644 --- a/conf/04_vnf.conf +++ b/conf/04_vnf.conf @@ -47,19 +47,19 @@ GUEST_TIMEOUT = [180, 180] GUEST_LOOPBACK = ['testpmd', 'testpmd'] # username for guest image -GUEST_USERNAME = '' +GUEST_USERNAME = 'root' # password for guest image -GUEST_PASSWORD = '' +GUEST_PASSWORD = 'root' # login username prompt for guest image GUEST_PROMPT_LOGIN = '.* login:' # login password prompt for guest image -GUEST_PROMPT_PASSWORD = '' +GUEST_PROMPT_PASSWORD = 'Password: ' # standard prompt for guest image -GUEST_PROMPT = '' +GUEST_PROMPT = 'root.*#' # log file for qemu LOG_FILE_QEMU = 'qemu.log' @@ -74,11 +74,14 @@ LOG_FILE_GUEST_CMDS = 'guest-cmds.log' QEMU_BIN = os.path.join(QEMU_DIR, 'x86_64-softmmu/qemu-system-x86_64') +# For 2 VNFs you may use ['eth0', 'eth2'] +GUEST_NIC1_NAME = ['eth0', 'eth0'] +GUEST_NIC2_NAME = ['eth1', 'eth1'] + # For 2 VNFs you may use ['00:00:00:00:00:01', '00:00:00:00:00:03'] GUEST_NET1_MAC = ['00:00:00:00:00:01', '00:00:00:00:00:03'] GUEST_NET2_MAC = ['00:00:00:00:00:02', '00:00:00:00:00:04'] - # For 2 VNFs you may use ['00:04.0', '00:04.0'] GUEST_NET1_PCI_ADDRESS = ['00:04.0', '00:04.0'] GUEST_NET2_PCI_ADDRESS = ['00:05.0', '00:05.0'] @@ -115,9 +118,6 @@ VANILLA_TGEN_PORT2_MAC = 'AA:BB:CC:DD:EE:F0' VANILLA_BRIDGE_IP = ['1.1.1.5/16', '1.1.1.6/16'] -VANILLA_NIC1_NAME = ['eth1', 'eth3'] -VANILLA_NIC2_NAME = ['eth2', 'eth4'] - VANILLA_NIC1_IP_CIDR = ['192.168.1.2/24', '192.168.1.4/24'] VANILLA_NIC2_IP_CIDR = ['192.168.1.3/24', '192.168.1.5/24'] diff --git a/testcases/testcase.py b/testcases/testcase.py index 1bb7aba5..986fbe4b 100644 --- a/testcases/testcase.py +++ b/testcases/testcase.py @@ -18,6 +18,7 @@ import csv import os import logging import subprocess +import copy from collections import OrderedDict from core.results.results_constants import ResultsConstants @@ -85,7 +86,7 @@ class TestCase(object): self._results_dir = results_dir # set traffic details, so they can be passed to vswitch and traffic ctls - self._traffic = TRAFFIC_DEFAULTS.copy() + self._traffic = copy.deepcopy(TRAFFIC_DEFAULTS) self._traffic.update({'traffic_type': cfg['Traffic Type'], 'flow_type': cfg.get('Flow Type', 'port'), 'bidir': cfg['biDirectional'], @@ -96,10 +97,10 @@ class TestCase(object): # OVS Vanilla requires guest VM MAC address and IPs to work if 'linux_bridge' in self.guest_loopback: - self._traffic['l2'] = {'srcmac': S.getValue('GUEST_NET2_MAC')[0], - 'dstmac': S.getValue('GUEST_NET1_MAC')[0]} - self._traffic['l3'] = {'srcip': S.getValue('VANILLA_TGEN_PORT1_IP'), - 'dstip': S.getValue('VANILLA_TGEN_PORT2_IP')} + self._traffic['l2'].update({'srcmac': S.getValue('GUEST_NET2_MAC')[0], + 'dstmac': S.getValue('GUEST_NET1_MAC')[0]}) + self._traffic['l3'].update({'srcip': S.getValue('VANILLA_TGEN_PORT1_IP'), + 'dstip': S.getValue('VANILLA_TGEN_PORT2_IP')}) def run(self): """Run the test @@ -109,8 +110,7 @@ class TestCase(object): self._logger.debug(self.name) # copy sources of l2 forwarding tools into VM shared dir if needed - if 'testpmd' in self.guest_loopback or 'l2fwd' in self.guest_loopback: - self._copy_fwd_tools_for_guest() + self._copy_fwd_tools_for_guest() self._logger.debug("Controllers:") loader = Loader() @@ -267,24 +267,27 @@ class TestCase(object): while counter < self.deployment.count('v'): guest_dir = S.getValue('GUEST_SHARE_DIR')[counter] + # create shared dir if it doesn't exist if not os.path.exists(guest_dir): os.makedirs(guest_dir) - try: - tasks.run_task(['rsync', '-a', '-r', '-l', r'--exclude="\.git"', - os.path.join(S.getValue('RTE_SDK'), ''), - os.path.join(guest_dir, 'DPDK')], - self._logger, - 'Copying DPDK to shared directory...', - True) - tasks.run_task(['rsync', '-a', '-r', '-l', - os.path.join(S.getValue('ROOT_DIR'), 'src/l2fwd/'), - os.path.join(guest_dir, 'l2fwd')], - self._logger, - 'Copying l2fwd to shared directory...', - True) - except subprocess.CalledProcessError: - self._logger.error('Unable to copy DPDK and l2fwd to shared directory') + # copy sources into shared dir only if neccessary + if 'testpmd' in self.guest_loopback or 'l2fwd' in self.guest_loopback: + try: + tasks.run_task(['rsync', '-a', '-r', '-l', r'--exclude="\.git"', + os.path.join(S.getValue('RTE_SDK'), ''), + os.path.join(guest_dir, 'DPDK')], + self._logger, + 'Copying DPDK to shared directory...', + True) + tasks.run_task(['rsync', '-a', '-r', '-l', + os.path.join(S.getValue('ROOT_DIR'), 'src/l2fwd/'), + os.path.join(guest_dir, 'l2fwd')], + self._logger, + 'Copying l2fwd to shared directory...', + True) + except subprocess.CalledProcessError: + self._logger.error('Unable to copy DPDK and l2fwd to shared directory') counter += 1 diff --git a/vnfs/qemu/qemu.py b/vnfs/qemu/qemu.py index f292d7d9..bf7b1a90 100644 --- a/vnfs/qemu/qemu.py +++ b/vnfs/qemu/qemu.py @@ -51,8 +51,17 @@ class IVnfQemu(IVnf): S.getValue('LOG_FILE_QEMU')) + str(self._number) self._timeout = S.getValue('GUEST_TIMEOUT')[self._number] self._monitor = '%s/vm%dmonitor' % ('/tmp', self._number) - self._net1 = S.getValue('VANILLA_NIC1_NAME')[self._number] - self._net2 = S.getValue('VANILLA_NIC2_NAME')[self._number] + self._net1 = get_test_param('guest_nic1_name', None) + if self._net1 == None: + self._net1 = S.getValue('GUEST_NIC1_NAME')[self._number] + else: + self._net1 = self._net1.split(',')[self._number] + self._net2 = get_test_param('guest_nic2_name', None) + if self._net2 == None: + self._net2 = S.getValue('GUEST_NIC2_NAME')[self._number] + else: + self._net2 = self._net2.split(',')[self._number] + name = 'Client%d' % self._number vnc = ':%d' % self._number @@ -62,7 +71,7 @@ class IVnfQemu(IVnf): '-m', S.getValue('GUEST_MEMORY')[self._number], '-smp', str(S.getValue('GUEST_SMP')[self._number]), '-cpu', 'host', - '-drive', 'if=ide,file=' + + '-drive', 'if=scsi,file=' + S.getValue('GUEST_IMAGE')[self._number], '-boot', 'c', '--enable-kvm', '-monitor', 'unix:%s,server,nowait' % self._monitor, @@ -74,7 +83,7 @@ class IVnfQemu(IVnf): '-nographic', '-vnc', str(vnc), '-name', name, '-snapshot', '-net none', '-no-reboot', '-drive', - 'if=ide,file=fat:rw:%s,snapshot=off' % + 'if=scsi,file=fat:rw:%s,snapshot=off' % S.getValue('GUEST_SHARE_DIR')[self._number], ] self._configure_logging() @@ -237,9 +246,22 @@ class IVnfQemu(IVnf): """ Disable firewall in VM """ - # Disable services (F16) - self.execute_and_wait('systemctl status iptables.service') - self.execute_and_wait('systemctl stop iptables.service') + for iptables in ['iptables', 'ip6tables']: + # filter table + for chain in ['INPUT', 'FORWARD', 'OUTPUT']: + self.execute_and_wait("{} -t filter -P {} ACCEPT".format(iptables, chain)) + # mangle table + for chain in ['PREROUTING', 'INPUT', 'FORWARD', 'OUTPUT', 'POSTROUTING']: + self.execute_and_wait("{} -t mangle -P {} ACCEPT".format(iptables, chain)) + # nat table + for chain in ['PREROUTING', 'INPUT', 'OUTPUT', 'POSTROUTING']: + self.execute_and_wait("{} -t nat -P {} ACCEPT".format(iptables, chain)) + + # flush rules and delete chains created by user + for table in ['filter', 'mangle', 'nat']: + self.execute_and_wait("{} -t {} -F".format(iptables, table)) + self.execute_and_wait("{} -t {} -X".format(iptables, table)) + def _configure_testpmd(self): """ @@ -313,12 +335,11 @@ class IVnfQemu(IVnf): Configure VM to perform L2 forwarding between NICs by linux bridge """ self._configure_disable_firewall() - nic1_name = get_test_param('vanilla_nic1_name', self._net1) - self.execute('ifconfig ' + nic1_name + ' ' + + + self.execute('ifconfig ' + self._net1 + ' ' + S.getValue('VANILLA_NIC1_IP_CIDR')[self._number]) - nic2_name = get_test_param('vanilla_nic2_name', self._net2) - self.execute('ifconfig ' + nic2_name + ' ' + + self.execute('ifconfig ' + self._net2 + ' ' + S.getValue('VANILLA_NIC2_IP_CIDR')[self._number]) # configure linux bridge |