def mininet(self, topo, start=True): def cleanup(): # Clean up leftovers from previous tests bigtest.sudo( "killall ofdatapath 2>/dev/null; killall ofprotocol" " 2>/dev/null; true", trace=False) cleanup() atexit.register(cleanup) # Disable IPv6 to avoid discovery chatter and work around Java bug 7075227 bigtest.sudo("sysctl -q -w net.ipv6.conf.all.disable_ipv6=1", trace=False) def remoteController(name): return mininet.node.RemoteController(name, defaultIP=self.ipAddress()) net = mininet.net.Mininet(topo=topo, switch=mininet.node.UserSwitch, controller=remoteController) if start: net.start() self.waitForNet(net) return net
def powerOn(self): user = pwd.getpwuid(os.getuid())[0] tf, tfn = tempfile.mkstemp() os.fchmod(tf, 0755) os.write(tf, "#!/bin/sh\nifconfig $1 up\n") os.write(tf, "brctl addif %s $1\n" % self.controlBridge()) os.close(tf) try: bigtest.sudo( ["kvm", "-runas", user, "-daemonize", "-nographic", "-pidfile", os.path.join(self.statedir_, "pid"), "-vnc", ":%d" % (self.vncPort()-5900), "-qmp", "unix:%s,server,nowait" % os.path.join(self.statedir_, "monitor"), "-serial", "unix:%s,server,nowait" % os.path.join(self.statedir_, "console"), "-net", "tap,ifname=%s,script=%s,downscript=no" % (self.name(), tfn)] + list(self.vmArgs())) finally: for fn in ["pid", "monitor", "console"]: p = os.path.join(self.statedir_, fn) if os.path.exists(p): bigtest.sudo(["chown", user, p]) os.unlink(tfn)
def stop(self): bigtest.tryToStopProcess(bigtest.readPidFile(os.path.join(self.statedir_, "pid"))) bridges, intfBridges = bigtest.bridgeInfo() config = self.config() sw = 0 for vlans in config.get("switch_intf_vlans"): intf = 0 for v in vlans: bridge = intfBridges.get("%s.%s" % (self.name_, v)) if os.path.exists("/sys/class/net/%s" % bridge): bigtest.sudo(["ifconfig", bridge, "down"]) bigtest.sudo(["brctl", "delbr", bridge]) intf += 1 sw += 1 bigtest.run(["rm", "-rf", self.statedir_])
def stop(self): bigtest.tryToStopProcess( bigtest.readPidFile(os.path.join(self.statedir_, "pid"))) bridges, intfBridges = bigtest.bridgeInfo() config = self.config() sw = 0 for vlans in config.get("switch_intf_vlans"): intf = 0 for v in vlans: bridge = intfBridges.get("%s.%s" % (self.name_, v)) if os.path.exists("/sys/class/net/%s" % bridge): bigtest.sudo(["ifconfig", bridge, "down"]) bigtest.sudo(["brctl", "delbr", bridge]) intf += 1 sw += 1 bigtest.run(["rm", "-rf", self.statedir_])
def mininet(self, topo, start=True): def cleanup(): # Clean up leftovers from previous tests bigtest.sudo("killall ofdatapath 2>/dev/null; killall ofprotocol" " 2>/dev/null; true", trace=False) cleanup() atexit.register(cleanup) # Disable IPv6 to avoid discovery chatter and work around Java bug 7075227 bigtest.sudo("sysctl -q -w net.ipv6.conf.all.disable_ipv6=1", trace=False) def remoteController(name): return mininet.node.RemoteController(name, defaultIP=self.ipAddress()) net = mininet.net.Mininet(topo=topo, switch=mininet.node.UserSwitch, controller=remoteController) if start: net.start() self.waitForNet(net) return net
def start(self, consoleCommand, ipAddress): Node.start(self) self.setConsoleCommand(consoleCommand) if ipAddress: self.setIpAddress(ipAddress) bigtest.sudo("ip link del %s 2>/dev/null || :" % self.name_) bigtest.sudo(["ip", "link", "add", "name", "%s" % self.name_, "type", "veth", "peer", "name", "%s-s" % self.name_]) bigtest.sudo(["ifconfig", "%s" % self.name_, "up"]) bigtest.sudo(["ifconfig", "%s-s" % self.name_, ipAddress, "netmask", "255.255.255.0", "up"]) else: self.setIpAddress("127.0.0.1")
def stop(self): if self.ipAddress() != "127.0.0.1": bigtest.sudo("ip link del %s 2>/dev/null || :" % self.name_) Node.stop(self)
def start(self, controlBridge): bigtest.run(["rm", "-rf", self.statedir_]) bigtest.run(["mkdir", "-p", self.statedir_]) file(os.path.join(self.statedir_, "class"), "w").write( "%s.%s\n" % (self.__class__.__module__, self.__class__.__name__)) config = self.config() x = config.get("host") if ":" in x: host, port = x.split(":") else: host, port = x, "5094" user = pwd.getpwuid(os.getuid())[0] try: bigtest.sudo(["openvpn", "--daemon", "--user", user, "--writepid", os.path.join(self.statedir_, "pid"), "--log", os.path.join(self.statedir_, "log"), "--dev", self.name_, "--dev-type", "tap", "--auth", "none", "--cipher", "none", "--ping", "10", "--ping-restart", "60", "--nobind", "--remote", host, port]) for fn in ["log", "pid"]: bigtest.sudo(["chown", user, os.path.join(self.statedir_, fn)]) bigtest.sudo(["ifconfig", self.name_, "up"]) controlVlan = str(config.get("control_vlan")) bigtest.sudo(["vconfig", "add", self.name_, controlVlan]) bigtest.sudo(["ifconfig", "%s.%s" % (self.name_, controlVlan), "up"]) bigtest.sudo(["brctl", "addif", controlBridge, "%s.%s" % (self.name_, controlVlan)]) sw = 0 for vlans in config.get("switch_intf_vlans"): intf = 0 for v in vlans: vlan = "%s" % v bridge = "%s-s%d-p%dbr" % (self.name_, sw, intf) bigtest.sudo(["vconfig", "add", self.name_, vlan]) bigtest.sudo(["ifconfig", "%s.%s" % (self.name_, vlan), "up"]) if os.path.exists("/sys/class/net/%s" % bridge): bigtest.sudo(["ifconfig", bridge, "down"]) bigtest.sudo(["brctl", "delbr", bridge]) bigtest.sudo(["brctl", "addbr", bridge]) bigtest.sudo(["ifconfig", bridge, "up"]) bigtest.sudo(["brctl", "addif", bridge, "%s.%s" % (self.name_, vlan)]) intf += 1 sw += 1 for i in reversed(range(10)): try: bigtest.run(["ping", "-c", "2", config.get("control_ipaddr")]) break except bigtest.CalledProcessError: if i < 1: raise Exception("Failed to communicate with %s control address" % self.name_) except: bigtest.sudo(["cat", os.path.join(self.statedir_, "log")]) raise
def cleanup(): # Clean up leftovers from previous tests bigtest.sudo("killall ofdatapath 2>/dev/null; killall ofprotocol" " 2>/dev/null; true", trace=False)
def start(self, controlBridge): bigtest.run(["rm", "-rf", self.statedir_]) bigtest.run(["mkdir", "-p", self.statedir_]) file(os.path.join(self.statedir_, "class"), "w").write( "%s.%s\n" % (self.__class__.__module__, self.__class__.__name__)) config = self.config() x = config.get("host") if ":" in x: host, port = x.split(":") else: host, port = x, "5094" user = pwd.getpwuid(os.getuid())[0] try: bigtest.sudo([ "openvpn", "--daemon", "--user", user, "--writepid", os.path.join(self.statedir_, "pid"), "--log", os.path.join(self.statedir_, "log"), "--dev", self.name_, "--dev-type", "tap", "--auth", "none", "--cipher", "none", "--ping", "10", "--ping-restart", "60", "--nobind", "--remote", host, port ]) for fn in ["log", "pid"]: bigtest.sudo(["chown", user, os.path.join(self.statedir_, fn)]) bigtest.sudo(["ifconfig", self.name_, "up"]) controlVlan = str(config.get("control_vlan")) bigtest.sudo(["vconfig", "add", self.name_, controlVlan]) bigtest.sudo( ["ifconfig", "%s.%s" % (self.name_, controlVlan), "up"]) bigtest.sudo([ "brctl", "addif", controlBridge, "%s.%s" % (self.name_, controlVlan) ]) sw = 0 for vlans in config.get("switch_intf_vlans"): intf = 0 for v in vlans: vlan = "%s" % v bridge = "%s-s%d-p%dbr" % (self.name_, sw, intf) bigtest.sudo(["vconfig", "add", self.name_, vlan]) bigtest.sudo( ["ifconfig", "%s.%s" % (self.name_, vlan), "up"]) if os.path.exists("/sys/class/net/%s" % bridge): bigtest.sudo(["ifconfig", bridge, "down"]) bigtest.sudo(["brctl", "delbr", bridge]) bigtest.sudo(["brctl", "addbr", bridge]) bigtest.sudo(["ifconfig", bridge, "up"]) bigtest.sudo([ "brctl", "addif", bridge, "%s.%s" % (self.name_, vlan) ]) intf += 1 sw += 1 for i in reversed(range(10)): try: bigtest.run( ["ping", "-c", "2", config.get("control_ipaddr")]) break except bigtest.CalledProcessError: if i < 1: raise Exception( "Failed to communicate with %s control address" % self.name_) except: bigtest.sudo(["cat", os.path.join(self.statedir_, "log")]) raise
def cleanup(): # Clean up leftovers from previous tests bigtest.sudo( "killall ofdatapath 2>/dev/null; killall ofprotocol" " 2>/dev/null; true", trace=False)