+ def add_pl_testbed(self, exp_desc):
+ plchost = "nepiplc.pl.sophia.inria.fr"
+ port_base = 2000 + (os.getpid() % 1000) * 13
+ pl_ssh_key = os.environ.get(
+ "PL_SSH_KEY",
+ "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'],) )
+ pl_user, pl_pwd = test_util.pl_auth()
+
+ pl_provider = FactoriesProvider("planetlab")
+ pl_desc = exp_desc.add_testbed_description(pl_provider)
+ pl_desc.set_attribute_value("homeDirectory", self.root_dir)
+ pl_desc.set_attribute_value("slice", self.slicename)
+ pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key)
+ pl_desc.set_attribute_value("authUser", pl_user)
+ pl_desc.set_attribute_value("authPass", pl_pwd)
+ pl_desc.set_attribute_value("plcHost", plchost)
+ pl_desc.set_attribute_value("tapPortBase", port_base)
+ pl_desc.set_attribute_value("p2pDeployment", False) # it's interactive, we don't want it in tests
+ pl_desc.set_attribute_value("dedicatedSlice", True)
+ pl_desc.set_attribute_value("plLogLevel", "DEBUG")
+ return pl_desc
+
+ def add_pl_node(self, pl_desc, inet, label_prefix):
+ node = pl_desc.create("Node")
+ node.set_attribute_value("label", label_prefix)
+ iface = pl_desc.create("NodeInterface")
+ iface.set_attribute_value("label", label_prefix+"iface")
+ iface.connector("inet").connect(inet.connector("devs"))
+ node.connector("devs").connect(iface.connector("node"))
+ return node, iface
+
+ def add_ns3_in_pl(self, exp_desc, pl_desc, pl_node, pl_iface, root):
+ # Add NS3 support in node
+ plnepi = pl_desc.create("NepiDependency")
+ plns3 = pl_desc.create("NS3Dependency")
+ plnepi.connector("node").connect(pl_node.connector("deps"))
+ plns3.connector("node").connect(pl_node.connector("deps"))
+
+ # Create NS3 testbed running in pl_node
+ ns3_provider = FactoriesProvider("ns3")
+ ns3_desc = exp_desc.add_testbed_description(ns3_provider)
+ ns3_desc.set_attribute_value("rootDirectory", root)
+ ns3_desc.set_attribute_value("SimulatorImplementationType", "ns3::RealtimeSimulatorImpl")
+ ns3_desc.set_attribute_value("ChecksumEnabled", True)
+ ns3_desc.set_attribute_value(DC.DEPLOYMENT_HOST, "{#[%s].addr[0].[Address]#}" % (
+ pl_iface.get_attribute_value("label"),))
+ ns3_desc.set_attribute_value(DC.DEPLOYMENT_USER,
+ pl_desc.get_attribute_value("slice"))
+ ns3_desc.set_attribute_value(DC.DEPLOYMENT_KEY,
+ pl_desc.get_attribute_value("sliceSSHKey"))
+ ns3_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
+ ns3_desc.set_attribute_value(DC.DEPLOYMENT_COMMUNICATION, DC.ACCESS_SSH)
+ ns3_desc.set_attribute_value(DC.DEPLOYMENT_ENVIRONMENT_SETUP,
+ "{#[%s].[%s]#}" % (
+ pl_node.get_attribute_value("label"),
+ ATTR_NEPI_TESTBED_ENVIRONMENT_SETUP,))
+ ns3_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)
+ return ns3_desc
+
+ def add_netns_testbed(self, exp_desc):
+ netns_provider = FactoriesProvider("netns")
+ netns_desc = exp_desc.add_testbed_description(netns_provider)
+ netns_desc.set_attribute_value("homeDirectory", self.root_dir)
+ netns_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
+ netns_root_dir = os.path.join(self.root_dir, "netns")
+ os.mkdir(netns_root_dir)
+ netns_desc.set_attribute_value(DC.ROOT_DIRECTORY, netns_root_dir)
+ netns_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)
+ netns_desc.set_attribute_value(DC.USE_SUDO, True)
+ return netns_desc