On Tue, 2010-07-20 at 09:35 +0800, Amos Kong wrote: > According to different nic model set different MTU for it. And ping from guest > to host, to see whether tested size can be received by host. > > Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> > Signed-off-by: Amos Kong <akong@xxxxxxxxxx> > --- > 0 files changed, 0 insertions(+), 0 deletions(-) > > diff --git a/client/tests/kvm/tests/jumbo.py b/client/tests/kvm/tests/jumbo.py > new file mode 100644 > index 0000000..9f56a87 > --- /dev/null > +++ b/client/tests/kvm/tests/jumbo.py > @@ -0,0 +1,133 @@ > +import os, re, logging, commands, time, random > +from autotest_lib.client.common_lib import error > +import kvm_subprocess, kvm_test_utils, kvm_utils, kvm_net_utils > + > +def run_jumbo(test, params, env): > + """ > + Test the RX jumbo frame function of vnics: > + 1) boot the vm > + 2) change the MTU of guest nics and host taps depends on the nic model ^ I think you meant 'depending on the nic model' > + 3) add the static arp entry for guest nic > + 4) wait for the MTU ok > + 5) verify the patch mtu using ping > + 6) ping the guest with large frames > + 7) increament size ping ^ typo, increment > + 8) flood ping the guest with large frames > + 9) verify the path mtu > + 10) revocer the mtu ^ maybe a typo, restore? > + > + @param test: kvm test object > + @param params: Dictionary with the test parameters > + @param env: Dictionary with test environment. > + """ > + > + vm = kvm_test_utils.get_living_vm(env, params.get("main_vm")) > + session = kvm_test_utils.wait_for_login(vm) > + mtu = params.get("mtu", "1500") > + flood_time = params.get("flood_time", "300") > + max_icmp_pkt_size = int(mtu) - 28 > + > + ifname = vm.get_ifname(0) > + ip = vm.get_address(0) > + if ip is None: > + raise error.TestError("Could not get the ip address") > + > + try: > + # Environment preparartion ^ typo, preparation > + ethname = kvm_net_utils.get_linux_ifname(session, vm.get_macaddr(0)) > + > + logging.info("Changing the mtu of guest ...") > + guest_mtu_cmd = "ifconfig %s mtu %s" % (ethname , mtu) > + s, o = session.get_command_status_output(guest_mtu_cmd) > + if s != 0: > + logging.error(o) > + raise error.TestError("Fail to set the mtu of guest nic: %s" > + % ethname) > + > + logging.info("Chaning the mtu of host tap ...") > + host_mtu_cmd = "ifconfig %s mtu %s" % (ifname, mtu) > + s, o = commands.getstatusoutput(host_mtu_cmd) > + if s != 0: > + raise error.TestError("Fail to set the mtu of %s" % ifname) > + > + logging.info("Add a temporary static arp entry ...") > + arp_add_cmd = "arp -s %s %s -i %s" % (ip, vm.get_macaddr(0), ifname) > + s, o = commands.getstatusoutput(arp_add_cmd) > + if s != 0 : > + raise error.TestError("Fail to add temporary arp entry") > + > + def is_mtu_ok(): > + s, o = kvm_net_utils.ping(ip, 1, interface = ifname, > + packetsize = max_icmp_pkt_size, > + hint = "do", timeout = 2) ^ please fix the default argument attribution, here and all subsequent calls > + if s != 0: > + return False > + else: > + return True ^ Here you could simple use return s != 0 > + > + def verify_mtu(): > + logging.info("Verify the path mtu") > + s, o = kvm_net_utils.ping(ip, 10, interface = ifname, > + packetsize = max_icmp_pkt_size, > + hint = "do", timeout = 15) > + if s != 0 : > + logging.error(o) > + raise error.TestFail("Path MTU is not as expected") > + if kvm_net_utils.get_loss_ratio(o) != 0: > + logging.error(o) > + raise error.TestFail("Packet loss ratio during mtu verification" > + " is not zero") > + > + def flood_ping(): > + logging.info("Flood with large frames") > + kvm_net_utils.ping(ip, interface = ifname, > + packetsize = max_icmp_pkt_size, > + flood = True, timeout = float(flood_time)) > + > + def large_frame_ping(count = 100): > + logging.info("Large frame ping") > + s, o = kvm_net_utils.ping(ip, count, interface = ifname, > + packetsize = max_icmp_pkt_size, > + timeout = float(count) * 2) > + ratio = kvm_net_utils.get_loss_ratio(o) > + if ratio != 0: > + raise error.TestFail("Loss ratio of large frame ping is %s" \ > + % ratio) ^ No need to use the backslash to end line here > + def size_increase_ping(step = random.randrange(90, 110)): > + logging.info("Size increase ping") > + for size in range(0, max_icmp_pkt_size + 1, step): > + logging.info("Ping %s with size %s" % (ip, size)) > + s, o = kvm_net_utils.ping(ip, 1, interface = ifname, > + packetsize = size, > + hint = "do", timeout = 1) > + if s != 0: > + s, o = kvm_net_utils.ping(ip, 10, interface = ifname, > + packetsize = size, > + adaptive = True, hint = "do", > + timeout = 20) > + if kvm_net_utils.get_loss_ratio(o) > 50: > + raise error.TestFail("ping loss ratio is greater " > + "than 50% for size %s" % size) ^ How do we stablish 50% as an acceptable packet loss ratio for this test? Seems high to me, but I might be missing something > + > + logging.info("Waiting for the MTU to be OK") > + # Wait for the MTU is OK ^ Unneeded comment, as we have an info message stating the same thing > + if not kvm_utils.wait_for(is_mtu_ok, 10, 0, 1): > + logging.debug(commands.getoutput("ifconfig -a")) > + raise error.TestError("10 seconds elapsed while the mtu is not" > + " as expected") > + > + # Functional Test > + verify_mtu() > + large_frame_ping() > + size_increase_ping() > + > + # Stress test > + flood_ping() > + verify_mtu() > + > + finally: > + # Environment clean > + session.close() > + logging.info("Removing the temporary arp entry") > + commands.getstatusoutput("arp -d %s -i %s" % (ip, ifname)) > diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample > index 4f58dc0..7f7b56a 100644 > --- a/client/tests/kvm/tests_base.cfg.sample > +++ b/client/tests/kvm/tests_base.cfg.sample > @@ -354,6 +354,9 @@ variants: > counts = 100 > flood_minutes = 10 > > + - jumbo: install setup unattended_install.cdrom > + type = jumbo > + > - physical_resources_check: install setup unattended_install.cdrom > type = physical_resources_check > catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}' > @@ -489,10 +492,16 @@ variants: > variants: > - @rtl8139: > nic_model = rtl8139 > + jumbo: > + mtu = 1500 > - e1000: > nic_model = e1000 > + jumbo: > + mtu = 16110 > - virtio: > nic_model = virtio > + jumbo: > + mtu = 65520 > > > # Guests > @@ -1024,7 +1033,7 @@ variants: > > # Windows section > - @Windows: > - no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks) > + no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks) jumbo > shutdown_command = shutdown /s /f /t 0 > reboot_command = shutdown /r /f /t 0 > status_test_command = echo %errorlevel% > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html