On Mon, Sep 27, 2010 at 06:43:57PM -0400, Lucas Meneghel Rodrigues wrote:
From: Amos Kong ak...@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 ak...@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 000..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 ak...@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 000..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