| /* |
| * 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. |
| */ |
| |
| /** |
| * @file |
| * @brief |
| * This file defines a node interface for openthread.h to be used for certification tests |
| */ |
| |
| #ifndef OTNODE_H_ |
| #define OTNODE_H_ |
| |
| #include <openthread/openthread.h> |
| |
| #ifndef OTNODEAPI |
| #define OTNODEAPI __declspec(dllimport) |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** |
| * Represents a virtual node for an openthread interface |
| */ |
| typedef struct otNode otNode; |
| |
| /** |
| * Logs a WPP message |
| */ |
| OTNODEAPI int32_t OTCALL otNodeLog(const char *aMessage); |
| |
| /** |
| * Allocates a new virtual node |
| */ |
| OTNODEAPI otNode* OTCALL otNodeInit(uint32_t id); |
| |
| /** |
| * Frees a node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeFinalize(otNode* aNode); |
| |
| /** |
| * Sets the link mode |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetMode(otNode* aNode, const char *aMode); |
| |
| /** |
| * Starts the thread interface |
| */ |
| OTNODEAPI int32_t OTCALL otNodeInterfaceUp(otNode* aNode); |
| |
| /** |
| * Stops the thread interface |
| */ |
| OTNODEAPI int32_t OTCALL otNodeInterfaceDown(otNode* aNode); |
| |
| /** |
| * Starts the thread logic |
| */ |
| OTNODEAPI int32_t OTCALL otNodeThreadStart(otNode* aNode); |
| |
| /** |
| * Stops the thread logic |
| */ |
| OTNODEAPI int32_t OTCALL otNodeThreadStop(otNode* aNode); |
| |
| /** |
| * Starts the commissioner logic |
| */ |
| OTNODEAPI int32_t OTCALL otNodeCommissionerStart(otNode* aNode); |
| |
| /** |
| * Adds a new joiner to the list for commissioning |
| */ |
| OTNODEAPI int32_t OTCALL otNodeCommissionerJoinerAdd(otNode* aNode, const char *aExtAddr, const char *aPSKd); |
| |
| /** |
| * Stops the commissioner logic |
| */ |
| OTNODEAPI int32_t OTCALL otNodeCommissionerStop(otNode* aNode); |
| |
| /** |
| * Starts the joiner logic |
| */ |
| OTNODEAPI int32_t OTCALL otNodeJoinerStart(otNode* aNode, const char *aPSKd, const char *aProvisioningUrl); |
| |
| /** |
| * Clears the node's whitelist |
| */ |
| OTNODEAPI int32_t OTCALL otNodeClearWhitelist(otNode* aNode); |
| |
| /** |
| * Enables the node's whitelist |
| */ |
| OTNODEAPI int32_t OTCALL otNodeEnableWhitelist(otNode* aNode); |
| |
| /** |
| * Disables the node's whitelist |
| */ |
| OTNODEAPI int32_t OTCALL otNodeDisableWhitelist(otNode* aNode); |
| |
| /** |
| * Adds an entry to the node's whitelist |
| */ |
| OTNODEAPI int32_t OTCALL otNodeAddWhitelist(otNode* aNode, const char *aExtAddr, int8_t aRssi); |
| |
| /** |
| * Removes an entry to the node's whitelist |
| */ |
| OTNODEAPI int32_t OTCALL otNodeRemoveWhitelist(otNode* aNode, const char *aExtAddr); |
| |
| /** |
| * Gets the node's short mac address (Rloc16) |
| */ |
| OTNODEAPI uint16_t OTCALL otNodeGetAddr16(otNode* aNode); |
| |
| /** |
| * Gets the node's extended mac address |
| */ |
| OTNODEAPI const char* OTCALL otNodeGetAddr64(otNode* aNode); |
| |
| /** |
| * Gets the node's hash mac address |
| */ |
| OTNODEAPI const char* OTCALL otNodeGetHashMacAddress(otNode* aNode); |
| |
| /** |
| * Sets the channel for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetChannel(otNode* aNode, uint8_t aChannel); |
| |
| /** |
| * Gets the channel for the node |
| */ |
| OTNODEAPI uint8_t OTCALL otNodeGetChannel(otNode* aNode); |
| |
| /** |
| * sets the node's master key |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetMasterkey(otNode* aNode, const char *aMasterkey); |
| |
| /** |
| * Gets the node's master key |
| */ |
| OTNODEAPI const char* OTCALL otNodeGetMasterkey(otNode* aNode); |
| |
| /** |
| * Gets the key sequence counter for the node |
| */ |
| OTNODEAPI uint32_t OTCALL otNodeGetKeySequenceCounter(otNode* aNode); |
| |
| /** |
| * Sets the key sequence counter for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetKeySequenceCounter(otNode* aNode, uint32_t aSequence); |
| |
| /** |
| * Sets the key switch guard time for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetKeySwitchGuardTime(otNode* aNode, uint32_t aSequence); |
| |
| /** |
| * Sets the network id timeout for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetNetworkIdTimeout(otNode* aNode, uint8_t aTimeout); |
| |
| /** |
| * Gets the network name for the node |
| */ |
| OTNODEAPI const char* OTCALL otNodeGetNetworkName(otNode* aNode); |
| |
| /** |
| * Sets the network name for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetNetworkName(otNode* aNode, const char *aName); |
| |
| /** |
| * Gets the pan id for the node |
| */ |
| OTNODEAPI uint16_t OTCALL otNodeGetPanId(otNode* aNode); |
| |
| /** |
| * Sets the pan id for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetPanId(otNode* aNode, uint16_t aPanId); |
| |
| /** |
| * Gets the partition id for the node |
| */ |
| OTNODEAPI uint32_t OTCALL otNodeGetPartitionId(otNode* aNode); |
| |
| /** |
| * Sets the partition id for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetPartitionId(otNode* aNode, uint32_t aPartitionId); |
| |
| /** |
| * Sets the router upgrade threshold for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetRouterUpgradeThreshold(otNode* aNode, uint8_t aThreshold); |
| |
| /** |
| * Sets the router downgrade threshold for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetRouterDowngradeThreshold(otNode* aNode, uint8_t aThreshold); |
| |
| /** |
| * Releases a router id for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeReleaseRouterId(otNode* aNode, uint8_t aRouterId); |
| |
| /** |
| * Gets the node's state |
| */ |
| OTNODEAPI const char* OTCALL otNodeGetState(otNode* aNode); |
| |
| /** |
| * Sets the node's state |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetState(otNode* aNode, const char *aState); |
| |
| /** |
| * Gets the child timeout for the node |
| */ |
| OTNODEAPI uint32_t OTCALL otNodeGetTimeout(otNode* aNode); |
| |
| /** |
| * Sets the child timeout for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetTimeout(otNode* aNode, uint32_t aTimeout); |
| |
| /** |
| * Gets the leader weight for the node |
| */ |
| OTNODEAPI uint8_t OTCALL otNodeGetWeight(otNode* aNode); |
| |
| /** |
| * Sets the leader weight for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetWeight(otNode* aNode, uint8_t aWeight); |
| |
| /** |
| * Adds an IP address for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeAddIpAddr(otNode* aNode, const char *aAddr); |
| |
| /** |
| * Gets the IP address for the node |
| */ |
| OTNODEAPI const char* OTCALL otNodeGetAddrs(otNode* aNode); |
| |
| /** |
| * Gets the context reuse delay for the node |
| */ |
| OTNODEAPI uint32_t OTCALL otNodeGetContextReuseDelay(otNode* aNode); |
| |
| /** |
| * Sets the context reuse delay for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetContextReuseDelay(otNode* aNode, uint32_t aDelay); |
| |
| /** |
| * Adds an IP prefix for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeAddPrefix(otNode* aNode, const char *aPrefix, const char *aFlags, const char *aPreference); |
| |
| /** |
| * Removes an IP prefix from the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeRemovePrefix(otNode* aNode, const char *aPrefix); |
| |
| /** |
| * Adds an IP route for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeAddRoute(otNode* aNode, const char *aPrefix, const char *aPreference); |
| |
| /** |
| * Removes an IP route from the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeRemoveRoute(otNode* aNode, const char *aPrefix); |
| |
| /** |
| * Registers the net data for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeRegisterNetdata(otNode* aNode); |
| |
| /** |
| * Performs an energy scan for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeEnergyScan(otNode* aNode, uint32_t aMask, uint8_t aCount, uint16_t aPeriod, uint16_t aDuration, const char *aAddr); |
| |
| /** |
| * Performs a panid query for the node |
| */ |
| OTNODEAPI int32_t OTCALL otNodePanIdQuery(otNode* aNode, uint16_t aPanId, uint32_t aMask, const char *aAddr); |
| |
| /** |
| * Performs an scan for the node |
| */ |
| OTNODEAPI const char* OTCALL otNodeScan(otNode* aNode); |
| |
| /** |
| * Performs an scan for the node |
| */ |
| OTNODEAPI uint32_t OTCALL otNodePing(otNode* aNode, const char *aAddr, uint16_t aSize, uint32_t aMinReplies, uint16_t aTimeout); |
| |
| /** |
| * Sets the router selection jitter value for a node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetRouterSelectionJitter(otNode* aNode, uint8_t aRouterJitter); |
| |
| /** |
| * Sends the announce message for a node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeCommissionerAnnounceBegin(otNode* aNode, uint32_t aChannelMask, uint8_t aCount, uint16_t aPeriod, const char *aAddr); |
| |
| /** |
| * Sets the active dataset for a node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetActiveDataset(otNode* aNode, uint64_t aTimestamp, uint16_t aPanId, uint16_t aChannel, uint32_t aChannelMask, const char *aMasterKey); |
| |
| /** |
| * Sets the pending dataset for a node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetPendingDataset(otNode* aNode, uint64_t aActiveTimestamp, uint64_t aPendingTimestamp, uint16_t aPanId, uint16_t aChannel); |
| |
| /** |
| * Sends a pending set for a node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSendPendingSet(otNode* aNode, uint64_t aActiveTimestamp, uint64_t aPendingTimestamp, uint32_t aDelayTimer, uint16_t aPanId, uint16_t aChannel, const char *aMasterKey, const char *aMeshLocal, const char *aNetworkName); |
| |
| /** |
| * Sends a active set for a node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSendActiveSet(otNode* aNode, uint64_t aActiveTimestamp, uint16_t aPanId, uint16_t aChannel, uint32_t aChannelMask, const char *aExtPanId, const char *aMasterKey, const char *aMeshLocal, const char *aNetworkName, const char *aBinary); |
| |
| /** |
| * Sets the maximum number of children for a node |
| */ |
| OTNODEAPI int32_t OTCALL otNodeSetMaxChildren(otNode* aNode, uint8_t aMaxChildren); |
| |
| /** |
| * The interface used to listen in on virtual nodes' MAC frames |
| */ |
| |
| typedef struct otListener otListener; |
| |
| /** |
| * Creates and starts a new listener |
| */ |
| OTNODEAPI otListener* OTCALL otListenerInit(uint32_t nodeid); |
| |
| /** |
| * Frees a listener |
| */ |
| OTNODEAPI int32_t OTCALL otListenerFinalize(otListener* aListener); |
| |
| /** |
| * Structure that represents a received MAC frame from the listener |
| */ |
| typedef struct otMacFrame |
| { |
| uint8_t buffer[128]; |
| uint8_t length; |
| uint32_t nodeid; |
| } otMacFrame; |
| |
| /** |
| * Reads the next MAC frame from the listener |
| */ |
| OTNODEAPI int32_t OTCALL otListenerRead(otListener* aListener, otMacFrame *aFrame); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif |
| |
| #endif // OTNODE_H_ |