blob: 43f10add9d86ed9c7e0f0542f9593618be8c85c3 [file] [log] [blame]
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +00001#! /usr/bin/env python
2import sys
3import time
4import os
Masayoshi Kobayashif9ccc382013-04-07 04:06:41 +00005import re
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +00006
7hosts=['onosdevz1', 'onosdevz2', 'onosdevz3', 'onosdevz4', 'onosdevz5', 'onosdevz6', 'onosdevz7', 'onosdevz8']
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +00008ping_cnt=3
Masayoshi Kobayashif9ccc382013-04-07 04:06:41 +00009wait1=ping_cnt
10wait2=10
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +000011
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +000012
Masayoshi Kobayashif9ccc382013-04-07 04:06:41 +000013def do_pingall():
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +000014
Masayoshi Kobayashif9ccc382013-04-07 04:06:41 +000015 pid=os.getpid()
16 os.popen("rm -f /tmp/ping.*")
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +000017
Masayoshi Kobayashif9ccc382013-04-07 04:06:41 +000018 filename = sys.argv[1]
19 f = open(filename, 'r')
20 nr_ping = 0
21 for line in f:
22 if line[0] != "#":
23# logfile="/tmp/ping.pid%d.%d" % (pid, fid)
24 fid=int(line.strip().split()[0])
25 logfile="/tmp/ping.%d" % (fid)
26 src_dpid=line.strip().split()[2]
27 dst_dpid=line.strip().split()[4]
28 src_nwid=int(src_dpid.split(':')[-2], 16)
29 dst_nwid=int(dst_dpid.split(':')[-2], 16)
30 src_hostid=int(src_dpid.split(':')[-1], 16)
31 dst_hostid=int(dst_dpid.split(':')[-1], 16)
32 cmd="echo \"Pingall flow %d : 192.168.%d.%d -> 192.168.%d.%d\" > %s" % (fid, src_nwid, src_hostid, dst_nwid, dst_hostid,logfile)
33 os.popen(cmd)
34 cmd="ssh %s \'${HOME}/ONOS/test-network/mininet/mrun host%d \'ping -c %d -W 1 192.168.%d.%d\'\' >> %s 2>&1 &" % (hosts[src_nwid-1], src_hostid, ping_cnt, dst_nwid, dst_hostid,logfile)
35 # print cmd
36 result = os.popen(cmd).read()
37 time.sleep(0.2)
38 nr_ping = nr_ping + 1
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +000039
Masayoshi Kobayashif9ccc382013-04-07 04:06:41 +000040 f.close()
41 return nr_ping
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +000042
Masayoshi Kobayashif9ccc382013-04-07 04:06:41 +000043def wait_ping_finish(nr_ping):
44 print "all pings started.. waiting for completion (%d sec)" % (wait1)
45 time.sleep(wait1)
46 cmd="cat /tmp/ping.* | grep \"packet loss\" |wc -l"
47 for i in range(wait2):
48 nr_done = int(os.popen(cmd).read())
49 if nr_done == nr_ping:
50 break
51 print "%d ping finished" % nr_done
52 time.sleep(1)
53
54 return nr_done
Masayoshi Kobayashif04afb32013-04-06 06:49:03 +000055
Masayoshi Kobayashif9ccc382013-04-07 04:06:41 +000056def report(nr_ping, nr_done):
57 cmd='cat /tmp/ping.* | grep " 0% packet loss" |wc -l'
58 nr_success = int(os.popen('cat /tmp/ping.* | grep " 0% packet loss" |wc -l').read())
59 nr_incomplete = nr_ping - nr_done
60 nr_fail = nr_done - nr_success
61
62 print "Pingall Result: success %d fail %d incomplete %d" % (nr_success, nr_fail, nr_incomplete)
63 if nr_fail > 0 or nr_incomplete > 0:
64 for i in range(nr_ping):
65 cmd="cat /tmp/ping.%d | head -n 1" % (i+1)
66 flow_desc = os.popen(cmd).read().strip()
67
68 cmd="cat /tmp/ping.%d | grep \"packet loss\"" % (i+1)
69 result = os.popen(cmd).read().strip()
70
71 if not re.search(" 0% packet loss", result):
72 print "flow # %d %s : %s" % (i+1, flow_desc, result)
73
74if __name__ == "__main__":
75 nr_ping=do_pingall()
76 nr_done=wait_ping_finish(nr_ping)
77 report(nr_ping, nr_done)