52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
"""
|
|
Node Library for Mininet
|
|
|
|
This contains additional Node types which you may find to be useful
|
|
"""
|
|
|
|
from mininet.net import Mininet
|
|
from mininet.topo import Topo
|
|
from mininet.node import Switch
|
|
from mininet.log import setLogLevel, info
|
|
|
|
|
|
class LinuxBridge( Switch ):
|
|
"Linux Bridge (with optional spanning tree)"
|
|
|
|
nextPrio = 100 # next bridge priority for spanning tree
|
|
|
|
def __init__( self, name, stp=False, prio=None, **kwargs ):
|
|
"""stp: use spanning tree protocol? (default False)
|
|
prio: optional explicit bridge priority for STP"""
|
|
self.stp = stp
|
|
if prio:
|
|
self.prio = prio
|
|
else:
|
|
self.prio = LinuxBridge.nextPrio
|
|
LinuxBridge.nextPrio += 1
|
|
Switch.__init__( self, name, **kwargs )
|
|
|
|
def connected( self ):
|
|
"Are we forwarding yet?"
|
|
if self.stp:
|
|
return 'forwarding' in self.cmd( 'brctl showstp', self )
|
|
else:
|
|
return True
|
|
|
|
def start( self, controllers ):
|
|
self.cmd( 'ifconfig', self, 'down' )
|
|
self.cmd( 'brctl delbr', self )
|
|
self.cmd( 'brctl addbr', self )
|
|
if self.stp:
|
|
self.cmd( 'brctl setbridgeprio', self.prio )
|
|
self.cmd( 'brctl stp', self, 'on' )
|
|
for i in self.intfList():
|
|
if self.name in i.name:
|
|
self.cmd( 'brctl addif', self, i )
|
|
self.cmd( 'ifconfig', self, 'up' )
|
|
|
|
def stop( self ):
|
|
self.cmd( 'ifconfig', self, 'down' )
|
|
self.cmd( 'brctl delbr', self )
|
|
|