From: Amos Kong <akong@redhat.com>
To: Lucas Meneghel Rodrigues <lmr@redhat.com>
Cc: autotest@test.kernel.org, kvm@vger.kernel.org, mst@redhat.com,
jasowang@redhat.com, psuriset@linux.vnet.ibm.com,
mgoldish@redhat.com
Subject: Re: [PATCH 11/18] KVM test: Add a subtest of multicast
Date: Tue, 5 Oct 2010 20:21:33 +0800 [thread overview]
Message-ID: <20101005122133.GA9404@z> (raw)
In-Reply-To: <1285627444-2732-12-git-send-email-lmr@redhat.com>
On Mon, Sep 27, 2010 at 06:43:57PM -0400, Lucas Meneghel Rodrigues wrote:
> From: Amos Kong <akong@redhat.com>
>
> 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.
>
> Changes from v1:
> - Just flush the firewall rules with iptables -F
>
> Signed-off-by: Amos Kong <akong@redhat.com>
> ---
> client/tests/kvm/scripts/join_mcast.py | 37 +++++++++++++
> client/tests/kvm/tests/multicast.py | 91 ++++++++++++++++++++++++++++++++
> client/tests/kvm/tests_base.cfg.sample | 9 +++-
> 3 files changed, 136 insertions(+), 1 deletions(-)
> create mode 100755 client/tests/kvm/scripts/join_mcast.py
> create mode 100644 client/tests/kvm/tests/multicast.py
>
> diff --git a/client/tests/kvm/scripts/join_mcast.py b/client/tests/kvm/scripts/join_mcast.py
> new file mode 100755
> index 0000000..350cd5f
> --- /dev/null
> +++ b/client/tests/kvm/scripts/join_mcast.py
> @@ -0,0 +1,37 @@
> +#!/usr/bin/python
> +import socket, struct, os, signal, sys
> +# -*- coding: utf-8 -*-
> +
> +"""
> +Script used to join machine into multicast groups.
> +
> +@author Amos Kong <akong@redhat.com>
> +"""
> +
> +if __name__ == "__main__":
> + 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..d1674a6
> --- /dev/null
> +++ b/client/tests/kvm/tests/multicast.py
> @@ -0,0 +1,91 @@
> +import logging, os, re
> +from autotest_lib.client.common_lib import error
> +from autotest_lib.client.bin import utils
> +import kvm_test_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)))
> +
> + def run_guest(cmd):
> + s, o = session.get_command_status_output(cmd)
> + if s:
> + logging.warning('Command %s executed in guest returned exit code '
> + '%s, output: %s', cmd, s, o.strip())
> +
> + def run_host_guest(cmd):
> + run_guest(cmd)
> + utils.system(cmd, ignore_status=True)
> +
> + # flush the firewall rules
> + cmd_flush = "iptables -F"
> + cmd_selinux = ("if [ -e /selinux/enforce ]; then setenforce 0; "
> + "else echo 'no /selinux/enforce file present'; fi")
> + run_host_guest(cmd_flush)
> + run_host_guest(cmd_selinux)
> + # make sure guest replies to broadcasts
> + cmd_broadcast = "echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore"
Hello pradeep, thanks for your test, it's caused by this error
cmd_broadcast = "echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts"
> + cmd_broadcast_2 = "echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all"
> + run_guest(cmd_broadcast)
> + run_guest(cmd_broadcast_2)
> +
> + # 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")
> + if not vm.copy_files_to(mcast_path, "/tmp"):
> + raise error.TestError("Fail to copy %s to guest" % mcast_path)
> + 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.
> + try:
> + pid = re.findall("join_mcast_pid:(\d+)", output)[0]
> + except IndexError:
> + raise error.TestFail("Can't join multicast groups,output:%s" % output)
> +
> + 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_test_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_test_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_test_utils.ping(mcast, 10, interface=ifname, timeout=20)
> + if s != 0:
> + raise error.TestFail("Ping failed, status: %s, output: %s" %
> + (s, o))
> +
> + finally:
> + logging.debug(session.get_command_output("ipmaddr show"))
> + 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 83e10ad..f493cdb 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -493,6 +493,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}'
> @@ -1267,7 +1274,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%
> --
> 1.7.1
>
next prev parent reply other threads:[~2010-10-05 12:22 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-27 22:43 [PATCH 00/18] Network Patchset v4 Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 01/18] KVM test: Add a new macaddress pool algorithm Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 02/18] KVM test: Make physical_resources_check to work with MAC management Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 03/18] KVM test: Remove address_pools.cfg dependency Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 04/18] KVM test: Add a get_ifname function Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 05/18] KVM Test: Add nw related functions ping and get_linux_ifname Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 06/18] KVM test: Add a new subtest ping Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 07/18] KVM test: Add a subtest jumbo Lucas Meneghel Rodrigues
2010-09-29 6:42 ` pradeep
2010-09-29 11:07 ` Lucas Meneghel Rodrigues
2010-09-29 11:33 ` pradeep
2010-09-29 20:21 ` Lucas Meneghel Rodrigues
2010-09-30 7:05 ` pradeep
2010-09-27 22:43 ` [PATCH 08/18] KVM test: Add basic file transfer test Lucas Meneghel Rodrigues
2010-09-28 13:24 ` Michael S. Tsirkin
2010-09-29 11:45 ` pradeep
2010-09-29 12:33 ` Lucas Meneghel Rodrigues
2010-09-29 14:08 ` Lucas Meneghel Rodrigues
2010-09-29 17:43 ` Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 09/18] KVM test: Add a subtest of load/unload nic driver Lucas Meneghel Rodrigues
2010-10-06 5:49 ` Amos Kong
2010-09-27 22:43 ` [PATCH 10/18] KVM test: Add a subtest of nic promisc Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 11/18] KVM test: Add a subtest of multicast Lucas Meneghel Rodrigues
2010-09-30 9:30 ` pradeep
2010-10-05 12:21 ` Amos Kong [this message]
2010-10-05 12:44 ` Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 12/18] KVM test: Add a subtest of pxe Lucas Meneghel Rodrigues
2010-09-27 22:43 ` [PATCH 13/18] KVM test: Add a subtest of changing MAC address Lucas Meneghel Rodrigues
2010-09-30 8:21 ` pradeep
2010-09-27 22:44 ` [PATCH 14/18] KVM test: Add a netperf subtest Lucas Meneghel Rodrigues
2010-10-05 9:00 ` pradeep
2010-10-05 12:59 ` Amos Kong
2010-10-06 10:48 ` pradeep
2010-09-27 22:44 ` [PATCH 15/18] KVM test: kvm_utils - Add support of check if remote port free Lucas Meneghel Rodrigues
2010-09-27 22:44 ` [PATCH 16/18] KVM test: Improve vlan subtest Lucas Meneghel Rodrigues
2010-09-30 6:59 ` pradeep
2010-10-05 12:56 ` Amos Kong
2010-09-27 22:44 ` [PATCH 17/18] KVM test: vlan subtest - Replace extra_params '-snapshot' with image_snapshot Lucas Meneghel Rodrigues
2010-09-27 22:44 ` [PATCH 18/18] KVM test: Add subtest of testing offload by ethtool Lucas Meneghel Rodrigues
2010-10-06 8:56 ` pradeep
2010-10-06 9:59 ` [Autotest] " pradeep
2010-10-06 15:55 ` Ryan Harper
2010-10-06 16:57 ` Lucas Meneghel Rodrigues
2010-10-07 2:09 ` [PATCH 00/18] Network Patchset v4 Lucas Meneghel Rodrigues
2010-10-07 13:45 ` [Autotest] " pradeep
2010-10-07 13:54 ` Lucas Meneghel Rodrigues
2010-10-07 14:37 ` pradeep
2010-10-07 15:00 ` [Autotest] " Michael S. Tsirkin
2010-10-08 12:27 ` Lucas Meneghel Rodrigues
-- strict thread matches above, loose matches on Subject: below --
2010-09-14 22:25 [PATCH 00/18] KVM autotest network patchset v3 Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 11/18] KVM test: Add a subtest of multicast Lucas Meneghel Rodrigues
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101005122133.GA9404@z \
--to=akong@redhat.com \
--cc=autotest@test.kernel.org \
--cc=jasowang@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=lmr@redhat.com \
--cc=mgoldish@redhat.com \
--cc=mst@redhat.com \
--cc=psuriset@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.