Beispiel #1
0
 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()
Beispiel #2
0
 def __init__(self, iotlab, exp, args):
     self.iotlab = iotlab
     self.exp = exp
     self.args = args
     self.view = None
     self.updateInfo()
     self.groupManager = IotlabHelper.GroupManager()
Beispiel #3
0
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
Beispiel #4
0
    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
    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
Beispiel #6
0
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"
Beispiel #7
0
    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)

#---------------------------------------------------------------------------
Beispiel #9
0
#---------------------------------------------------------------------------

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[:]
Beispiel #10
0
#
# 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()
Beispiel #11
0
def getProcessManager(exp):
    processManager = IotlabHelper.ProcessManager(False)
    processManager.setWindowTitle(exp.getPersistentInfo()["name"])
    return processManager
Beispiel #12
0
#
#

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))
Beispiel #13
0
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)

#---------------------------------------------------------------------------
Beispiel #14
0
    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))
Beispiel #16
0
# 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):
Beispiel #17
0
#---------------------------------------------------------------------------

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)