Пример #1
0
    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
Пример #2
0
 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)
Пример #3
0
 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_])
Пример #4
0
 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_])
Пример #5
0
 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
Пример #6
0
 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")
Пример #7
0
 def stop(self):
     if self.ipAddress() != "127.0.0.1":
         bigtest.sudo("ip link del %s 2>/dev/null || :" % self.name_)
     Node.stop(self)
Пример #8
0
 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
Пример #9
0
 def cleanup():
     # Clean up leftovers from previous tests
     bigtest.sudo("killall ofdatapath 2>/dev/null; killall ofprotocol"
                  " 2>/dev/null; true", trace=False)
Пример #10
0
 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
Пример #11
0
 def cleanup():
     # Clean up leftovers from previous tests
     bigtest.sudo(
         "killall ofdatapath 2>/dev/null; killall ofprotocol"
         " 2>/dev/null; true",
         trace=False)