ee15ce2243
Although we could use print() from __future__, this messes up scripts which use examples as modules. The simple, if not nicest for 2.7, solution is to use info(), output() and other mininet.log functions. The disadvantage is that we may have to adjust things if we change info() to add automatic newlines, but we can burn that bridge in Mininet 3.x.
37 lines
1010 B
Python
Executable File
37 lines
1010 B
Python
Executable File
#!/usr/bin/python
|
|
|
|
"Monitor multiple hosts using popen()/pmonitor()"
|
|
|
|
from mininet.net import Mininet
|
|
from mininet.topo import SingleSwitchTopo
|
|
from mininet.util import pmonitor
|
|
from mininet.log import setLogLevel, info
|
|
|
|
from time import time
|
|
from signal import SIGINT
|
|
|
|
def pmonitorTest( N=3, seconds=10 ):
|
|
"Run pings and monitor multiple hosts using pmonitor"
|
|
topo = SingleSwitchTopo( N )
|
|
net = Mininet( topo )
|
|
net.start()
|
|
hosts = net.hosts
|
|
info( "Starting test...\n" )
|
|
server = hosts[ 0 ]
|
|
popens = {}
|
|
for h in hosts:
|
|
popens[ h ] = h.popen('ping', server.IP() )
|
|
info( "Monitoring output for", seconds, "seconds\n" )
|
|
endTime = time() + seconds
|
|
for h, line in pmonitor( popens, timeoutms=500 ):
|
|
if h:
|
|
info( '<%s>: %s' % ( h.name, line ) )
|
|
if time() >= endTime:
|
|
for p in popens.values():
|
|
p.send_signal( SIGINT )
|
|
net.stop()
|
|
|
|
if __name__ == '__main__':
|
|
setLogLevel( 'info' )
|
|
pmonitorTest()
|