@@ -25,8 +25,9 @@ from mininet.cli import CLI
|
|||||||
from mininet.log import lg, LEVELS, info, debug, error
|
from mininet.log import lg, LEVELS, info, debug, error
|
||||||
from mininet.net import Mininet, MininetWithControlNet, VERSION
|
from mininet.net import Mininet, MininetWithControlNet, VERSION
|
||||||
from mininet.node import ( Host, CPULimitedHost, Controller, OVSController,
|
from mininet.node import ( Host, CPULimitedHost, Controller, OVSController,
|
||||||
NOX, RemoteController, UserSwitch, OVSKernelSwitch,
|
NOX, RemoteController, UserSwitch, OVSSwitch,
|
||||||
OVSLegacyKernelSwitch, IVSSwitch )
|
OVSLegacyKernelSwitch, IVSSwitch )
|
||||||
|
from mininet.nodelib import LinuxBridge
|
||||||
from mininet.link import Link, TCLink
|
from mininet.link import Link, TCLink
|
||||||
from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo
|
from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo
|
||||||
from mininet.topolib import TreeTopo
|
from mininet.topolib import TreeTopo
|
||||||
@@ -44,9 +45,12 @@ TOPOS = { 'minimal': lambda: SingleSwitchTopo( k=2 ),
|
|||||||
|
|
||||||
SWITCHDEF = 'ovsk'
|
SWITCHDEF = 'ovsk'
|
||||||
SWITCHES = { 'user': UserSwitch,
|
SWITCHES = { 'user': UserSwitch,
|
||||||
'ovsk': OVSKernelSwitch,
|
'ovs': OVSSwitch,
|
||||||
|
# Keep ovsk for compatibility with 2.0
|
||||||
|
'ovsk': OVSSwitch,
|
||||||
'ovsl': OVSLegacyKernelSwitch,
|
'ovsl': OVSLegacyKernelSwitch,
|
||||||
'ivs': IVSSwitch }
|
'ivs': IVSSwitch,
|
||||||
|
'lxbr': LinuxBridge }
|
||||||
|
|
||||||
HOSTDEF = 'proc'
|
HOSTDEF = 'proc'
|
||||||
HOSTS = { 'proc': Host,
|
HOSTS = { 'proc': Host,
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
"""
|
||||||
|
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 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 )
|
||||||
|
|
||||||
Reference in New Issue
Block a user