diff --git a/cluster-mgmt/bin/cho-failover.py b/cluster-mgmt/bin/cho-failover.py
new file mode 100755
index 0000000..ad34389
--- /dev/null
+++ b/cluster-mgmt/bin/cho-failover.py
@@ -0,0 +1,127 @@
+#! /usr/bin/env python
+import json
+import sys
+import os
+import re
+from check_status import *
+import time
+
+flowdef="flowdef_8node_252.txt"
+basename="onosdevz"
+operation=["sw3-eth4 down","sw4-eth4 down","sw4-eth3 down","sw3-eth4 up","sw1-eth2 down","sw4-eth4 up","sw4-eth3 up","sw1-eth2 up"]
+
+def check_by_pingall():
+  buf = ""
+  cmd = "dsh -w %s1 \"cd ONOS/web; ./pingallm.py %s\"" % (basename, flowdef)
+  result = os.popen(cmd).read()
+  buf += result
+  
+  if re.search("fail 0", result):
+    return (0, buf)
+  else:
+    return (1, buf)
+
+def link_change_core(op):
+  cmd = "dsh -w %s1 \"sudo ifconfig %s\"" % (basename, op)
+  os.popen(cmd)
+  print cmd
+
+
+def check_flow_nmap():
+  buf = "" 
+  buf += os.popen("date").read()
+  print "dump all flows from network map"
+  cmd  = "dsh -w %s1 \"cd ONOS/web; ./get_flow.py all\"" % cluster_basename
+  buf += os.popen(cmd).read()
+  return (0, buf)
+
+def check_flow_raw():
+  buf = "" 
+  print "dump all flows from switches"
+  cmd  = "dsh \"cd ONOS/scripts; ./showflow.sh\""
+  buf += os.popen(cmd).read()
+  return (0, buf)
+
+def dump_json(url, filename):
+  f = open(filename, 'w')
+  buf = "" 
+  command = "curl -s %s" % (url)
+  result = os.popen(command).read()
+  buf += json.dumps(json.loads(result), sort_keys = True, indent = 2)
+  f.write(buf)
+  f.close()
+
+def check_rest(cycle, n):
+  url="http://%s:%s/wm/core/topology/switches/all/json" % (RestIP, RestPort)
+  filename  = "rest-sw-log.%d.%d.log" % (cycle, n)
+  dump_json(url, filename)
+
+  filename  = "rest-link-log.%d.%d.log" % (cycle, n)
+  url = "http://%s:%s/wm/core/topology/links/json" % (RestIP, RestPort)
+  dump_json(url, filename)
+
+  url = "http://%s:%s/wm/registry/switches/json" % (RestIP, RestPort)
+  filename  = "rest-reg-sw-log.%d.%d.log" % (cycle, n)
+  dump_json(url, filename)
+
+  url = "http://%s:%s/wm/registry/controllers/json" % (RestIP, RestPort)
+  filename  = "rest-reg-ctrl-log.%d.%d.log" % (cycle, n)
+  dump_json(url, filename)
+
+  url = "http://%s:%s/wm/flow/getsummary/0/0/json" % (RestIP, RestPort)
+  filename  = "rest-flow-log.%d.%d.log" % (cycle, n)
+  dump_json(url, filename)
+
+
+def log(cycle, n, nr_ctrl):
+  error = "error-log.%d.%d.log" % (cycle, n)
+  nmapflow  = "nmap-flow-log.%d.%d.log" % (cycle, n)
+  rawflow  = "raw-flow-log.%d.%d.log" % (cycle, n)
+
+  f = open(error, 'w')
+  f.write(result)
+  f.write(check_switch()[1])
+  f.write(check_link()[1])
+  f.write(check_switch_all(nr_ctrl)[1])
+  f.write(check_controllers(nr_ctrl)[1])
+  f.close()
+
+  f = open(nmapflow,'w')
+  f.write(check_flow_nmap()[1])
+  f.close()
+
+  f = open(rawflow,'w')
+  f.write(check_flow_raw()[1])
+  f.close()
+  check_rest(cycle,n)
+
+
+opration=['switch all', 'onos stop 8', 'onos stop 7', 'onos stop 6', 'onos stop 5', 'onos start 5;onos start 6;onos start 7;onos start 8', 'switch local']  
+nr_controllers=[8, 7, 6, 5, 4, 8, 8]
+
+if __name__ == "__main__":
+  print "%s" % check_switch()[1]
+  print "%s" % check_link()[1]
+  print "%s" % check_controllers(8)[1]
+  (code, result) = check_by_pingall()
+  print result
+  k = raw_input('hit any key>')
+
+  for cycle in range(1000):
+    for n, op in enumerate(operation):
+      print "==== Cycle %d operation %d ====" % (cycle, n)
+      print op 
+      os.popen(op)
+      print "wait 30 sec"
+      time.sleep(30)
+
+      print "check by pingall"
+      (code, result) = check_by_pingall()
+      if code == 0:
+        print "ping success %s" % (result)
+      else:
+        print "pingall failed (%d, %d). Collecting logs" % (cycle, n)
+        log(cycle, n, nr_controllers[n]) 
+
+
+
