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
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
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)
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)
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)
def __init__(self, nodes_list): self.state = {} self.nodes = SerialAggregator(nodes_list) self.current_sender_node = None
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
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