From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dor Laor Subject: Re: [Autotest] [PATCH] Test 802.1Q vlan of nic Date: Mon, 19 Oct 2009 10:22:21 +0200 Message-ID: <4ADC21BD.5080304@redhat.com> References: <1253704740-26370-1-git-send-email-akong@redhat.com> <6ac58f4f0910140351g62afbe4ak5ada703c598ffbad@mail.gmail.com> <20091015094852.GA8640@dhcp-66-70-48.nay.redhat.com> Reply-To: dlaor@redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Lucas Meneghel Rodrigues , autotest@test.kernel.org, kvm@vger.kernel.org To: Amos Kong Return-path: Received: from mx1.redhat.com ([209.132.183.28]:61013 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751534AbZJSIWV (ORCPT ); Mon, 19 Oct 2009 04:22:21 -0400 In-Reply-To: <20091015094852.GA8640@dhcp-66-70-48.nay.redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 10/15/2009 11:48 AM, Amos Kong wrote: > > Test 802.1Q vlan of nic, config it by vconfig command. > 1) Create two VMs > 2) Setup guests in different vlan by vconfig and test communication by ping > using hard-coded ip address > 3) Setup guests in same vlan and test communication by ping > 4) Recover the vlan config > > Signed-off-by: Amos Kong > --- > client/tests/kvm/kvm_tests.cfg.sample | 6 +++ > client/tests/kvm/tests/vlan_tag.py | 73 +++++++++++++++++++++++++++++++++ > 2 files changed, 79 insertions(+), 0 deletions(-) > mode change 100644 => 100755 client/tests/kvm/scripts/qemu-ifup In general the above should come as an independent patch. > create mode 100644 client/tests/kvm/tests/vlan_tag.py > > diff --git a/client/tests/kvm/kvm_tests.cfg.sample b/client/tests/kvm/kvm_tests.cfg.sample > index 9ccc9b5..4e47767 100644 > --- a/client/tests/kvm/kvm_tests.cfg.sample > +++ b/client/tests/kvm/kvm_tests.cfg.sample > @@ -166,6 +166,12 @@ variants: > used_cpus = 5 > used_mem = 2560 > > + - vlan_tag: install setup > + type = vlan_tag > + subnet2 = 192.168.123 > + vlans = "10 20" If we want to be fanatic and safe we should dynamically choose subnet and vlans numbers that are not used on the host instead of hard code it. > + nic_mode = tap > + nic_model = e1000 Why only e1000? Let's test virtio and rtl8139 as well. Can't you inherit the nic model from the config? > > - autoit: install setup > type = autoit > diff --git a/client/tests/kvm/scripts/qemu-ifup b/client/tests/kvm/scripts/qemu-ifup > old mode 100644 > new mode 100755 > diff --git a/client/tests/kvm/tests/vlan_tag.py b/client/tests/kvm/tests/vlan_tag.py > new file mode 100644 > index 0000000..15e763f > --- /dev/null > +++ b/client/tests/kvm/tests/vlan_tag.py > @@ -0,0 +1,73 @@ > +import logging, time > +from autotest_lib.client.common_lib import error > +import kvm_subprocess, kvm_test_utils, kvm_utils > + > +def run_vlan_tag(test, params, env): > + """ > + Test 802.1Q vlan of nic, config it by vconfig command. > + > + 1) Create two VMs > + 2) Setup guests in different vlan by vconfig and test communication by ping > + using hard-coded ip address > + 3) Setup guests in same vlan and test communication by ping > + 4) Recover the vlan config > + > + @param test: Kvm test object > + @param params: Dictionary with the test parameters. > + @param env: Dictionary with test environment. > + """ > + > + vm = [] > + session = [] > + subnet2 = params.get("subnet2") > + vlans = params.get("vlans").split() > + > + vm.append(kvm_test_utils.get_living_vm(env, "%s" % params.get("main_vm"))) > + > + params_vm2 = params.copy() > + params_vm2['image_snapshot'] = "yes" > + params_vm2['kill_vm_gracefully'] = "no" > + params_vm2["address_index"] = int(params.get("address_index", 0))+1 > + vm.append(vm[0].clone("vm2", params_vm2)) > + kvm_utils.env_register_vm(env, "vm2", vm[1]) > + if not vm[1].create(): > + raise error.TestError("VM 1 create faild") The whole 7-8 lines above should be grouped as a function to clone existing VM. It should be part of kvm autotest infrastructure. Besides that, it looks good. > + > + for i in range(2): > + session.append(kvm_test_utils.wait_for_login(vm[i])) > + > + try: > + vconfig_cmd = "vconfig add eth0 %s;ifconfig eth0.%s %s.%s" > + # Attempt to configure IPs for the VMs and record the results in > + # boolean variables > + # Make vm1 and vm2 in the different vlan > + > + ip_config_vm1_ok = (session[0].get_command_status(vconfig_cmd > + % (vlans[0], vlans[0], subnet2, "11")) == 0) > + ip_config_vm2_ok = (session[1].get_command_status(vconfig_cmd > + % (vlans[1], vlans[1], subnet2, "12")) == 0) > + if not ip_config_vm1_ok or not ip_config_vm2_ok: > + raise error.TestError, "Fail to config VMs ip address" > + ping_diff_vlan_ok = (session[0].get_command_status( > + "ping -c 2 %s.12" % subnet2) == 0) > + > + if ping_diff_vlan_ok: > + raise error.TestFail("VM 2 is unexpectedly pingable in different " > + "vlan") > + # Make vm2 in the same vlan with vm1 > + vlan_config_vm2_ok = (session[1].get_command_status( > + "vconfig rem eth0.%s;vconfig add eth0 %s;" > + "ifconfig eth0.%s %s.12" % > + (vlans[1], vlans[0], vlans[0], subnet2)) == 0) > + if not vlan_config_vm2_ok: > + raise error.TestError, "Fail to config ip address of VM 2" > + > + ping_same_vlan_ok = (session[0].get_command_status( > + "ping -c 2 %s.12" % subnet2) == 0) > + if not ping_same_vlan_ok: > + raise error.TestFail("Fail to ping the guest in same vlan") > + finally: > + # Clean the vlan config > + for i in range(2): > + session[i].sendline("vconfig rem eth0.%s" % vlans[0]) > + session[i].close()