def reloadInfo(self): # XXX: why need this? #iotlab, exp = getHelperAndExp(args) self.iotlab = IotlabHelper.IotlabHelper(self.iotlab.expServer) self.exp = self.iotlab._makeExp(self.exp.expId) #exp = iotlab._makeExp(args.exp_id) self.updateInfo()
def __init__(self, iotlab, exp, args): self.iotlab = iotlab self.exp = exp self.args = args self.view = None self.updateInfo() self.groupManager = IotlabHelper.GroupManager()
def getHelperAndExp(expid, server=None): iotlab = IotlabHelper.IotlabHelper(server) exp = iotlab._makeExp(expid) expInfo = exp.getPersistentInfo() if (server == None and "args" in expInfo and expInfo["args"].get("dev") != None): return getHelperAndExp(expid, expInfo["args"]["dev"]) else: return iotlab, exp
def __init__(self, iotlab, exp, control): self.iotlab = iotlab self.exp = exp forwardByType = IotlabHelper.fromJson( self.exp.readFile("ssh-forward-port.json")) self.nodeAndPortList = forwardByType.get("radio-test") self.nbNode = len(self.nodeAndPortList) self.nodeOfConnId = {} self.control = control
ExperimentName = "Contiki RPL with border router" #--------------------------------------------------------------------------- NodeFwFileName = "../iot-lab/parts/contiki/examples/ipv6/http-server/http-server.iotlab-m3" BorderRouterFwFileName = "../iot-lab/parts/contiki/examples/ipv6/rpl-border-router/border-router.iotlab-m3" #NodeFwFileName = "PreCompiled/http-server.iotlab-m3" #BorderRouterFwFileName = "PreCompiled/border-router.iotlab-m3" #--------------------------------------------------------------------------- parser = argparse.ArgumentParser( description = ExperimentName ) IotlabHelper.parserAddTypicalArgs(parser, "IoTLab_Exp_REST") args = parser.parse_args() iotlabHelper, exp = IotlabHelper.ensureExperimentFromArgs(args) exp.makeLastSymLink() # XXX: cannot run multiple simultaneous exp. with this #-------------------------------------------------- # Flash nodes #-------------------------------------------------- random.seed(0) # for random order of sniffers nodeList = exp.getNodeList() currentNodeList = nodeList[:] assert args.exp_type == "contiki"
def updateInfo(self): CacheNodeList = "cache-node-list.json" CacheResource = "cache-resource-server.json" # XXX: move if self.exp.hasFile(CacheNodeList): self.expNodeList = fromJson(self.exp.readFile(CacheNodeList)) else: self.expNodeList = self.exp.getNodeList() self.exp.writeFile(CacheNodeList, toJson(self.expNodeList)) self.expServer = IotlabHelper.getExpUniqueServer( self.exp, self.expNodeList) self.expServer = self.expServer.split(".")[0] if self.exp.hasFile(CacheResource): self.serverInfo = fromJson(self.exp.readFile(CacheResource)) else: self.serverInfo = self.iotlab.getResources(self.expServer) self.exp.writeFile(CacheResource, toJson(self.serverInfo)) siteInfo = self.serverInfo archi = "m3:at86rf231" nodePosList = [(extractNodeId(info["network_address"]), (float(info["x"]), float(info["y"]), float(info["z"]))) for info in siteInfo if info["archi"] == archi and info["state"] in ("Alive", "Busy")] if DisplayHack: nodePosList = [(extractNodeId(info["network_address"]), (-float(info["y"]), float(info["x"]), float(info["z"]))) for info in siteInfo if info["archi"] == archi and info["state"] in ("Alive", "Busy")] expInfo = self.exp.getPersistentInfo() nodeInfoByType = expInfo["nodeInfoByType"] #print nodeInfoByType.get("contiki-rpl-node") self.posOfNode = dict(nodePosList) nodeOfType = {} rplNodes = set() for typeName, info in nodeInfoByType.iteritems(): nodeOfType[typeName] = [ extractNodeId(node) for node in info["nodes"] ] if typeName in ["border-router", "contiki-rpl-node"]: rplNodes = rplNodes.union(set(nodeOfType[typeName])) #print posOfNode xPosList = [x for x,y,z in self.posOfNode.itervalues()] yPosList = [y for x,y,z in self.posOfNode.itervalues()] self.xPosMin, self.xPosMax = min(xPosList), max(xPosList) self.yPosMin, self.yPosMax = min(yPosList), max(yPosList) self.nodeOfType = nodeOfType #print xPosMin, xPosMax, yPosMin, yPosMax self.nodeInfo = {} layoutInfoList = [] nodeInfoFileName = "grenoble-node.txt" if os.path.exists(nodeInfoFileName): #XXX!! big hack f = open(nodeInfoFileName) for line in f.readlines(): line = line.strip() if len(line) == 0: continue tokens = [x for x in line.split(" ") if x != ""] addressParts = tokens[0].split(":") nodeId = extractNodeId(tokens[1]) address = "aaaa::200:0:0:" + addressParts[4] host = tokens[2] self.nodeInfo[nodeId] = (address, host) if nodeId not in rplNodes: continue # XXX!! another hack if nodeId not in self.posOfNode: print "(cannot find node %s)" % nodeId continue x,y,z = self.posOfNode[nodeId] if DisplayHack and x > 21.85: continue sx,sy = 4.5, 3.0 ox,oy = -60,-30 layoutInfo = { "x": (x-self.xPosMin)*sx +ox, "y": (y-self.yPosMin)*sy +oy, "id": addressParts[4], "name": "n%s" %nodeId } layoutInfoList.append(layoutInfo) # Another hack layoutStr = Foren6Helper.genLayoutFile(layoutInfoList, scale=5.0) IotlabHelper.writeFile("sample.ini", layoutStr)
#--------------------------------------------------------------------------- import argparse import IotlabHelper #--------------------------------------------------------------------------- # experiment-cli submit -d 5 -l 5,archi=m3:at86rf231+site=grenoble,hello-world-stripped.elf,default_m3_rest RiotFirmwareFileName = "../riot/RIOT/examples/default/bin/iot-lab_M3/default-stripped.elf" #--------------------------------------------------------------------------- parser = argparse.ArgumentParser(description="Run an Riot experiment") IotlabHelper.parserAddTypicalArgs(parser) args = parser.parse_args() #--------------------------------------------------------------------------- iotlabHelper, exp = IotlabHelper.ensureExperimentFromArgs(args) print("- Reflashing nodes") firmwareData = IotlabHelper.readFile(RiotFirmwareFileName) result = exp.doNodeCmd("update", IotlabHelper.AllList, firmwareData) print(result) #print exp.doNodeCmd("reset", IotlabHelper.AllList) #---------------------------------------------------------------------------
#--------------------------------------------------------------------------- import argparse, time, sys, random, os, pprint import IotlabHelper from IotlabHelper import extractNodeId, AllPossibleNodes #--------------------------------------------------------------------------- ExperimentName = "RIOT IoT-LAB Experiment" #--------------------------------------------------------------------------- parser = argparse.ArgumentParser( description = ExperimentName ) IotlabHelper.parserAddTypicalArgs(parser, "QuickStart_RIOT") parser.add_argument("--with-sniffer", action="store_true", default=False) args = parser.parse_args() iotlabHelper, exp = IotlabHelper.ensureExperimentFromArgs(args) exp.makeLastSymLink() # XXX: cannot run multiple simultaneous exp. with this #--------------------------------------------------------------------------- #RiotFirmwareFileName = "../riot/RIOT/examples/default/bin/iot-lab_M3/default.elf" #RiotFirmwareFileName = "../riot/RIOT/examples/rpl_udp/bin/iot-lab_M3/rpl_udp.elf" RiotFirmwareFileName = IotlabHelper.TypeToFirmware["riot"] nodeList = exp.getNodeList() currentNodeList = nodeList[:]
# # Cedric Adjih - Inria - 2014 #--------------------------------------------------------------------------- import argparse, time, sys, random, os, pprint import IotlabHelper from IotlabHelper import extractNodeId, AllPossibleNodes #--------------------------------------------------------------------------- ExperimentName = "RIOT IoT-LAB Experiment" #--------------------------------------------------------------------------- parser = argparse.ArgumentParser(description=ExperimentName) IotlabHelper.parserAddTypicalArgs(parser, "QuickStart_RIOT") parser.add_argument("--with-sniffer", action="store_true", default=False) args = parser.parse_args() iotlabHelper, exp = IotlabHelper.ensureExperimentFromArgs(args) exp.makeLastSymLink() # XXX: cannot run multiple simultaneous exp. with this #--------------------------------------------------------------------------- #RiotFirmwareFileName = "../riot/RIOT/examples/default/bin/iot-lab_M3/default.elf" #RiotFirmwareFileName = "../riot/RIOT/examples/rpl_udp/bin/iot-lab_M3/rpl_udp.elf" RiotFirmwareFileName = IotlabHelper.TypeToFirmware["riot"] nodeList = exp.getNodeList() currentNodeList = nodeList[:] currentNodeList.sort()
def getProcessManager(exp): processManager = IotlabHelper.ProcessManager(False) processManager.setWindowTitle(exp.getPersistentInfo()["name"]) return processManager
# # ForwardedTypeList = ["openwsn", "openwsn-sink"] TypeToFirmware = { "openwsn": "../openwsn/openwsn-fw/projects/common/03oos_openwsn_prog", "openwsn-sink": "../openwsn/openwsn-fw-sink/projects/common/03oos_openwsn_prog" } #--------------------------------------------------------------------------- # parser #--------------------------------------------------------------------------- parser = argparse.ArgumentParser(description=ExperimentName) IotlabHelper.parserAddTypicalArgs(parser, "Gaillard_OpenWSN_M3_REST") args = parser.parse_args() #--------------------------------------------------------------------------- # launch experiment #--------------------------------------------------------------------------- iotlabHelper, exp = IotlabHelper.ensureExperimentFromArgs(args) exp.makeLastSymLink() # XXX: cannot run multiple simultaneous exp. with this #Find expID lastExpLink = os.readlink(IotlabHelper.LastExpSymLink) rExpId = re.compile(IotlabHelper.ExpTemplateDir.replace("%s", "([0-9]+)")) mExpId = rExpId.search(lastExpLink) if mExpId == None: raise RuntimeError("Cannot parse %s" % IotlabHelper.LastExpSymLink, (IotlabHelper.ExpTemplateDir, lastExpLink))
import argparse import IotlabHelper #--------------------------------------------------------------------------- # experiment-cli submit -d 5 -l 5,archi=m3:at86rf231+site=grenoble,hello-world-stripped.elf,default_m3_rest RiotFirmwareFileName = "../riot/RIOT/examples/default/bin/iot-lab_M3/default-stripped.elf" #--------------------------------------------------------------------------- parser = argparse.ArgumentParser( description = "Run an Riot experiment" ) IotlabHelper.parserAddTypicalArgs(parser) args = parser.parse_args() #--------------------------------------------------------------------------- iotlabHelper, exp = IotlabHelper.ensureExperimentFromArgs(args) print ("- Reflashing nodes") firmwareData = IotlabHelper.readFile(RiotFirmwareFileName) result = exp.doNodeCmd("update", IotlabHelper.AllList, firmwareData) print (result) #print exp.doNodeCmd("reset", IotlabHelper.AllList) #---------------------------------------------------------------------------
def updateInfo(self): CacheNodeList = "cache-node-list.json" CacheResource = "cache-resource-server.json" # XXX: move if self.exp.hasFile(CacheNodeList): self.expNodeList = fromJson(self.exp.readFile(CacheNodeList)) else: self.expNodeList = self.exp.getNodeList() self.exp.writeFile(CacheNodeList, toJson(self.expNodeList)) self.expServer = IotlabHelper.getExpUniqueServer( self.exp, self.expNodeList) self.expServer = self.expServer.split(".")[0] if self.exp.hasFile(CacheResource): self.serverInfo = fromJson(self.exp.readFile(CacheResource)) else: self.serverInfo = self.iotlab.getResources(self.expServer) self.exp.writeFile(CacheResource, toJson(self.serverInfo)) siteInfo = self.serverInfo archi = "m3:at86rf231" nodePosList = [(extractNodeId(info["network_address"]), (float(info["x"]), float(info["y"]), float(info["z"]))) for info in siteInfo if info["archi"] == archi and "null" not in (info["network_address"], info["x"], info["y"], info["z"]) and info["state"] in ("Alive", "Busy")] if not self.args.full_topology: nodePosList = [(extractNodeId(info["network_address"]), (-float(info["y"]), float(info["x"]), float(info["z"]))) for info in siteInfo if info["archi"] == archi and "null" not in (info["network_address"], info["x"], info["y"], info["z"]) and info["state"] in ("Alive", "Busy")] expInfo = self.exp.getPersistentInfo() if self.exp.hasFile("ssh-forward-port.json"): self.sshTunnelByType = IotlabHelper.fromJson(self.exp.readFile( "ssh-forward-port.json")) else: self.sshTunnelByType = {} self.portOfNode = {} for nodeAndPortList in self.sshTunnelByType.values(): for (address, port) in nodeAndPortList: self.portOfNode[extractNodeId(address)] = port nodeInfoByType = expInfo["nodeInfoByType"] #print nodeInfoByType.get("contiki-rpl-node") self.posOfNode = dict(nodePosList) nodeOfType = {} rplNodes = set() for typeName, info in nodeInfoByType.iteritems(): nodeOfType[typeName] = [ extractNodeId(node) for node in info["nodes"] ] if typeName in ["border-router", "contiki-rpl-node"]: rplNodes = rplNodes.union(set(nodeOfType[typeName])) #print posOfNode xPosList = [x for x,y,z in self.posOfNode.itervalues()] yPosList = [y for x,y,z in self.posOfNode.itervalues()] self.xPosMin, self.xPosMax = min(xPosList), max(xPosList) self.yPosMin, self.yPosMax = min(yPosList), max(yPosList) self.nodeOfType = nodeOfType #print xPosMin, xPosMax, yPosMin, yPosMax self.nodeInfo = {} layoutInfoList = [] nodeInfoFileName = "grenoble-node.txt" if os.path.exists(nodeInfoFileName): #XXX!! big hack f = open(nodeInfoFileName) for line in f.readlines(): line = line.strip() if len(line) == 0: continue tokens = [x for x in line.split(" ") if x != ""] addressParts = tokens[0].split(":") nodeId = extractNodeId(tokens[1]) address = "aaaa::200:0:0:" + addressParts[4] host = tokens[2] self.nodeInfo[nodeId] = (address, host) if nodeId not in rplNodes: continue # XXX!! another hack if nodeId not in self.posOfNode: print "(cannot find node %s)" % nodeId continue x,y,z = self.posOfNode[nodeId] if not self.args.full_topology and x > 21.85: continue sx,sy = 4.5, 3.0 ox,oy = -60,-30 layoutInfo = { "x": (x-self.xPosMin)*sx +ox, "y": (y-self.yPosMin)*sy +oy, "id": addressParts[4], "name": "n%s" %nodeId } layoutInfoList.append(layoutInfo) # Another hack layoutStr = Foren6Helper.genLayoutFile(layoutInfoList, scale=5.0) IotlabHelper.writeFile("sample.ini", layoutStr)
"openwsn": "../openwsn/openwsn-fw/projects/common/03oos_openwsn_prog", "openwsn-sink": "../openwsn/openwsn-fw-sink/projects/common/03oos_openwsn_prog" } #--------------------------------------------------------------------------- # parser #--------------------------------------------------------------------------- parser = argparse.ArgumentParser( description = ExperimentName ) IotlabHelper.parserAddTypicalArgs(parser, "Gaillard_OpenWSN_M3_REST") args = parser.parse_args() #--------------------------------------------------------------------------- # launch experiment #--------------------------------------------------------------------------- iotlabHelper, exp = IotlabHelper.ensureExperimentFromArgs(args) exp.makeLastSymLink() # XXX: cannot run multiple simultaneous exp. with this #Find expID lastExpLink = os.readlink(IotlabHelper.LastExpSymLink) rExpId = re.compile(IotlabHelper.ExpTemplateDir.replace("%s", "([0-9]+)")) mExpId = rExpId.search(lastExpLink) if mExpId == None: raise RuntimeError("Cannot parse %s" % IotlabHelper.LastExpSymLink, (IotlabHelper.ExpTemplateDir, lastExpLink))
# Cedric Adjih - Inria - 2014 #--------------------------------------------------------------------------- import argparse, os, re import IotlabHelper import threading, thread from IotlabHelper import extractNodeId, AllPossibleNodes import ConnectionTool #--------------------------------------------------------------------------- parser = argparse.ArgumentParser() parser.add_argument("--exp-id", type=int, default=None) args = parser.parse_args() IotlabHelper.setExpIdDefaultAsLastExp(args) iotlab, exp = IotlabHelper.getHelperAndExp(args) #--------------------------------------------------------------------------- class NodeIO: def __init__(self, connection, address, observer = None): self.address = address self.connection = connection self.buffer = "" self.observer = observer def write(self, data): self.connection.write(data) def notifyInput(self, data):
#--------------------------------------------------------------------------- import argparse, time, sys, random, os, pprint import IotlabHelper from IotlabHelper import extractNodeId, AllPossibleNodes #--------------------------------------------------------------------------- ExperimentName = "OpenWSN IoT-LAB experiment" #--------------------------------------------------------------------------- parser = argparse.ArgumentParser( description = ExperimentName ) IotlabHelper.parserAddTypicalArgs(parser, "OpenWSN_Exp_REST") args = parser.parse_args() iotlabHelper, exp = IotlabHelper.ensureExperimentFromArgs(args) exp.makeLastSymLink() # XXX: cannot run multiple simultaneous exp. with this #-------------------------------------------------- # Flash nodes #-------------------------------------------------- random.seed(0) # for random order of sniffers nodeList = exp.getNodeList() currentNodeList = nodeList[:]
# Cedric Adjih - Inria - 2014 #--------------------------------------------------------------------------- import argparse, os, re import IotlabHelper import threading, thread from IotlabHelper import extractNodeId, AllPossibleNodes import ConnectionTool #--------------------------------------------------------------------------- parser = argparse.ArgumentParser() parser.add_argument("--exp-id", type=int, default=None) args = parser.parse_args() IotlabHelper.setExpIdDefaultAsLastExp(args) iotlab, exp = IotlabHelper.getHelperAndExp(args) #--------------------------------------------------------------------------- class NodeIO: def __init__(self, connection, address, observer=None): self.address = address self.connection = connection self.buffer = "" self.observer = observer def write(self, data): self.connection.write(data)