Re: [PATCH 11/18] KVM test: Add a subtest of multicast

2010-10-05 Thread Amos Kong
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 

Re: [PATCH 11/18] KVM test: Add a subtest of multicast

2010-10-05 Thread Lucas Meneghel Rodrigues
On Tue, 2010-10-05 at 20:21 +0800, Amos Kong wrote:
 On Mon, Sep 27, 2010 at 06:43:57PM -0400, Lucas Meneghel Rodrigues wrote:
  From: Amos Kong ak...@redhat.com
  +# 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

^ Ouch, I am dumb :( Amos, I've just fixed it, will publish an updated
version of this patch, and remove it from the todo list. Thank you very
much!

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 11/18] KVM test: Add a subtest of multicast

2010-09-30 Thread pradeep
On Mon, 27 Sep 2010 18:43:57 -0400
Lucas Meneghel Rodrigues l...@redhat.com 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
 


After copying join_mcast.py to guest, autotest fails to run the below
command. 

05:22:56 DEBUG| Sending command: python /tmp/join_mcast.py 20 225.0.0 1
05:22:56 DEBUG| Command failed; status: 147, output:
join_mcast_pid:12727

[1]+  Stopped python /tmp/join_mcast.py 20 225.0.0 1


00:17:31 DEBUG| Sending command: kill -s SIGCONT 2005
00:17:31 ERROR| Test failed: TestFail:  Ping return non-zero value PING
225.0.0.1 (225.0.0.1) from 9.126.89.203 rtl8139_0_5900: 56(84) bytes of
data.


--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html