mininet-sample/mininet_builder.py

75 lines
2.1 KiB
Python
Raw Permalink Normal View History

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.link import TCLink
2020-06-22 15:02:46 +00:00
from mininet.node import OVSBridge
from mininet.cli import CLI
from subprocess import Popen, PIPE
import logging
2020-06-24 09:26:56 +00:00
class MininetBuilder(Topo):
2020-06-23 11:20:07 +00:00
def __init__(self):
Topo.__init__( self )
self.net = None
def command_to(self, who, cmd):
"""
Launch command `cmd` to the specific name space of `who`
"""
2020-06-23 11:20:07 +00:00
return who.cmd(cmd)
def command_global(self, cmd):
"""
Launch command `cmd` over the global system, i.e., not specific to a name space
"""
2020-06-23 11:20:07 +00:00
p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
if stderr:
logging.error("Got error when running cmd: {}".format(cmd))
2020-06-23 11:20:07 +00:00
return "Error"
return stdout
def start_network(self):
"""
Start the network using Mininet
Note that the use of OVSBridge avoid facing issues with OVS controllers.
"""
2020-06-29 10:46:07 +00:00
self.net = Mininet(topo=self, link=TCLink, switch=OVSBridge, controller=None)
2020-06-23 11:20:07 +00:00
self.net.start()
def get_cli(self):
"""
Get the Mininet command line interface
"""
2020-06-23 11:20:07 +00:00
if self.net is None:
logging.error("Cannot get the CLI")
2020-06-23 11:20:07 +00:00
else:
CLI(self.net)
def get_host(self, who):
2020-06-23 11:20:07 +00:00
if self.net is None:
logging.error("Network not available...")
raise Exception("Network not ready")
2020-06-23 11:20:07 +00:00
else:
return self.net.getNodeByName(who)
2020-06-29 12:13:47 +00:00
def get_interface_names(self, who):
# NOTE: bs1.intfNames()[0] is lo...
2020-06-29 14:02:17 +00:00
return [i for i in who.intfNames() if i != "lo"]
2020-06-29 12:13:47 +00:00
2020-06-29 10:46:07 +00:00
def add_host(self, host):
return self.addHost(host)
def add_switch(self, switch):
return self.addSwitch(switch)
def add_link(self, from_a, to_b, **kwargs):
return self.addLink(from_a, to_b, **kwargs)
def stop_network(self):
2020-06-23 11:20:07 +00:00
if self.net is None:
logging.warning("Unable to stop the network: net is None")
2020-06-23 11:20:07 +00:00
else:
self.net.stop()