Exemplo n.º 1
0
def get_uids(nodes_list):
    """ Get the given nodes uid """
    signal.signal(signal.SIGALRM, (lambda signal, frame: 0))
    signal.signal(signal.SIGALRM, (lambda signal, frame: 0))
    with SerialAggregator(nodes_list, line_handler=handle_uid):
        # as aggr:
        signal.pause()
    return NODES_UID
Exemplo n.º 2
0
def run_radio_logger(exp_id, opts, nodes):
    """ Run radio logger """
    with SerialAggregator(nodes, line_handler=handle_log) as aggregator:
        while True:
            try:
                run_cmd_manager(opts, aggregator, nodes)
                print("Saving radio logs ...")
                save_radio_logs(exp_id, opts, nodes, LOGS)
                break
            except KeyboardInterrupt:
                print("Interrupted by user ...")
                break
Exemplo n.º 3
0
def main(args=None):
    """ Aggregate all nodes sniffer """
    args = args or sys.argv[1:]
    opts = SerialAggregator.parser.parse_args(args)
    try:
        # Parse arguments
        nodes_list = SerialAggregator.select_nodes(opts)
        # Run the aggregator
        with SerialAggregator(nodes_list, print_lines=True) as aggregator:
            while True:
                message = 'd'
                for node in aggregator.keys():
                    aggregator._send(node, message)
                    time.sleep(0.1) 
    except (ValueError, RuntimeError) as err:
        sys.stderr.write("%s\n" % err)
        exit(1)
Exemplo n.º 4
0
def main():
    """ Reads nodes from ressource json in stdin and
    aggregate serial links of all nodes
    """
    parser = opts_parser()
    opts = parser.parse_args()
    opts.with_a8 = True

    try:
        nodes_list = SerialAggregator.select_nodes(opts)
        # nodes_list = SerialAggregator.select_nodes(**var(opts))

    except RuntimeError as err:
        sys.stderr.write("%s\n" % err)
        exit(1)

    uids = get_uids(nodes_list)
    print json.dumps(uids, indent=4, sort_keys=True)
Exemplo n.º 5
0
def main():
    """ Reads nodes from ressource json in stdin and
    aggregate serial links of all nodes
    """
    parser = opts_parser()
    opts = parser.parse_args()
    opts.with_a8 = True

    try:
        nodes_list = SerialAggregator.select_nodes(opts)
        # nodes_list = SerialAggregator.select_nodes(**var(opts))

    except RuntimeError as err:
        sys.stderr.write("%s\n" % err)
        exit(1)

    uids = get_uids(nodes_list)
    print json.dumps(uids, indent=4, sort_keys=True)
Exemplo n.º 6
0
def main():
    """ Launch serial aggregator and aggregate serial links
    of all nodes.
    """
    parser = opts_parser()
    opts = parser.parse_args()
    api = Api(*get_user_credentials())
    opts.with_a8 = True
    try:
        nodes = SerialAggregator.select_nodes(opts)
    except RuntimeError as err:
        print(err)
        exit(1)
    if opts.experiment_id:
        exp_id = opts.experiment_id
    else:
        exp_id = iotlabcli.get_current_experiment(api)
    print("Running radio logger ...")
    run_radio_logger(exp_id, opts, nodes)
Exemplo n.º 7
0
 def __init__(self, nodes_list):
     self.state = {}
     self.nodes = SerialAggregator(nodes_list)
     self.current_sender_node = None
Exemplo n.º 8
0
class RadioCharac(object):
    """ Radio Characterization """
    def __init__(self, nodes_list):
        self.state = {}
        self.nodes = SerialAggregator(nodes_list)
        self.current_sender_node = None

    def start(self):
        """ Start nodes connection """
        self.nodes.start()

    def stop(self):
        """ Stop nodes connection """
        self.nodes.stop()

    def _answers_handler(self, node_id, msg):
        """ Handle answers """
        try:
            line = msg.split(' ')

            if line[0] == 'config_radio':
                if line[1] == 'ACK':
                    self.state['config']['success'].append(node_id)
                else:
                    self.state['config']['failure'].append(node_id)
            elif line[0] == 'send_packets':
                if line[1] == 'ACK':
                    # send_packets ACK 0
                    self.state['send']['success'].append(node_id)
                else:
                    # send_packets NACK 42
                    self.state['send']['failure'].append('%s %s' %
                                                         (node_id, line[2]))

            elif line[0] == 'radio_rx':
                # "radio_rx m3-128 -17dBm 5 -61 255 sender power num rssi lqi"
                sender = line[1]

                # add list for this node
                results = self.state['radio'][sender].get(
                    node_id, {'success': [], 'errors': []})
                self.state['radio'][sender][node_id] = results

                # add rx informations
                #results.append("%s" % ' '.join(line[2:6]))
                results['success'].append(tuple(line[2:6]))
            elif line[0] == 'radio_rx_error':
                sender = self.current_sender_node.hostname

                # add list for this node
                results = self.state['radio'][sender].get(
                    node_id, {'success': [], 'errors': []})
                self.state['radio'][sender][node_id] = results

                results['errors'].append("%s" % line[1])

                # print >> sys.stderr, "Radio_rx_error %s %s sender %s" % (
                #         node_id, line[1], self.current_sender_node.hostname)

            else:
                print >> sys.stderr, "UNKOWN_MSG: %s %r" % (node_id, msg)

        except IndexError:
            print >> sys.stderr, "UNKOWN_MSG: %s %r" % (node_id, msg)


    def run_characterization(self, channel, power, num_pkts, delay):
        """ Run the radio characterizations on nodes"""

        self.start()
        # wait until aggregator started, there may be issues when nodes
        # disconnect (aggregator bug)
        time.sleep(1)

        self.state['options'] = {'power': power, 'channel': channel,
                                 'num_pkts': num_pkts, 'delay': delay}

        self.state['config'] = {'success': [], 'failure': []}
        self.state['send'] = {'success': [], 'failure': []}

        #nodes = self.nodes.values()
        #self.nodes_cli('--update', firmware=FIRMWARE_PATH)
        #time.sleep(2)  # wait started

        # init all nodes handlers and radio config
        self.state['radio'] = {}

        for node in self.nodes.values():
            self.state['radio'][node.hostname] = {}
            node.line_handler.append(self._answers_handler)

        cmd = "config_radio -c {channel}\n"
        self.nodes.broadcast(cmd.format(channel=channel))

        time.sleep(10)  # wait

        cmd = "send_packets -i {node_id} -p {power} -n {num_pkts} -d {delay}\n"
        for node in self.nodes.values():
            self.current_sender_node = node
            print >> sys.stderr, "sending node %s" % node.hostname
            node.send(cmd.format(node_id=node.hostname, power=power,
                                 num_pkts=num_pkts, delay=delay))
            time.sleep(2)
            self.current_sender_node = None


        self.stop()
        return self.state
Exemplo n.º 9
0
 def __init__(self, nodes_list):
     self.state = {}
     self.nodes = SerialAggregator(nodes_list)
     self.current_sender_node = None
Exemplo n.º 10
0
class RadioCharac(object):
    """ Radio Characterization """
    def __init__(self, nodes_list):
        self.state = {}
        self.nodes = SerialAggregator(nodes_list)
        self.current_sender_node = None

    def start(self):
        """ Start nodes connection """
        self.nodes.start()

    def stop(self):
        """ Stop nodes connection """
        self.nodes.stop()

    def _answers_handler(self, node_id, msg):
        """ Handle answers """
        try:
            line = msg.split(' ')

            if line[0] == 'config_radio':
                if line[1] == 'ACK':
                    self.state['config']['success'].append(node_id)
                else:
                    self.state['config']['failure'].append(node_id)
            elif line[0] == 'send_packets':
                if line[1] == 'ACK':
                    # send_packets ACK 0
                    self.state['send']['success'].append(node_id)
                else:
                    # send_packets NACK 42
                    self.state['send']['failure'].append('%s %s' %
                                                         (node_id, line[2]))

            elif line[0] == 'radio_rx':
                # "radio_rx m3-128 -17dBm 5 -61 255 sender power num rssi lqi"
                sender = line[1]

                # add list for this node
                results = self.state['radio'][sender].get(
                    node_id, {
                        'success': [],
                        'errors': []
                    })
                self.state['radio'][sender][node_id] = results

                # add rx informations
                #results.append("%s" % ' '.join(line[2:6]))
                results['success'].append(tuple(line[2:6]))
            elif line[0] == 'radio_rx_error':
                sender = self.current_sender_node.hostname

                # add list for this node
                results = self.state['radio'][sender].get(
                    node_id, {
                        'success': [],
                        'errors': []
                    })
                self.state['radio'][sender][node_id] = results

                results['errors'].append("%s" % line[1])

                # print >> sys.stderr, "Radio_rx_error %s %s sender %s" % (
                #         node_id, line[1], self.current_sender_node.hostname)

            else:
                print >> sys.stderr, "UNKOWN_MSG: %s %r" % (node_id, msg)

        except IndexError:
            print >> sys.stderr, "UNKOWN_MSG: %s %r" % (node_id, msg)

    def run_characterization(self, channel, power, num_pkts, delay):
        """ Run the radio characterizations on nodes"""

        self.start()
        # wait until aggregator started, there may be issues when nodes
        # disconnect (aggregator bug)
        time.sleep(1)

        self.state['options'] = {
            'power': power,
            'channel': channel,
            'num_pkts': num_pkts,
            'delay': delay
        }

        self.state['config'] = {'success': [], 'failure': []}
        self.state['send'] = {'success': [], 'failure': []}

        #nodes = self.nodes.values()
        #self.nodes_cli('--update', firmware=FIRMWARE_PATH)
        #time.sleep(2)  # wait started

        # init all nodes handlers and radio config
        self.state['radio'] = {}

        for node in self.nodes.values():
            self.state['radio'][node.hostname] = {}
            node.line_handler.append(self._answers_handler)

        cmd = "config_radio -c {channel}\n"
        self.nodes.broadcast(cmd.format(channel=channel))

        time.sleep(10)  # wait

        cmd = "send_packets -i {node_id} -p {power} -n {num_pkts} -d {delay}\n"
        for node in self.nodes.values():
            self.current_sender_node = node
            print >> sys.stderr, "sending node %s" % node.hostname
            node.send(
                cmd.format(node_id=node.hostname,
                           power=power,
                           num_pkts=num_pkts,
                           delay=delay))
            time.sleep(2)
            self.current_sender_node = None

        self.stop()
        return self.state