From: Amos Kong <akong@redhat.com>
To: lmr@redhat.com
Cc: autotest@test.kernel.org, qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: [RFC PATCH 09/14] KVM-test: Add a subtest of multicast
Date: Tue, 20 Jul 2010 09:36:07 +0800 [thread overview]
Message-ID: <20100720013607.2212.2033.stgit@z> (raw)
In-Reply-To: <20100720013414.2212.13476.stgit@z>
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 <akong@redhat.com>
---
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 <akong@redhat.com>
+
+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"
+ 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")
+ 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)
+ 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%
WARNING: multiple messages have this Message-ID (diff)
From: Amos Kong <akong@redhat.com>
To: lmr@redhat.com
Cc: autotest@test.kernel.org, qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: [Qemu-devel] [RFC PATCH 09/14] KVM-test: Add a subtest of multicast
Date: Tue, 20 Jul 2010 09:36:07 +0800 [thread overview]
Message-ID: <20100720013607.2212.2033.stgit@z> (raw)
In-Reply-To: <20100720013414.2212.13476.stgit@z>
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 <akong@redhat.com>
---
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 <akong@redhat.com>
+
+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"
+ 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")
+ 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)
+ 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%
next prev parent reply other threads:[~2010-07-20 1:36 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-20 1:34 [RFC PATCH 00/14] Patchset of network related subtests Amos Kong
2010-07-20 1:34 ` [Qemu-devel] [Autotest][RFC " Amos Kong
2010-07-20 1:34 ` [RFC PATCH 01/14] KVM-test: Add a new macaddress pool algorithm Amos Kong
2010-07-20 1:34 ` [Qemu-devel] " Amos Kong
2010-07-20 10:19 ` Michael Goldish
2010-07-20 10:19 ` Michael Goldish
2010-07-20 13:44 ` Amos Kong
2010-07-20 15:53 ` Michael Goldish
2010-07-20 15:53 ` Michael Goldish
2010-08-03 1:34 ` Amos Kong
2010-07-27 1:48 ` Lucas Meneghel Rodrigues
2010-07-27 1:48 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-07-20 1:35 ` [RFC PATCH 02/14] KVM Test: Add a function get_interface_name() to kvm_net_utils.py Amos Kong
2010-07-20 1:35 ` [Qemu-devel] " Amos Kong
2010-07-27 2:08 ` Lucas Meneghel Rodrigues
2010-07-27 2:08 ` Lucas Meneghel Rodrigues
2010-07-28 10:29 ` Michael Goldish
2010-07-28 10:29 ` Michael Goldish
2010-08-03 1:39 ` Amos Kong
2010-07-20 1:35 ` [RFC PATCH 03/14] KVM Test: Add a common ping module for network related tests Amos Kong
2010-07-20 1:35 ` [Qemu-devel] " Amos Kong
2010-07-27 13:01 ` Lucas Meneghel Rodrigues
2010-07-28 11:50 ` Michael Goldish
2010-07-28 13:56 ` Michael Goldish
2010-07-28 13:56 ` Michael Goldish
2010-07-20 1:35 ` [RFC PATCH 04/14] KVM-test: Add a new subtest ping Amos Kong
2010-07-20 1:35 ` [Qemu-devel] " Amos Kong
2010-07-27 13:15 ` Lucas Meneghel Rodrigues
2010-07-27 13:15 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-08-03 1:54 ` Amos Kong
2010-08-03 1:54 ` [Qemu-devel] " Amos Kong
2010-07-20 1:35 ` [RFC PATCH 05/14] KVM-test: Add a subtest jumbo Amos Kong
2010-07-20 1:35 ` [Qemu-devel] " Amos Kong
2010-07-27 14:13 ` Lucas Meneghel Rodrigues
2010-07-27 14:13 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-08-10 7:18 ` Amos Kong
2010-08-10 7:18 ` [Qemu-devel] Re: [Autotest] " Amos Kong
2010-07-20 1:35 ` [RFC PATCH 06/14] KVM-test: Add basic file transfer test Amos Kong
2010-07-20 1:35 ` [Qemu-devel] " Amos Kong
2010-07-27 14:36 ` Lucas Meneghel Rodrigues
2010-08-10 9:29 ` [Autotest] " Amos Kong
2010-08-10 9:29 ` Amos Kong
2010-07-20 1:35 ` [RFC PATCH 07/14] KVM-test: Add a subtest of load/unload nic driver Amos Kong
2010-07-20 1:35 ` [Qemu-devel] " Amos Kong
2010-07-28 18:12 ` Lucas Meneghel Rodrigues
2010-07-20 1:35 ` [RFC PATCH 08/14] KVM-test: Add a subtest of nic promisc Amos Kong
2010-07-20 1:35 ` [Qemu-devel] " Amos Kong
2010-07-28 21:35 ` Lucas Meneghel Rodrigues
2010-07-28 21:35 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-08-11 1:34 ` [Autotest] " Amos Kong
2010-08-11 1:34 ` [Qemu-devel] " Amos Kong
2010-07-20 1:36 ` Amos Kong [this message]
2010-07-20 1:36 ` [Qemu-devel] [RFC PATCH 09/14] KVM-test: Add a subtest of multicast Amos Kong
2010-07-28 21:55 ` Lucas Meneghel Rodrigues
2010-07-20 1:36 ` [RFC PATCH 10/14] KVM-test: Add a subtest of pxe Amos Kong
2010-07-20 1:36 ` [Qemu-devel] " Amos Kong
2010-07-28 22:07 ` Lucas Meneghel Rodrigues
2010-08-10 6:11 ` Amos Kong
2010-07-20 1:36 ` [RFC PATCH 11/14] KVM-test: Add a subtest of changing mac address Amos Kong
2010-07-20 1:36 ` [Qemu-devel] " Amos Kong
2010-07-28 22:30 ` Lucas Meneghel Rodrigues
2010-07-20 1:36 ` [RFC PATCH 12/14] KVM-test: Add a subtest of netperf Amos Kong
2010-07-20 1:36 ` [Qemu-devel] " Amos Kong
2010-07-30 16:32 ` Lucas Meneghel Rodrigues
2010-07-20 1:36 ` [RFC PATCH 13/14] KVM-test: Improve vlan subtest Amos Kong
2010-07-20 1:36 ` [Qemu-devel] " Amos Kong
2010-07-20 1:36 ` [RFC PATCH 14/14] KVM-test: Add subtest of testing offload by ethtool Amos Kong
2010-07-20 1:36 ` [Qemu-devel] " Amos Kong
2010-08-02 19:10 ` Lucas Meneghel Rodrigues
2010-08-02 19:10 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-08-10 7:07 ` Amos Kong
2010-08-10 7:07 ` [Qemu-devel] Re: [Autotest] " Amos Kong
2010-07-20 12:12 ` [RFC PATCH 00/14] Patchset of network related subtests Lucas Meneghel Rodrigues
2010-07-20 12:12 ` [Qemu-devel] Re: [Autotest][RFC " Lucas Meneghel Rodrigues
2010-08-02 20:58 ` [RFC " Lucas Meneghel Rodrigues
2010-08-02 20:58 ` [Qemu-devel] Re: [Autotest][RFC " 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=20100720013607.2212.2033.stgit@z \
--to=akong@redhat.com \
--cc=autotest@test.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=lmr@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.