[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH 09/14] KVM-test: Add a subtest of multicast
From: |
Lucas Meneghel Rodrigues |
Subject: |
Re: [Qemu-devel] [RFC PATCH 09/14] KVM-test: Add a subtest of multicast |
Date: |
Wed, 28 Jul 2010 18:55:18 -0300 |
On Tue, 2010-07-20 at 09:36 +0800, Amos Kong wrote:
> Use 'ping' to test send/recive multicat packets. Flood ping test is also
> added.
> Limit guest network as 'bridge' mode, because multicast packets could not be
> transmitted to guest when using 'user' network.
> Add join_mcast.py for joining machine into multicast groups.
>
> Signed-off-by: Amos Kong <address@hidden>
> ---
> 0 files changed, 0 insertions(+), 0 deletions(-)
>
> diff --git a/client/tests/kvm/scripts/join_mcast.py
> b/client/tests/kvm/scripts/join_mcast.py
> new file mode 100755
> index 0000000..0d90e5c
> --- /dev/null
> +++ b/client/tests/kvm/scripts/join_mcast.py
> @@ -0,0 +1,29 @@
> +import socket, struct, os, signal, sys
> +# this script is used to join machine into multicast groups
> +# author: Amos Kong <address@hidden>
> +
> +if len(sys.argv) < 4:
> + print """%s [mgroup_count] [prefix] [suffix]
> + mgroup_count: count of multicast addresses
> + prefix: multicast address prefix
> + suffix: multicast address suffix""" % sys.argv[0]
> + sys.exit()
> +
> +mgroup_count = int(sys.argv[1])
> +prefix = sys.argv[2]
> +suffix = int(sys.argv[3])
> +
> +s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
> +for i in range(mgroup_count):
> + mcast = prefix + "." + str(suffix + i)
> + try:
> + mreq = struct.pack("4sl", socket.inet_aton(mcast), socket.INADDR_ANY)
> + s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
> + except:
> + s.close()
> + print "Could not join multicast: %s" % mcast
> + raise
> +
> +print "join_mcast_pid:%s" % os.getpid()
> +os.kill(os.getpid(), signal.SIGSTOP)
> +s.close()
> diff --git a/client/tests/kvm/tests/multicast.py
> b/client/tests/kvm/tests/multicast.py
> new file mode 100644
> index 0000000..6b0e106
> --- /dev/null
> +++ b/client/tests/kvm/tests/multicast.py
> @@ -0,0 +1,67 @@
> +import logging, commands, os, re
> +from autotest_lib.client.common_lib import error
> +import kvm_test_utils, kvm_net_utils
> +
> +
> +def run_multicast(test, params, env):
> + """
> + Test multicast function of nic (rtl8139/e1000/virtio)
> +
> + 1) Create a VM
> + 2) Join guest into multicast groups
> + 3) Ping multicast addresses on host
> + 4) Flood ping test with different size of packets
> + 5) Final ping test and check if lose packet
> +
> + @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,
> + timeout=int(params.get("login_timeout", 360)))
> +
> + # stop iptable/selinux on guest/host
> + cmd = "/etc/init.d/iptables stop && echo 0 > /selinux/enforce"
^ Different linux distros handle init scripts differently, so it's
better to just flush the firewall rules with iptables -F instead of
resorting to the init script.
Also, not all distros use selinux, so it'd be better to test for the
presence of selinux on the system (for example, by checking if there's
a /selinux/enforce file before trying to write to it). Also, need to do
proper return code checking/treatment.
> + session.get_command_status(cmd)
> + commands.getoutput(cmd)
> + # make sure guest replies to broadcasts
> + session.get_command_status("echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore"
> + "_broadcasts && echo 0 >
> /proc/sys/net/ipv4/icmp_echo_ignore_all")
> +
> + # base multicast address
> + mcast = params.get("mcast", "225.0.0.1")
> + # count of multicast addresses, less than 20
> + mgroup_count = int(params.get("mgroup_count", 5))
> + flood_minutes = float(params.get("flood_minutes", 10))
> + ifname = vm.get_ifname()
> + prefix = re.findall("\d+.\d+.\d+", mcast)[0]
> + suffix = int(re.findall("\d+", mcast)[-1])
> + # copy python script to guest for joining guest to multicast groups
> + mcast_path = os.path.join(test.bindir, "scripts/join_mcast.py")
> + vm.copy_files_to(mcast_path, "/tmp")
^ What if copy_files_to fails? Need to do proper return handling here
> + output = session.get_command_output("python /tmp/join_mcast.py %d %s %d"
> %
> + (mgroup_count, prefix, suffix))
> + # if success to join multicast the process will be paused, and return
> pid.
> + if not re.findall("join_mcast_pid:(\d+)", output):
> + raise error.TestFail("Can't join multicast groups,output:%s" %
> output)
> + pid = output.split()[0]
> +
> + try:
> + for i in range(mgroup_count):
> + new_suffix = suffix + i
> + mcast = "%s.%d" % (prefix, new_suffix)
> + logging.info("Initial ping test, mcast: %s", mcast)
> + s, o = kvm_net_utils.ping(mcast, 10, interface=ifname,
> timeout=20)
> + if s != 0:
> + raise error.TestFail(" Ping return non-zero value %s" % o)
> + logging.info("Flood ping test, mcast: %s", mcast)
> + kvm_net_utils.ping(mcast, None, interface=ifname, flood=True,
> + output_func=None, timeout=flood_minutes*60)
> + logging.info("Final ping test, mcast: %s", mcast)
> + s, o = kvm_net_utils.ping(mcast, 10, interface=ifname,
> timeout=20)
> + if s != 0:
> + raise error.TestFail(" Ping return non-zero value %s" % o)
^ "Ping failed, status: %s, output: %s" % (s, o) would be a better
exception
> + finally:
> + session.get_command_output("kill -s SIGCONT %s" % pid)
> + session.close()
> diff --git a/client/tests/kvm/tests_base.cfg.sample
> b/client/tests/kvm/tests_base.cfg.sample
> index 9e2b9a0..9594a38 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -374,6 +374,13 @@ variants:
> type = nic_promisc
> file_size = 1, 1460, 65000, 100000000
>
> + - multicast: install setup unattended_install.cdrom
> + type = multicast
> + nic_mode = tap
> + mcast = 225.0.0.1
> + mgroup_count = 20
> + flood_minutes = 1
> +
> - physical_resources_check: install setup unattended_install.cdrom
> type = physical_resources_check
> catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}'
> @@ -1050,7 +1057,7 @@ variants:
>
> # Windows section
> - @Windows:
> - no autotest linux_s3 vlan_tag ioquit
> unattended_install.(url|nfs|remote_ks) jumbo file_transfer nicdriver_unload
> nic_promisc
> + no autotest linux_s3 vlan_tag ioquit
> unattended_install.(url|nfs|remote_ks) jumbo file_transfer nicdriver_unload
> nic_promisc multicast
> 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 address@hidden
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
- [Qemu-devel] Re: [RFC PATCH 04/14] KVM-test: Add a new subtest ping, (continued)
- [Qemu-devel] [RFC PATCH 05/14] KVM-test: Add a subtest jumbo, Amos Kong, 2010/07/19
- [Qemu-devel] [RFC PATCH 06/14] KVM-test: Add basic file transfer test, Amos Kong, 2010/07/19
- [Qemu-devel] [RFC PATCH 07/14] KVM-test: Add a subtest of load/unload nic driver, Amos Kong, 2010/07/19
- [Qemu-devel] [RFC PATCH 08/14] KVM-test: Add a subtest of nic promisc, Amos Kong, 2010/07/19
- [Qemu-devel] [RFC PATCH 09/14] KVM-test: Add a subtest of multicast, Amos Kong, 2010/07/19
- Re: [Qemu-devel] [RFC PATCH 09/14] KVM-test: Add a subtest of multicast,
Lucas Meneghel Rodrigues <=
- [Qemu-devel] [RFC PATCH 10/14] KVM-test: Add a subtest of pxe, Amos Kong, 2010/07/19
- [Qemu-devel] [RFC PATCH 11/14] KVM-test: Add a subtest of changing mac address, Amos Kong, 2010/07/19
- [Qemu-devel] [RFC PATCH 12/14] KVM-test: Add a subtest of netperf, Amos Kong, 2010/07/19
- [Qemu-devel] [RFC PATCH 13/14] KVM-test: Improve vlan subtest, Amos Kong, 2010/07/19
- [Qemu-devel] [RFC PATCH 14/14] KVM-test: Add subtest of testing offload by ethtool, Amos Kong, 2010/07/19
- [Qemu-devel] Re: [Autotest][RFC PATCH 00/14] Patchset of network related subtests, Lucas Meneghel Rodrigues, 2010/07/20