First commit
diff --git a/examples/multiping.py b/examples/multiping.py
new file mode 100644
index 0000000..3bd231c
--- /dev/null
+++ b/examples/multiping.py
@@ -0,0 +1,86 @@
+#!/usr/bin/python
+
+"""
+multiping.py: monitor multiple sets of hosts using ping
+
+This demonstrates how one may send a simple shell script to
+multiple hosts and monitor their output interactively for a period=
+of time.
+"""
+
+from mininet.net import Mininet
+from mininet.node import Node
+from mininet.topo import SingleSwitchTopo
+from mininet.log import setLogLevel
+
+from select import poll, POLLIN
+from time import time
+
+def chunks( l, n ):
+ "Divide list l into chunks of size n - thanks Stackoverflow"
+ return [ l[ i: i + n ] for i in range( 0, len( l ), n ) ]
+
+def startpings( host, targetips ):
+ "Tell host to repeatedly ping targets"
+
+ targetips.append( '10.0.0.200' )
+
+ targetips = ' '.join( targetips )
+
+ # BL: Not sure why loopback intf isn't up!
+ host.cmd( 'ifconfig lo up' )
+
+ # Simple ping loop
+ cmd = ( 'while true; do '
+ ' for ip in %s; do ' % targetips +
+ ' echo -n %s "->" $ip ' % host.IP() +
+ ' `ping -c1 -w 1 $ip | grep packets` ;'
+ ' sleep 1;'
+ ' done; '
+ 'done &' )
+
+ print ( '*** Host %s (%s) will be pinging ips: %s' %
+ ( host.name, host.IP(), targetips ) )
+
+ host.cmd( cmd )
+
+def multiping( netsize, chunksize, seconds):
+ "Ping subsets of size chunksize in net of size netsize"
+
+ # Create network and identify subnets
+ topo = SingleSwitchTopo( netsize )
+ net = Mininet( topo=topo )
+ net.start()
+ hosts = net.hosts
+ subnets = chunks( hosts, chunksize )
+
+ # Create polling object
+ fds = [ host.stdout.fileno() for host in hosts ]
+ poller = poll()
+ for fd in fds:
+ poller.register( fd, POLLIN )
+
+ # Start pings
+ for subnet in subnets:
+ ips = [ host.IP() for host in subnet ]
+ for host in subnet:
+ startpings( host, ips )
+
+ # Monitor output
+ endTime = time() + seconds
+ while time() < endTime:
+ readable = poller.poll(1000)
+ for fd, _mask in readable:
+ node = Node.outToNode[ fd ]
+ print '%s:' % node.name, node.monitor().strip()
+
+ # Stop pings
+ for host in hosts:
+ host.cmd( 'kill %while' )
+
+ net.stop()
+
+
+if __name__ == '__main__':
+ setLogLevel( 'info' )
+ multiping( netsize=20, chunksize=4, seconds=10 )