| #!/usr/bin/env python |
| # |
| # Copyright (c) 2016, The OpenThread Authors. |
| # All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are met: |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # 2. Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # 3. Neither the name of the copyright holder nor the |
| # names of its contributors may be used to endorse or promote products |
| # derived from this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| # POSSIBILITY OF SUCH DAMAGE. |
| # |
| |
| import os |
| import sys |
| import time |
| if sys.platform != 'win32': |
| import node_cli |
| else: |
| import node_api |
| import unittest |
| |
| class Node: |
| def __init__(self, nodeid): |
| if sys.platform != 'win32': |
| self.interface = node_cli.otCli(nodeid) |
| else: |
| self.interface = node_api.otApi(nodeid) |
| |
| self.interface.clear_whitelist() |
| self.interface.disable_whitelist() |
| self.interface.set_timeout(100) |
| |
| def __del__(self): |
| del self.interface |
| |
| def set_mode(self, mode): |
| self.interface.set_mode(mode) |
| |
| def debug(self, level): |
| self.interface.debug(level) |
| |
| def interface_up(self): |
| self.interface.interface_up() |
| |
| def interface_down(self): |
| self.interface.interface_down() |
| |
| def thread_start(self): |
| self.interface.thread_start() |
| |
| def thread_stop(self): |
| self.interface.thread_stop() |
| |
| def commissioner_start(self): |
| self.interface.commissioner_start() |
| |
| def commissioner_add_joiner(self, addr, psk): |
| self.interface.commissioner_add_joiner(addr, psk) |
| |
| def joiner_start(self, pskd='', provisioning_url=''): |
| self.interface.joiner_start(pskd, provisioning_url) |
| |
| def start(self): |
| self.interface.interface_up() |
| self.interface.thread_start() |
| |
| def stop(self): |
| self.interface.thread_stop() |
| self.interface.interface_down() |
| |
| def clear_whitelist(self): |
| self.interface.clear_whitelist() |
| |
| def enable_whitelist(self): |
| self.interface.enable_whitelist() |
| |
| def disable_whitelist(self): |
| self.interface.disable_whitelist() |
| |
| def add_whitelist(self, addr, rssi=None): |
| self.interface.add_whitelist(addr, rssi) |
| |
| def remove_whitelist(self, addr): |
| self.interface.remove_whitelist(addr) |
| |
| def get_addr16(self): |
| return self.interface.get_addr16() |
| |
| def get_addr64(self): |
| return self.interface.get_addr64() |
| |
| def get_hashmacaddr(self): |
| return self.interface.get_hashmacaddr() |
| |
| def get_channel(self): |
| return self.interface.get_channel() |
| |
| def set_channel(self, channel): |
| self.interface.set_channel(channel) |
| |
| def get_masterkey(self): |
| return self.interface.get_masterkey() |
| |
| def set_masterkey(self, masterkey): |
| self.interface.set_masterkey(masterkey) |
| |
| def get_key_sequence_counter(self): |
| return self.interface.get_key_sequence_counter() |
| |
| def set_key_sequence_counter(self, key_sequence_counter): |
| self.interface.set_key_sequence_counter(key_sequence_counter) |
| |
| def set_key_switch_guardtime(self, key_switch_guardtime): |
| self.interface.set_key_switch_guardtime(key_switch_guardtime) |
| |
| def set_network_id_timeout(self, network_id_timeout): |
| self.interface.set_network_id_timeout(network_id_timeout) |
| |
| def get_network_name(self): |
| return self.interface.get_network_name() |
| |
| def set_network_name(self, network_name): |
| self.interface.set_network_name(network_name) |
| |
| def get_panid(self): |
| return self.interface.get_panid() |
| |
| def set_panid(self, panid): |
| self.interface.set_panid(panid) |
| |
| def get_partition_id(self): |
| return self.interface.get_partition_id() |
| |
| def set_partition_id(self, partition_id): |
| self.interface.set_partition_id(partition_id) |
| |
| def set_router_upgrade_threshold(self, threshold): |
| self.interface.set_router_upgrade_threshold(threshold) |
| |
| def set_router_downgrade_threshold(self, threshold): |
| self.interface.set_router_downgrade_threshold(threshold) |
| |
| def release_router_id(self, router_id): |
| self.interface.release_router_id(router_id) |
| |
| def get_state(self): |
| return self.interface.get_state() |
| |
| def set_state(self, state): |
| self.interface.set_state(state) |
| |
| def get_timeout(self): |
| return self.interface.get_timeout() |
| |
| def set_timeout(self, timeout): |
| self.interface.set_timeout(timeout) |
| |
| def set_max_children(self, number): |
| self.interface.set_max_children(number) |
| |
| def get_weight(self): |
| return self.interface.get_weight() |
| |
| def set_weight(self, weight): |
| self.interface.set_weight(weight) |
| |
| def add_ipaddr(self, ipaddr): |
| self.interface.add_ipaddr(ipaddr) |
| |
| def get_addrs(self): |
| return self.interface.get_addrs() |
| |
| def get_context_reuse_delay(self): |
| return self.interface.get_context_reuse_delay() |
| |
| def set_context_reuse_delay(self, delay): |
| self.interface.set_context_reuse_delay(delay) |
| |
| def add_prefix(self, prefix, flags, prf = 'med'): |
| self.interface.add_prefix(prefix, flags, prf) |
| |
| def remove_prefix(self, prefix): |
| self.interface.remove_prefix(prefix) |
| |
| def add_route(self, prefix, prf = 'med'): |
| self.interface.add_route(prefix, prf) |
| |
| def remove_route(self, prefix): |
| self.interface.remove_route(prefix) |
| |
| def register_netdata(self): |
| self.interface.register_netdata() |
| |
| def energy_scan(self, mask, count, period, scan_duration, ipaddr): |
| self.interface.energy_scan(mask, count, period, scan_duration, ipaddr) |
| |
| def panid_query(self, panid, mask, ipaddr): |
| self.interface.panid_query(panid, mask, ipaddr) |
| |
| def scan(self): |
| return self.interface.scan() |
| |
| def ping(self, ipaddr, num_responses=1, size=None, timeout=5000): |
| return self.interface.ping(ipaddr, num_responses, size, timeout) |
| |
| def reset(self): |
| return self.interface.reset() |
| |
| def set_router_selection_jitter(self, jitter): |
| self.interface.set_router_selection_jitter(jitter) |
| |
| def set_active_dataset(self, timestamp, panid=None, channel=None, channel_mask=None, master_key=None): |
| self.interface.set_active_dataset(timestamp, panid, channel, channel_mask, master_key) |
| |
| def set_pending_dataset(self, pendingtimestamp, activetimestamp, panid=None, channel=None): |
| self.interface.set_pending_dataset(pendingtimestamp, activetimestamp, panid, channel) |
| |
| def announce_begin(self, mask, count, period, ipaddr): |
| self.interface.announce_begin(mask, count, period, ipaddr) |
| |
| def send_mgmt_active_set(self, active_timestamp=None, channel=None, channel_mask=None, extended_panid=None, |
| panid=None, master_key=None, mesh_local=None, network_name=None, binary=None): |
| self.interface.send_mgmt_active_set(active_timestamp, channel, channel_mask, extended_panid, panid, |
| master_key, mesh_local, network_name, binary) |
| |
| def send_mgmt_pending_set(self, pending_timestamp=None, active_timestamp=None, delay_timer=None, channel=None, |
| panid=None, master_key=None, mesh_local=None, network_name=None): |
| self.interface.send_mgmt_pending_set(pending_timestamp, active_timestamp, delay_timer, channel, panid, |
| master_key, mesh_local, network_name) |
| |
| if __name__ == '__main__': |
| unittest.main() |