forwardByType = {} redirectList = [] nodes = [] for typeName, typeInfo in expInfo["nodeInfoByType"].iteritems(): if typeName in forwardedTypeList: forwardList = [(node,getNewPort()) for node in typeInfo["nodes"]] redirectList.extend( ["-L %s:%s:%s" % (port, node, IotlabHelper.SerialTcpPort) for (node,port) in forwardList ]) nodes.extend(typeInfo["nodes"]) assert typeName not in forwardByType forwardByType[typeName] = forwardList exp.writeFile("ssh-forward-port.json", IotlabHelper.toJson(forwardByType)) expServer = IotlabHelper.getExpUniqueServer(exp, nodes) cmd = "echo FORWARDING PORTS"+str(redirectList)+"; sleep 600000" sshRedirectPortStr = " ".join(redirectList) sshSnifferTunnelCommand = "ssh -T %s@%s %s '%s'" % ( iotlabHelper.userName, expServer, sshRedirectPortStr, cmd) print "+", cmd processManager.startSubProcessInTerm("ssh tunnels "+str(redirectList)+" to IoT-LAB", sshSnifferTunnelCommand) #---------------------------- # #cmdPseudoTty(args) #
redirectList = [] nodes = [] for typeName, typeInfo in expInfo["nodeInfoByType"].iteritems(): if typeName in forwardedTypeList: forwardList = [(node, getNewPort()) for node in typeInfo["nodes"]] redirectList.extend([ "-L %s:%s:%s" % (port, node, IotlabHelper.SerialTcpPort) for (node, port) in forwardList ]) nodes.extend(typeInfo["nodes"]) assert typeName not in forwardByType forwardByType[typeName] = forwardList exp.writeFile("ssh-forward-port.json", IotlabHelper.toJson(forwardByType)) expServer = IotlabHelper.getExpUniqueServer(exp, nodes) cmd = "echo FORWARDING PORTS" + str(redirectList) + "; sleep 600000" sshRedirectPortStr = " ".join(redirectList) sshSnifferTunnelCommand = "ssh -T %s@%s %s '%s'" % ( iotlabHelper.userName, expServer, sshRedirectPortStr, cmd) print "+", cmd processManager.startSubProcessInTerm( "ssh tunnels " + str(redirectList) + " to IoT-LAB", sshSnifferTunnelCommand) #---------------------------- # #cmdPseudoTty(args) # #----------------------------
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)
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)