ZeroTierOne.h
#
ClassesName | |
---|---|
struct | ZT_RemoteTrace |
struct | ZT_UserMessage |
struct | ZT_NodeStatus |
struct | ZT_NodeStatistics |
struct | ZT_VirtualNetworkRule |
struct | ZT_VirtualNetworkRoute |
struct | ZT_VirtualNetworkDNS |
struct | ZT_MulticastGroup |
struct | ZT_VirtualNetworkConfig |
struct | ZT_VirtualNetworkList |
struct | ZT_PhysicalPathConfiguration |
struct | ZT_PeerPhysicalPath |
struct | ZT_Peer |
struct | ZT_PeerList |
struct | ZT_Node_Callbacks |
#
TypesName | |
---|---|
enum | ZT_ResultCode { ZT_RESULT_OK = 0, ZT_RESULT_OK_IGNORED = 1, ZT_RESULT_FATAL_ERROR_OUT_OF_MEMORY = 100, ZT_RESULT_FATAL_ERROR_DATA_STORE_FAILED = 101, ZT_RESULT_FATAL_ERROR_INTERNAL = 102, ZT_RESULT_ERROR_NETWORK_NOT_FOUND = 1000, ZT_RESULT_ERROR_UNSUPPORTED_OPERATION = 1001, ZT_RESULT_ERROR_BAD_PARAMETER = 1002} |
enum | ZT_MultipathBondingPolicy { ZT_BONDING_POLICY_NONE = 0, ZT_BONDING_POLICY_ACTIVE_BACKUP = 1, ZT_BONDING_POLICY_BROADCAST = 2, ZT_BONDING_POLICY_BALANCE_RR = 3, ZT_BONDING_POLICY_BALANCE_XOR = 4, ZT_BONDING_POLICY_BALANCE_AWARE = 5} |
enum | ZT_MultipathLinkSelectMethod { ZT_MULTIPATH_RESELECTION_POLICY_ALWAYS = 0, ZT_MULTIPATH_RESELECTION_POLICY_BETTER = 1, ZT_MULTIPATH_RESELECTION_POLICY_FAILURE = 2, ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE = 3} |
enum | ZT_MultipathLinkMode { ZT_MULTIPATH_SLAVE_MODE_PRIMARY = 0, ZT_MULTIPATH_SLAVE_MODE_SPARE = 1} |
enum | ZT_MultipathMonitorStrategy { ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DEFAULT = 0, ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_PASSIVE = 1, ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_ACTIVE = 2, ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC = 3} |
enum | ZT_MultipathFlowRebalanceStrategy { ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_PASSIVE = 0, ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_OPPORTUNISTIC = 0, ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_AGGRESSIVE = 2} |
enum | ZT_MultipathQualityWeightIndex { ZT_QOS_LAT_IDX, ZT_QOS_LTM_IDX, ZT_QOS_PDV_IDX, ZT_QOS_PLR_IDX, ZT_QOS_PER_IDX, ZT_QOS_THR_IDX, ZT_QOS_THM_IDX, ZT_QOS_THV_IDX, ZT_QOS_AGE_IDX, ZT_QOS_SCP_IDX, ZT_QOS_WEIGHT_SIZE} |
enum | ZT_Event { ZT_EVENT_UP = 0, ZT_EVENT_OFFLINE = 1, ZT_EVENT_ONLINE = 2, ZT_EVENT_DOWN = 3, ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION = 4, ZT_EVENT_TRACE = 5, ZT_EVENT_USER_MESSAGE = 6, ZT_EVENT_REMOTE_TRACE = 7} |
enum | ZT_VirtualNetworkStatus { ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION = 0, ZT_NETWORK_STATUS_OK = 1, ZT_NETWORK_STATUS_ACCESS_DENIED = 2, ZT_NETWORK_STATUS_NOT_FOUND = 3, ZT_NETWORK_STATUS_PORT_ERROR = 4, ZT_NETWORK_STATUS_CLIENT_TOO_OLD = 5} |
enum | ZT_VirtualNetworkType { ZT_NETWORK_TYPE_PRIVATE = 0, ZT_NETWORK_TYPE_PUBLIC = 1} |
enum | ZT_VirtualNetworkRuleType { ZT_NETWORK_RULE_ACTION_DROP = 0, ZT_NETWORK_RULE_ACTION_ACCEPT = 1, ZT_NETWORK_RULE_ACTION_TEE = 2, ZT_NETWORK_RULE_ACTION_WATCH = 3, ZT_NETWORK_RULE_ACTION_REDIRECT = 4, ZT_NETWORK_RULE_ACTION_BREAK = 5, ZT_NETWORK_RULE_ACTION_PRIORITY = 6, ZT_NETWORK_RULE_ACTIONMAX_ID = 15, ZT_NETWORK_RULE_MATCH_SOURCE_ZEROTIER_ADDRESS = 24, ZT_NETWORK_RULE_MATCH_DEST_ZEROTIER_ADDRESS = 25, ZT_NETWORK_RULE_MATCH_VLAN_ID = 26, ZT_NETWORK_RULE_MATCH_VLAN_PCP = 27, ZT_NETWORK_RULE_MATCH_VLAN_DEI = 28, ZT_NETWORK_RULE_MATCH_MAC_SOURCE = 29, ZT_NETWORK_RULE_MATCH_MAC_DEST = 30, ZT_NETWORK_RULE_MATCH_IPV4_SOURCE = 31, ZT_NETWORK_RULE_MATCH_IPV4_DEST = 32, ZT_NETWORK_RULE_MATCH_IPV6_SOURCE = 33, ZT_NETWORK_RULE_MATCH_IPV6_DEST = 34, ZT_NETWORK_RULE_MATCH_IP_TOS = 35, ZT_NETWORK_RULE_MATCH_IP_PROTOCOL = 36, ZT_NETWORK_RULE_MATCH_ETHERTYPE = 37, ZT_NETWORK_RULE_MATCH_ICMP = 38, ZT_NETWORK_RULE_MATCH_IP_SOURCE_PORT_RANGE = 39, ZT_NETWORK_RULE_MATCH_IP_DEST_PORT_RANGE = 40, ZT_NETWORK_RULE_MATCH_CHARACTERISTICS = 41, ZT_NETWORK_RULE_MATCH_FRAME_SIZE_RANGE = 42, ZT_NETWORK_RULE_MATCH_RANDOM = 43, ZT_NETWORK_RULE_MATCH_TAGS_DIFFERENCE = 44, ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_AND = 45, ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_OR = 46, ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_XOR = 47, ZT_NETWORK_RULE_MATCH_TAGS_EQUAL = 48, ZT_NETWORK_RULE_MATCH_TAG_SENDER = 49, ZT_NETWORK_RULE_MATCH_TAG_RECEIVER = 50, ZT_NETWORK_RULE_MATCH_INTEGER_RANGE = 51, ZT_NETWORK_RULE_MATCHMAX_ID = 63} |
enum | ZT_VirtualNetworkConfigOperation { ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP = 1, ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE = 2, ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN = 3, ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY = 4} |
enum | ZT_PeerRole { ZT_PEER_ROLE_LEAF = 0, ZT_PEER_ROLE_MOON = 1, ZT_PEER_ROLE_PLANET = 2} |
enum | ZT_Vendor { ZT_VENDOR_UNSPECIFIED = 0, ZT_VENDOR_ZEROTIER = 1} |
enum | ZT_Platform { ZT_PLATFORM_UNSPECIFIED = 0, ZT_PLATFORM_LINUX = 1, ZT_PLATFORM_WINDOWS = 2, ZT_PLATFORM_MACOS = 3, ZT_PLATFORM_ANDROID = 4, ZT_PLATFORM_IOS = 5, ZT_PLATFORM_SOLARIS_SMARTOS = 6, ZT_PLATFORM_FREEBSD = 7, ZT_PLATFORM_NETBSD = 8, ZT_PLATFORM_OPENBSD = 9, ZT_PLATFORM_RISCOS = 10, ZT_PLATFORM_VXWORKS = 11, ZT_PLATFORM_FREERTOS = 12, ZT_PLATFORM_SYSBIOS = 13, ZT_PLATFORM_HURD = 14, ZT_PLATFORM_WEB = 15} |
enum | ZT_Architecture { ZT_ARCHITECTURE_UNSPECIFIED = 0, ZT_ARCHITECTURE_X86 = 1, ZT_ARCHITECTURE_X64 = 2, ZT_ARCHITECTURE_ARM32 = 3, ZT_ARCHITECTURE_ARM64 = 4, ZT_ARCHITECTURE_MIPS32 = 5, ZT_ARCHITECTURE_MIPS64 = 6, ZT_ARCHITECTURE_POWER32 = 7, ZT_ARCHITECTURE_POWER64 = 8, ZT_ARCHITECTURE_OPENRISC32 = 9, ZT_ARCHITECTURE_OPENRISC64 = 10, ZT_ARCHITECTURE_SPARC32 = 11, ZT_ARCHITECTURE_SPARC64 = 12, ZT_ARCHITECTURE_DOTNET_CLR = 13, ZT_ARCHITECTURE_JAVA_JVM = 14, ZT_ARCHITECTURE_WEB = 15, ZT_ARCHITECTURE_S390X = 16} |
enum | ZT_StateObjectType { ZT_STATE_OBJECT_NULL = 0, ZT_STATE_OBJECT_IDENTITY_PUBLIC = 1, ZT_STATE_OBJECT_IDENTITY_SECRET = 2, ZT_STATE_OBJECT_PLANET = 3, ZT_STATE_OBJECT_MOON = 4, ZT_STATE_OBJECT_PEER = 5, ZT_STATE_OBJECT_NETWORK_CONFIG = 6} |
typedef void | ZT_Node |
typedef int()(ZT_Node , void , void , uint64_t, void *, enum ZT_VirtualNetworkConfigOperation, const ZT_VirtualNetworkConfig ) | ZT_VirtualNetworkConfigFunction |
typedef void()(ZT_Node , void , void , uint64_t, void *, uint64_t, uint64_t, unsigned int, unsigned int, const void , unsigned int) | ZT_VirtualNetworkFrameFunction |
typedef void()(ZT_Node , void , void , enum ZT_Event, const void *) | ZT_EventCallback |
typedef void()(ZT_Node , void , void , enum ZT_StateObjectType, const uint64_t[2], const void *, int) | ZT_StatePutFunction |
typedef int()(ZT_Node , void , void , enum ZT_StateObjectType, const uint64_t[2], void *, unsigned int) | ZT_StateGetFunction |
typedef int()(ZT_Node , void , void , int64_t, const struct sockaddr_storage , const void , unsigned int, unsigned int) | ZT_WirePacketSendFunction |
typedef int()(ZT_Node , void , void , uint64_t, int64_t, const struct sockaddr_storage *) | ZT_PathCheckFunction |
typedef int()(ZT_Node , void , void , uint64_t, int, struct sockaddr_storage *) | ZT_PathLookupFunction |
#
FunctionsName | |
---|---|
enum ZT_ResultCode | ZT_Node_new(ZT_Node * node, void uptr, void tptr, const struct ZT_Node_Callbacks callbacks, int64_t now) |
void | ZT_Node_delete(ZT_Node * node) |
enum ZT_ResultCode | ZT_Node_processWirePacket(ZT_Node node, void tptr, int64_t now, int64_t localSocket, const struct sockaddr_storage remoteAddress, const void packetData, unsigned int packetLength, volatile int64_t * nextBackgroundTaskDeadline) |
enum ZT_ResultCode | ZT_Node_processVirtualNetworkFrame(ZT_Node node, void tptr, int64_t now, uint64_t nwid, uint64_t sourceMac, uint64_t destMac, unsigned int etherType, unsigned int vlanId, const void frameData, unsigned int frameLength, volatile int64_t nextBackgroundTaskDeadline) |
enum ZT_ResultCode | ZT_Node_processBackgroundTasks(ZT_Node node, void tptr, int64_t now, volatile int64_t * nextBackgroundTaskDeadline) |
enum ZT_ResultCode | ZT_Node_join(ZT_Node node, uint64_t nwid, void uptr, void * tptr) |
enum ZT_ResultCode | ZT_Node_leave(ZT_Node node, uint64_t nwid, void ** uptr, void tptr) |
enum ZT_ResultCode | ZT_Node_multicastSubscribe(ZT_Node node, void tptr, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi) |
enum ZT_ResultCode | ZT_Node_multicastUnsubscribe(ZT_Node * node, uint64_t nwid, uint64_t multicastGroup, unsigned long multicastAdi) |
enum ZT_ResultCode | ZT_Node_orbit(ZT_Node node, void tptr, uint64_t moonWorldId, uint64_t moonSeed) |
enum ZT_ResultCode | ZT_Node_deorbit(ZT_Node node, void tptr, uint64_t moonWorldId) |
uint64_t | ZT_Node_address(ZT_Node * node) |
void | ZT_Node_status(ZT_Node node, ZT_NodeStatus status) |
ZT_PeerList * | ZT_Node_peers(ZT_Node * node) |
ZT_VirtualNetworkConfig * | ZT_Node_networkConfig(ZT_Node * node, uint64_t nwid) |
ZT_VirtualNetworkList * | ZT_Node_networks(ZT_Node * node) |
void | ZT_Node_freeQueryResult(ZT_Node node, void qr) |
int | ZT_Node_addLocalInterfaceAddress(ZT_Node node, const struct sockaddr_storage addr) |
void | ZT_Node_clearLocalInterfaceAddresses(ZT_Node * node) |
int | ZT_Node_sendUserMessage(ZT_Node node, void tptr, uint64_t dest, uint64_t typeId, const void * data, unsigned int len) |
void | ZT_Node_setNetconfMaster(ZT_Node node, void networkConfigMasterInstance) |
enum ZT_ResultCode | ZT_Node_setPhysicalPathConfiguration(ZT_Node node, const struct sockaddr_storage pathNetwork, const ZT_PhysicalPathConfiguration * pathConfig) |
void | ZT_version(int major, int minor, int * revision) |
#
Defines#
Types Documentation#
enum ZT_ResultCodeEnumerator | Value | Description |
---|---|---|
ZT_RESULT_OK | 0 | Operation completed normally |
ZT_RESULT_OK_IGNORED | 1 | Call produced no error but no action was taken |
ZT_RESULT_FATAL_ERROR_OUT_OF_MEMORY | 100 | Ran out of memory |
ZT_RESULT_FATAL_ERROR_DATA_STORE_FAILED | 101 | Data store is not writable or has failed |
ZT_RESULT_FATAL_ERROR_INTERNAL | 102 | Internal error (e.g. unexpected exception indicating bug or build problem) |
ZT_RESULT_ERROR_NETWORK_NOT_FOUND | 1000 | Network ID not valid |
ZT_RESULT_ERROR_UNSUPPORTED_OPERATION | 1001 | The requested operation is not supported on this version or build |
ZT_RESULT_ERROR_BAD_PARAMETER | 1002 | The requested operation was given a bad parameter or was called in an invalid state |
Function return code: OK (0) or error results
Use ZT_ResultCode_isFatal() to check for a fatal error. If a fatal error occurs, the node should be considered to not be working correctly. These indicate serious problems like an inaccessible data store or a compile problem.
#
enum ZT_MultipathBondingPolicyEnumerator | Value | Description |
---|---|---|
ZT_BONDING_POLICY_NONE | 0 | Normal operation. No fault tolerance, no load balancing |
ZT_BONDING_POLICY_ACTIVE_BACKUP | 1 | Sends traffic out on only one path at a time. Configurable immediate fail-over. |
ZT_BONDING_POLICY_BROADCAST | 2 | Sends traffic out on all paths |
ZT_BONDING_POLICY_BALANCE_RR | 3 | Stripes packets across all paths |
ZT_BONDING_POLICY_BALANCE_XOR | 4 | Packets destined for specific peers will always be sent over the same path. |
ZT_BONDING_POLICY_BALANCE_AWARE | 5 | Balances flows among all paths according to path performance |
Multipath bonding policy
#
enum ZT_MultipathLinkSelectMethodEnumerator | Value | Description |
---|---|---|
ZT_MULTIPATH_RESELECTION_POLICY_ALWAYS | 0 | Primary link regains status as active link whenever it comes back up (default when links are explicitly specified) |
ZT_MULTIPATH_RESELECTION_POLICY_BETTER | 1 | Primary link regains status as active link when it comes back up and (if) it is better than the currently-active link. |
ZT_MULTIPATH_RESELECTION_POLICY_FAILURE | 2 | Primary link regains status as active link only if the currently-active link fails. |
ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE | 3 | The primary link can change if a superior path is detected. (default if user provides no fail-over guidance) |
Multipath active re-selection policy (linkSelectMethod)
#
enum ZT_MultipathLinkModeEnumerator | Value | Description |
---|---|---|
ZT_MULTIPATH_SLAVE_MODE_PRIMARY | 0 | |
ZT_MULTIPATH_SLAVE_MODE_SPARE | 1 |
Mode of multipath link interface
#
enum ZT_MultipathMonitorStrategyEnumerator | Value | Description |
---|---|---|
ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DEFAULT | 0 | Use bonding policy's default strategy |
ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_PASSIVE | 1 | Does not actively send probes to judge aliveness, will rely on conventional traffic and summary statistics. |
ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_ACTIVE | 2 | Sends probes at a constant rate to judge aliveness. |
ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC | 3 | Sends probes at varying rates which correlate to native traffic loads to judge aliveness. |
Strategy for path monitoring
#
enum ZT_MultipathFlowRebalanceStrategyEnumerator | Value | Description |
---|---|---|
ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_PASSIVE | 0 | Flows will only be re-balanced among links during assignment or failover. This minimizes the possibility of sequence reordering and is thus the default setting. |
ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_OPPORTUNISTIC | 0 | Flows that are active may be re-assigned to a new more suitable link if it can be done without disrupting the flow. This setting can sometimes cause sequence re-ordering. |
ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_AGGRESSIVE | 2 | Flows will be continuously re-assigned the most suitable link in order to maximize "balance". This can often cause sequence reordering and is thus only reccomended for protocols like UDP. |
Strategy for re-balancing protocol flows
#
enum ZT_MultipathQualityWeightIndexEnumerator | Value | Description |
---|---|---|
ZT_QOS_LAT_IDX | ||
ZT_QOS_LTM_IDX | ||
ZT_QOS_PDV_IDX | ||
ZT_QOS_PLR_IDX | ||
ZT_QOS_PER_IDX | ||
ZT_QOS_THR_IDX | ||
ZT_QOS_THM_IDX | ||
ZT_QOS_THV_IDX | ||
ZT_QOS_AGE_IDX | ||
ZT_QOS_SCP_IDX | ||
ZT_QOS_WEIGHT_SIZE |
Indices for the path quality weight vector
#
enum ZT_EventEnumerator | Value | Description |
---|---|---|
ZT_EVENT_UP | 0 | Node has been initialized |
This is the first event generated, and is always sent. It may occur before Node's constructor returns.
Meta-data: none | | ZT_EVENT_OFFLINE | 1| Node is offline โ network does not seem to be reachable by any available strategy
Meta-data: none | | ZT_EVENT_ONLINE | 2| Node is online โ at least one upstream node appears reachable
Meta-data: none | | ZT_EVENT_DOWN | 3| Node is shutting down
This is generated within Node's destructor when it is being shut down. It's done for convenience, since cleaning up other state in the event handler may appear more idiomatic.
Meta-data: none | | ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION | 4| Your identity has collided with another node's ZeroTier address
This happens if two different public keys both hash (via the algorithm in Identity::generate()) to the same 40-bit ZeroTier address.
This is something you should "never" see, where "never" is defined as once per 2^39 new node initializations / identity creations. If you do see it, you're going to see it very soon after a node is first initialized.
This is reported as an event rather than a return code since it's detected asynchronously via error messages from authoritative nodes.
If this occurs, you must shut down and delete the node, delete the identity.secret record/file from the data store, and restart to generate a new identity. If you don't do this, you will not be able to communicate with other nodes.
We'd automate this process, but we don't think silently deleting private keys or changing our address without telling the calling code is good form. It violates the principle of least surprise.
You can technically get away with not handling this, but we recommend doing so in a mature reliable application. Besides, handling this condition is a good way to make sure it never arises. It's like how umbrellas prevent rain and smoke detectors prevent fires. They do, right?
Meta-data: none | | ZT_EVENT_TRACE | 5| Trace (debugging) message
These events are only generated if this is a TRACE-enabled build.
Meta-data: C string, TRACE message | | ZT_EVENT_USER_MESSAGE | 6| VERB_USER_MESSAGE received
These are generated when a VERB_USER_MESSAGE packet is received via ZeroTier VL1.
Meta-data: ZT_UserMessage structure | | ZT_EVENT_REMOTE_TRACE | 7| Remote trace received
These are generated when a VERB_REMOTE_TRACE is received. Note that any node can fling one of these at us. It is your responsibility to filter and determine if it's worth paying attention to. If it's not just drop it. Most nodes that are not active controllers ignore these, and controllers only save them if they pertain to networks with remote tracing enabled.
Meta-data: ZT_RemoteTrace structure |
Status codes sent to status update callback when things happen
#
enum ZT_VirtualNetworkStatusEnumerator | Value | Description |
---|---|---|
ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION | 0 | Waiting for network configuration (also means revision == 0) |
ZT_NETWORK_STATUS_OK | 1 | Configuration received and we are authorized |
ZT_NETWORK_STATUS_ACCESS_DENIED | 2 | Netconf master told us 'nope' |
ZT_NETWORK_STATUS_NOT_FOUND | 3 | Netconf master exists, but this virtual network does not |
ZT_NETWORK_STATUS_PORT_ERROR | 4 | Initialization of network failed or other internal error |
ZT_NETWORK_STATUS_CLIENT_TOO_OLD | 5 | ZeroTier core version too old |
Virtual network status codes
#
enum ZT_VirtualNetworkTypeEnumerator | Value | Description |
---|---|---|
ZT_NETWORK_TYPE_PRIVATE | 0 | Private networks are authorized via certificates of membership |
ZT_NETWORK_TYPE_PUBLIC | 1 | Public networks have no access control โ they'll always be AUTHORIZED |
Virtual network type codes
#
enum ZT_VirtualNetworkRuleTypeEnumerator | Value | Description |
---|---|---|
ZT_NETWORK_RULE_ACTION_DROP | 0 | Drop frame |
ZT_NETWORK_RULE_ACTION_ACCEPT | 1 | Accept and pass frame |
ZT_NETWORK_RULE_ACTION_TEE | 2 | Forward a copy of this frame to an observer (by ZT address) |
ZT_NETWORK_RULE_ACTION_WATCH | 3 | Exactly like TEE but mandates ACKs from observer |
ZT_NETWORK_RULE_ACTION_REDIRECT | 4 | Drop and redirect this frame to another node (by ZT address) |
ZT_NETWORK_RULE_ACTION_BREAK | 5 | Stop evaluating rule set (drops unless there are capabilities, etc.) |
ZT_NETWORK_RULE_ACTION_PRIORITY | 6 | Place a matching frame in the specified QoS bucket |
ZT_NETWORK_RULE_ACTION__MAX_ID | 15 | Maximum ID for an ACTION, anything higher is a MATCH |
ZT_NETWORK_RULE_MATCH_SOURCE_ZEROTIER_ADDRESS | 24 | |
ZT_NETWORK_RULE_MATCH_DEST_ZEROTIER_ADDRESS | 25 | |
ZT_NETWORK_RULE_MATCH_VLAN_ID | 26 | |
ZT_NETWORK_RULE_MATCH_VLAN_PCP | 27 | |
ZT_NETWORK_RULE_MATCH_VLAN_DEI | 28 | |
ZT_NETWORK_RULE_MATCH_MAC_SOURCE | 29 | |
ZT_NETWORK_RULE_MATCH_MAC_DEST | 30 | |
ZT_NETWORK_RULE_MATCH_IPV4_SOURCE | 31 | |
ZT_NETWORK_RULE_MATCH_IPV4_DEST | 32 | |
ZT_NETWORK_RULE_MATCH_IPV6_SOURCE | 33 | |
ZT_NETWORK_RULE_MATCH_IPV6_DEST | 34 | |
ZT_NETWORK_RULE_MATCH_IP_TOS | 35 | |
ZT_NETWORK_RULE_MATCH_IP_PROTOCOL | 36 | |
ZT_NETWORK_RULE_MATCH_ETHERTYPE | 37 | |
ZT_NETWORK_RULE_MATCH_ICMP | 38 | |
ZT_NETWORK_RULE_MATCH_IP_SOURCE_PORT_RANGE | 39 | |
ZT_NETWORK_RULE_MATCH_IP_DEST_PORT_RANGE | 40 | |
ZT_NETWORK_RULE_MATCH_CHARACTERISTICS | 41 | |
ZT_NETWORK_RULE_MATCH_FRAME_SIZE_RANGE | 42 | |
ZT_NETWORK_RULE_MATCH_RANDOM | 43 | |
ZT_NETWORK_RULE_MATCH_TAGS_DIFFERENCE | 44 | |
ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_AND | 45 | |
ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_OR | 46 | |
ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_XOR | 47 | |
ZT_NETWORK_RULE_MATCH_TAGS_EQUAL | 48 | |
ZT_NETWORK_RULE_MATCH_TAG_SENDER | 49 | |
ZT_NETWORK_RULE_MATCH_TAG_RECEIVER | 50 | |
ZT_NETWORK_RULE_MATCH_INTEGER_RANGE | 51 | |
ZT_NETWORK_RULE_MATCH__MAX_ID | 63 | Maximum ID allowed for a MATCH entry in the rules table |
The type of a virtual network rules table entry
These must be from 0 to 63 since the most significant two bits of each rule type are NOT (MSB) and AND/OR.
Each rule is composed of zero or more MATCHes followed by an ACTION. An ACTION with no MATCHes is always taken.
#
enum ZT_VirtualNetworkConfigOperationEnumerator | Value | Description |
---|---|---|
ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP | 1 | Network is coming up (either for the first time or after service restart) |
ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE | 2 | Network configuration has been updated |
ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN | 3 | Network is going down (not permanently) |
ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY | 4 | Network is going down permanently (leave/delete) |
Virtual network configuration update type
#
enum ZT_PeerRoleEnumerator | Value | Description |
---|---|---|
ZT_PEER_ROLE_LEAF | 0 | |
ZT_PEER_ROLE_MOON | 1 | |
ZT_PEER_ROLE_PLANET | 2 |
What trust hierarchy role does this peer have?
#
enum ZT_VendorEnumerator | Value | Description |
---|---|---|
ZT_VENDOR_UNSPECIFIED | 0 | |
ZT_VENDOR_ZEROTIER | 1 |
Vendor ID
#
enum ZT_PlatformEnumerator | Value | Description |
---|---|---|
ZT_PLATFORM_UNSPECIFIED | 0 | |
ZT_PLATFORM_LINUX | 1 | |
ZT_PLATFORM_WINDOWS | 2 | |
ZT_PLATFORM_MACOS | 3 | |
ZT_PLATFORM_ANDROID | 4 | |
ZT_PLATFORM_IOS | 5 | |
ZT_PLATFORM_SOLARIS_SMARTOS | 6 | |
ZT_PLATFORM_FREEBSD | 7 | |
ZT_PLATFORM_NETBSD | 8 | |
ZT_PLATFORM_OPENBSD | 9 | |
ZT_PLATFORM_RISCOS | 10 | |
ZT_PLATFORM_VXWORKS | 11 | |
ZT_PLATFORM_FREERTOS | 12 | |
ZT_PLATFORM_SYSBIOS | 13 | |
ZT_PLATFORM_HURD | 14 | |
ZT_PLATFORM_WEB | 15 |
Platform type
#
enum ZT_ArchitectureEnumerator | Value | Description |
---|---|---|
ZT_ARCHITECTURE_UNSPECIFIED | 0 | |
ZT_ARCHITECTURE_X86 | 1 | |
ZT_ARCHITECTURE_X64 | 2 | |
ZT_ARCHITECTURE_ARM32 | 3 | |
ZT_ARCHITECTURE_ARM64 | 4 | |
ZT_ARCHITECTURE_MIPS32 | 5 | |
ZT_ARCHITECTURE_MIPS64 | 6 | |
ZT_ARCHITECTURE_POWER32 | 7 | |
ZT_ARCHITECTURE_POWER64 | 8 | |
ZT_ARCHITECTURE_OPENRISC32 | 9 | |
ZT_ARCHITECTURE_OPENRISC64 | 10 | |
ZT_ARCHITECTURE_SPARC32 | 11 | |
ZT_ARCHITECTURE_SPARC64 | 12 | |
ZT_ARCHITECTURE_DOTNET_CLR | 13 | |
ZT_ARCHITECTURE_JAVA_JVM | 14 | |
ZT_ARCHITECTURE_WEB | 15 | |
ZT_ARCHITECTURE_S390X | 16 |
Architecture type
#
enum ZT_StateObjectTypeEnumerator | Value | Description |
---|---|---|
ZT_STATE_OBJECT_NULL | 0 | Null object โ ignored |
ZT_STATE_OBJECT_IDENTITY_PUBLIC | 1 | Public address and public key |
Object ID: this node's address if known, or 0 if unknown (first query) Canonical path: $HOME/identity.public Persistence: required | | ZT_STATE_OBJECT_IDENTITY_SECRET | 2| Full identity with secret key
Object ID: this node's address if known, or 0 if unknown (first query) Canonical path: $HOME/identity.secret Persistence: required, should be stored with restricted permissions e.g. mode 0600 on *nix | | ZT_STATE_OBJECT_PLANET | 3| The planet (there is only one per... well... planet!)
Object ID: world ID of planet, or 0 if unknown (first query) Canonical path: $HOME/planet Persistence: recommended | | ZT_STATE_OBJECT_MOON | 4| A moon (federated root set)
Object ID: world ID of moon Canonical path: $HOME/moons.d/$ID.moon (16-digit hex ID) Persistence: required if moon memberships should persist | | ZT_STATE_OBJECT_PEER | 5| Peer and related state
Object ID: peer address Canonical path: $HOME/peers.d/$ID (10-digit address Persistence: optional, can be cleared at any time | | ZT_STATE_OBJECT_NETWORK_CONFIG | 6| Network configuration
Object ID: peer address Canonical path: $HOME/networks.d/$NETWORKID.conf (16-digit hex ID) Persistence: required if network memberships should persist |
ZeroTier core state objects
#
typedef ZT_NodeAn instance of a ZeroTier One node (opaque)
#
typedef ZT_VirtualNetworkConfigFunctionCallback called to update virtual network port configuration
This can be called at any time to update the configuration of a virtual network port. The parameter after the network ID specifies whether this port is being brought up, updated, brought down, or permanently deleted.
This in turn should be used by the underlying implementation to create and configure tap devices at the OS (or virtual network stack) layer.
The supplied config pointer is not guaranteed to remain valid, so make a copy if you want one.
This should not call multicastSubscribe() or other network-modifying methods, as this could cause a deadlock in multithreaded or interrupt driven environments.
This must return 0 on success. It can return any OS-dependent error code on failure, and this results in the network being placed into the PORT_ERROR state.
#
typedef ZT_VirtualNetworkFrameFunctionFunction to send a frame out to a virtual network port
Parameters: (1) node, (2) user ptr, (3) network ID, (4) source MAC, (5) destination MAC, (6) ethertype, (7) VLAN ID, (8) frame data, (9) frame length.
#
typedef ZT_EventCallbackCallback for events
Events are generated when the node's status changes in a significant way and on certain non-fatal errors and events of interest. The final void parameter points to event meta-data. The type of event meta-data (and whether it is present at all) is event type dependent. See the comments in the definition of ZT_Event.
#
typedef ZT_StatePutFunctionCallback for storing and/or publishing state information
See ZT_StateObjectType docs for information about each state object type and when and if it needs to be persisted.
An object of length -1 is sent to indicate that an object should be deleted.
#
typedef ZT_StateGetFunctionCallback for retrieving stored state information
This function should return the number of bytes actually stored to the buffer or -1 if the state object was not found or the buffer was too small to store it.
#
typedef ZT_WirePacketSendFunctionFunction to send a ZeroTier packet out over the physical wire (L2/L3)
Parameters: (1) Node (2) User pointer (3) Local socket or -1 for "all" or "any" (4) Remote address (5) Packet data (6) Packet length (7) Desired IP TTL or 0 to use default
If there is only one local socket, the local socket can be ignored. If the local socket is -1, the packet should be sent out from all bound local sockets or a random bound local socket.
If TTL is nonzero, packets should have their IP TTL value set to this value if possible. If this is not possible it is acceptable to ignore this value and send anyway with normal or default TTL.
The function must return zero on success and may return any error code on failure. Note that success does not (of course) guarantee packet delivery. It only means that the packet appears to have been sent.
#
typedef ZT_PathCheckFunctionFunction to check whether a path should be used for ZeroTier traffic
Parameters: (1) Node (2) User pointer (3) ZeroTier address or 0 for none/any (4) Local socket or -1 if unknown (5) Remote address
This function must return nonzero (true) if the path should be used.
If no path check function is specified, ZeroTier will still exclude paths that overlap with ZeroTier-assigned and managed IP address blocks. But the use of a path check function is recommended to ensure that recursion does not occur in cases where addresses are assigned by the OS or managed by an out of band mechanism like DHCP. The path check function should examine all configured ZeroTier interfaces and check to ensure that the supplied addresses will not result in ZeroTier traffic being sent over a ZeroTier interface (recursion).
#
typedef ZT_PathLookupFunctionFunction to get physical addresses for ZeroTier peers
Parameters: (1) Node (2) User pointer (3) ZeroTier address (least significant 40 bits) (4) Desired address family or -1 for any (5) Buffer to fill with result
If provided this function will be occasionally called to get physical addresses that might be tried to reach a ZeroTier address. It must return a nonzero (true) value if the result buffer has been filled with an address.
#
Functions Documentation#
function ZT_Node_newParameters:
- node Result: pointer is set to new node instance on success
- uptr User pointer to pass to functions/callbacks
- tptr Thread pointer to pass to functions/callbacks resulting from this call
- callbacks Callback function configuration
- now Current clock in milliseconds
Return: OK (0) or error code if a fatal error condition has occurred
Create a new ZeroTier node
This will attempt to load its identity via the state get function in the callback struct. If that fails it will generate a new identity and store it. Identity generation can take anywhere from a few hundred milliseconds to a few seconds depending on your CPU speed.
#
function ZT_Node_deleteParameters:
- node Node to delete
Delete a node and free all resources it consumes
If you are using multiple threads, all other threads must be shut down first. This can crash if processXXX() methods are in progress.
#
function ZT_Node_processWirePacketParameters:
- node Node instance
- tptr Thread pointer to pass to functions/callbacks resulting from this call
- now Current clock in milliseconds
- localSocket Local socket (you can use 0 if only one local socket is bound and ignore this)
- remoteAddress Origin of packet
- packetData Packet data
- packetLength Packet length
- nextBackgroundTaskDeadline Value/result: set to deadline for next call to processBackgroundTasks()
Return: OK (0) or error code if a fatal error condition has occurred
Process a packet received from the physical wire
#
function ZT_Node_processVirtualNetworkFrameParameters:
- node Node instance
- tptr Thread pointer to pass to functions/callbacks resulting from this call
- now Current clock in milliseconds
- nwid ZeroTier 64-bit virtual network ID
- sourceMac Source MAC address (least significant 48 bits)
- destMac Destination MAC address (least significant 48 bits)
- etherType 16-bit Ethernet frame type
- vlanId 10-bit VLAN ID or 0 if none
- frameData Frame payload data
- frameLength Frame payload length
- nextBackgroundTaskDeadline Value/result: set to deadline for next call to processBackgroundTasks()
Return: OK (0) or error code if a fatal error condition has occurred
Process a frame from a virtual network port (tap)
#
function ZT_Node_processBackgroundTasksParameters:
- node Node instance
- tptr Thread pointer to pass to functions/callbacks resulting from this call
- now Current clock in milliseconds
- nextBackgroundTaskDeadline Value/result: set to deadline for next call to processBackgroundTasks()
Return: OK (0) or error code if a fatal error condition has occurred
Perform periodic background operations
#
function ZT_Node_joinParameters:
- node Node instance
- nwid 64-bit ZeroTier network ID
- uptr An arbitrary pointer to associate with this network (default: NULL)
Return: OK (0) or error code if a fatal error condition has occurred
Join a network
This may generate calls to the port config callback before it returns, or these may be differed if a netconf is not available yet.
If we are already a member of the network, nothing is done and OK is returned.
#
function ZT_Node_leaveParameters:
- node Node instance
- nwid 64-bit network ID
- uptr Target pointer is set to uptr (if not NULL)
Return: OK (0) or error code if a fatal error condition has occurred
Leave a network
If a port has been configured for this network this will generate a call to the port config callback with a NULL second parameter to indicate that the port is now deleted.
The uptr parameter is optional and is NULL by default. If it is not NULL, the pointer it points to is set to this network's uptr on success.
#
function ZT_Node_multicastSubscribeParameters:
- node Node instance
- tptr Thread pointer to pass to functions/callbacks resulting from this call
- nwid 64-bit network ID
- multicastGroup Ethernet multicast or broadcast MAC (least significant 48 bits)
- multicastAdi Multicast ADI (least significant 32 bits only, use 0 if not needed)
Return: OK (0) or error code if a fatal error condition has occurred
Subscribe to an Ethernet multicast group
ADI stands for additional distinguishing information. This defaults to zero and is rarely used. Right now its only use is to enable IPv4 ARP to scale, and this must be done.
For IPv4 ARP, the implementation must subscribe to 0xffffffffffff (the broadcast address) but with an ADI equal to each IPv4 address in host byte order. This converts ARP from a non-scalable broadcast protocol to a scalable multicast protocol with perfect address specificity.
If this is not done, ARP will not work reliably.
Multiple calls to subscribe to the same multicast address will have no effect. It is perfectly safe to do this.
This does not generate an update call to networkConfigCallback().
#
function ZT_Node_multicastUnsubscribeParameters:
- node Node instance
- nwid 64-bit network ID
- multicastGroup Ethernet multicast or broadcast MAC (least significant 48 bits)
- multicastAdi Multicast ADI (least significant 32 bits only, use 0 if not needed)
Return: OK (0) or error code if a fatal error condition has occurred
Unsubscribe from an Ethernet multicast group (or all groups)
If multicastGroup is zero (0), this will unsubscribe from all groups. If you are not subscribed to a group this has no effect.
This does not generate an update call to networkConfigCallback().
#
function ZT_Node_orbitParameters:
- node Node instance
- tptr Thread pointer to pass to functions/callbacks resulting from this call
- moonWorldId Moon's world ID
- moonSeed If non-zero, the ZeroTier address of any member of the moon to query for moon definition
- len Length of moonWorld in bytes
Return: Error if moon was invalid or failed to be added
Add or update a moon
Moons are persisted in the data store in moons.d/, so this can persist across invocations if the contents of moon.d are scanned and orbit is called for each on startup.
#
function ZT_Node_deorbitParameters:
- node Node instance
- tptr Thread pointer to pass to functions/callbacks resulting from this call
- moonWorldId World ID of moon to remove
Return: Error if anything bad happened
Remove a moon (does nothing if not present)
#
function ZT_Node_addressParameters:
- node Node instance
Return: ZeroTier address (least significant 40 bits of 64-bit int)
Get this node's 40-bit ZeroTier address
#
function ZT_Node_statusParameters:
- node Node instance
- status Buffer to fill with current node status
Get the status of this node
#
function ZT_Node_peersParameters:
- node Node instance
Return: List of known peers or NULL on failure
Get a list of known peer nodes
The pointer returned here must be freed with freeQueryResult() when you are done with it.
#
function ZT_Node_networkConfigParameters:
- node Node instance
- nwid 64-bit network ID
Return: Network configuration or NULL if we are not a member of this network
Get the status of a virtual network
The pointer returned here must be freed with freeQueryResult() when you are done with it.
#
function ZT_Node_networksParameters:
- node Node instance
Return: List of networks or NULL on failure
Enumerate and get status of all networks
#
function ZT_Node_freeQueryResultParameters:
- node Node instance
- qr Query result buffer
Free a query result buffer
Use this to free the return values of listNetworks(), listPeers(), etc.
#
function ZT_Node_addLocalInterfaceAddressParameters:
- addr Local interface address
Return: Boolean: non-zero if address was accepted and added
Add a local interface address
This is used to make ZeroTier aware of those local interface addresses that you wish to use for ZeroTier communication. This is optional, and if it is not used ZeroTier will rely upon upstream peers (and roots) to perform empirical address discovery and NAT traversal. But the use of this method is recommended as it improves peer discovery when both peers are on the same LAN.
It is the responsibility of the caller to take care that these are never ZeroTier interface addresses, whether these are assigned by ZeroTier or are otherwise assigned to an interface managed by this ZeroTier instance. This can cause recursion or other undesirable behavior.
This returns a boolean indicating whether or not the address was accepted. ZeroTier will only communicate over certain address types and (for IP) address classes.
#
function ZT_Node_clearLocalInterfaceAddressesClear local interface addresses
#
function ZT_Node_sendUserMessageParameters:
- node Node instance
- tptr Thread pointer to pass to functions/callbacks resulting from this call
- dest Destination ZeroTier address
- typeId VERB_USER_MESSAGE type ID
- data Payload data to attach to user message
- len Length of data in bytes
Return: Boolean: non-zero on success, zero on failure
Send a VERB_USER_MESSAGE to another ZeroTier node
There is no delivery guarantee here. Failure can occur if the message is too large or if dest is not a valid ZeroTier address.
#
function ZT_Node_setNetconfMasterParameters:
- node ZertTier One node
- networkConfigMasterInstance Instance of NetworkConfigMaster C++ class or NULL to disable
Return: OK (0) or error code if a fatal error condition has occurred
Set a network configuration master instance for this node
Normal nodes should not need to use this. This is for nodes with special compiled-in support for acting as network configuration masters / controllers.
The supplied instance must be a C++ object that inherits from the NetworkConfigMaster base class in node/. No type checking is performed, so a pointer to anything else will result in a crash.
#
function ZT_Node_setPhysicalPathConfigurationParameters:
- node Node instance
- pathNetwork Network/CIDR of path or NULL to clear the cache and reset all paths to default
- pathConfig Path configuration or NULL to erase this entry and therefore reset it to NULL
Return: OK or error code
Set configuration for a given physical path
#
function ZT_versionParameters:
- major Result: major version
- minor Result: minor version
- revision Result: revision
Get ZeroTier One version
#
Macro Documentation#
define ZT_SDK_API#
define ZT_DEFAULT_PORTDefault UDP port for devices running a ZeroTier endpoint
#
define ZT_MIN_MTUMinimum MTU, which is the minimum allowed by IPv6 and several specs
#
define ZT_MAX_MTUMaximum MTU for ZeroTier virtual networks
#
define ZT_MIN_PHYSMTUMinimum UDP payload size allowed
#
define ZT_DEFAULT_PHYSMTUDefault UDP payload size (physical path MTU) not including UDP and IP overhead
This is small enough for PPPoE and for Google Cloud's bizarrely tiny MTUs. A 2800 byte payload still fits into two packets, so this should not impact real world throughput at all vs the previous default of 1444.
#
define ZT_MAX_PHYSPAYLOADMaximum physical UDP payload
#
define ZT_MAX_HEADROOMHeadroom for max physical MTU
#
define ZT_MAX_PHYSMTUMaximum payload MTU for UDP packets
#
define ZT_MAX_REMOTE_TRACE_SIZEMaximum size of a remote trace message's serialized Dictionary
#
define ZT_MAX_NETWORK_SHORT_NAME_LENGTHMaximum length of network short name
#
define ZT_MAX_NETWORK_ROUTESMaximum number of pushed routes on a network
#
define ZT_MAX_ZT_ASSIGNED_ADDRESSESMaximum number of statically assigned IP addresses per network endpoint using ZT address management (not DHCP)
#
define ZT_MAX_NETWORK_SPECIALISTSMaximum number of "specialists" on a network โ bridges, relays, etc.
#
define ZT_MAX_NETWORK_MULTICAST_SUBSCRIPTIONSMaximum number of multicast group subscriptions per network
#
define ZT_RULES_ENGINE_REVISIONRules engine revision ID, which specifies rules engine capabilities
#
define ZT_MAX_NETWORK_RULESMaximum number of base (non-capability) network rules
#
define ZT_MAX_NETWORK_CAPABILITIESMaximum number of per-member capabilities per network
#
define ZT_MAX_NETWORK_TAGSMaximum number of per-member tags per network
#
define ZT_MAX_PEER_NETWORK_PATHSMaximum number of direct network paths to a given peer
#
define ZT_MAX_CONFIGURABLE_PATHSMaximum number of path configurations that can be set
#
define ZT_MAX_CAPABILITY_RULESMaximum number of rules per capability
#
define ZT_MAX_CERTIFICATES_OF_OWNERSHIPMaximum number of certificates of ownership to assign to a single network member
#
define ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTHGlobal maximum length for capability chain of custody (including initial issue)
#
define ZT_MAX_MULTICAST_SUBSCRIPTIONSMaximum number of multicast groups a device / network interface can be subscribed to at once
#
define ZT_PATH_LINK_QUALITY_MAXMaximum value for link quality (min is 0)
#
define ZT_MAX_DNS_SERVERSMaximum number of DNS servers per domain
#
define ZT_RULE_PACKET_CHARACTERISTICS_INBOUNDPacket characteristics flag: packet direction, 1 if inbound 0 if outbound
#
define ZT_RULE_PACKET_CHARACTERISTICS_MULTICASTPacket characteristics flag: multicast or broadcast destination MAC
#
define ZT_RULE_PACKET_CHARACTERISTICS_BROADCASTPacket characteristics flag: broadcast destination MAC
#
define ZT_RULE_PACKET_CHARACTERISTICS_SENDER_IP_AUTHENTICATEDPacket characteristics flag: sending IP address has a certificate of ownership
#
define ZT_RULE_PACKET_CHARACTERISTICS_SENDER_MAC_AUTHENTICATEDPacket characteristics flag: sending MAC address has a certificate of ownership
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_RESERVED_0Packet characteristics flag: TCP left-most reserved bit
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_RESERVED_1Packet characteristics flag: TCP middle reserved bit
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_RESERVED_2Packet characteristics flag: TCP right-most reserved bit
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_NSPacket characteristics flag: TCP NS flag
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_CWRPacket characteristics flag: TCP CWR flag
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_ECEPacket characteristics flag: TCP ECE flag
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_URGPacket characteristics flag: TCP URG flag
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_ACKPacket characteristics flag: TCP ACK flag
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_PSHPacket characteristics flag: TCP PSH flag
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_RSTPacket characteristics flag: TCP RST flag
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_SYNPacket characteristics flag: TCP SYN flag
#
define ZT_RULE_PACKET_CHARACTERISTICS_TCP_FINPacket characteristics flag: TCP FIN flag
#
define ZT_REMOTE_TRACE_FIELD__EVENT#
define ZT_REMOTE_TRACE_FIELD__NODE_ID#
define ZT_REMOTE_TRACE_FIELD__PACKET_ID#
define ZT_REMOTE_TRACE_FIELD__PACKET_VERB#
define ZT_REMOTE_TRACE_FIELD__PACKET_TRUSTED_PATH_ID#
define ZT_REMOTE_TRACE_FIELD__PACKET_TRUSTED_PATH_APPROVED#
define ZT_REMOTE_TRACE_FIELD__PACKET_HOPS#
define ZT_REMOTE_TRACE_FIELD__REMOTE_ZTADDR#
define ZT_REMOTE_TRACE_FIELD__REMOTE_PHYADDR#
define ZT_REMOTE_TRACE_FIELD__LOCAL_ZTADDR#
define ZT_REMOTE_TRACE_FIELD__LOCAL_PHYADDR#
define ZT_REMOTE_TRACE_FIELD__LOCAL_SOCKET#
define ZT_REMOTE_TRACE_FIELD__IP_SCOPE#
define ZT_REMOTE_TRACE_FIELD__NETWORK_ID#
define ZT_REMOTE_TRACE_FIELD__SOURCE_ZTADDR#
define ZT_REMOTE_TRACE_FIELD__DEST_ZTADDR#
define ZT_REMOTE_TRACE_FIELD__SOURCE_MAC#
define ZT_REMOTE_TRACE_FIELD__DEST_MAC#
define ZT_REMOTE_TRACE_FIELD__ETHERTYPE#
define ZT_REMOTE_TRACE_FIELD__VLAN_ID#
define ZT_REMOTE_TRACE_FIELD__FRAME_LENGTH#
define ZT_REMOTE_TRACE_FIELD__FRAME_DATA#
define ZT_REMOTE_TRACE_FIELD__FILTER_FLAG_NOTEE#
define ZT_REMOTE_TRACE_FIELD__FILTER_FLAG_INBOUND#
define ZT_REMOTE_TRACE_FIELD__FILTER_RESULT#
define ZT_REMOTE_TRACE_FIELD__FILTER_BASE_RULE_LOG#
define ZT_REMOTE_TRACE_FIELD__FILTER_CAP_RULE_LOG#
define ZT_REMOTE_TRACE_FIELD__FILTER_CAP_ID#
define ZT_REMOTE_TRACE_FIELD__CREDENTIAL_TYPE#
define ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ID#
define ZT_REMOTE_TRACE_FIELD__CREDENTIAL_TIMESTAMP#
define ZT_REMOTE_TRACE_FIELD__CREDENTIAL_INFO#
define ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ISSUED_TO#
define ZT_REMOTE_TRACE_FIELD__CREDENTIAL_REVOCATION_TARGET#
define ZT_REMOTE_TRACE_FIELD__REASON#
define ZT_REMOTE_TRACE_FIELD__NETWORK_CONTROLLER_ID#
define ZT_REMOTE_TRACE_EVENT__RESETTING_PATHS_IN_SCOPE#
define ZT_REMOTE_TRACE_EVENT__PEER_CONFIRMING_UNKNOWN_PATH#
define ZT_REMOTE_TRACE_EVENT__PEER_LEARNED_NEW_PATH#
define ZT_REMOTE_TRACE_EVENT__PEER_REDIRECTED#
define ZT_REMOTE_TRACE_EVENT__PACKET_MAC_FAILURE#
define ZT_REMOTE_TRACE_EVENT__PACKET_INVALID#
define ZT_REMOTE_TRACE_EVENT__DROPPED_HELLO#
define ZT_REMOTE_TRACE_EVENT__OUTGOING_NETWORK_FRAME_DROPPED#
define ZT_REMOTE_TRACE_EVENT__INCOMING_NETWORK_ACCESS_DENIED#
define ZT_REMOTE_TRACE_EVENT__INCOMING_NETWORK_FRAME_DROPPED#
define ZT_REMOTE_TRACE_EVENT__CREDENTIAL_REJECTED#
define ZT_REMOTE_TRACE_EVENT__CREDENTIAL_ACCEPTED#
define ZT_REMOTE_TRACE_EVENT__NETWORK_CONFIG_REQUEST_SENT#
define ZT_REMOTE_TRACE_EVENT__NETWORK_FILTER_TRACE#
define ZT_REMOTE_TRACE_EVENT__RESETTING_PATHS_IN_SCOPE_S#
define ZT_REMOTE_TRACE_EVENT__PEER_CONFIRMING_UNKNOWN_PATH_S#
define ZT_REMOTE_TRACE_EVENT__PEER_LEARNED_NEW_PATH_S#
define ZT_REMOTE_TRACE_EVENT__PEER_REDIRECTED_S#
define ZT_REMOTE_TRACE_EVENT__PACKET_MAC_FAILURE_S#
define ZT_REMOTE_TRACE_EVENT__PACKET_INVALID_S#
define ZT_REMOTE_TRACE_EVENT__DROPPED_HELLO_S#
define ZT_REMOTE_TRACE_EVENT__OUTGOING_NETWORK_FRAME_DROPPED_S#
define ZT_REMOTE_TRACE_EVENT__INCOMING_NETWORK_ACCESS_DENIED_S#
define ZT_REMOTE_TRACE_EVENT__INCOMING_NETWORK_FRAME_DROPPED_S#
define ZT_REMOTE_TRACE_EVENT__CREDENTIAL_REJECTED_S#
define ZT_REMOTE_TRACE_EVENT__CREDENTIAL_ACCEPTED_S#
define ZT_REMOTE_TRACE_EVENT__NETWORK_CONFIG_REQUEST_SENT_S#
define ZT_REMOTE_TRACE_EVENT__NETWORK_FILTER_TRACE_S#
define ZT_ResultCode_isFatalParameters:
- x Result code
Return: True if result code indicates a fatal error
#
Source codeUpdated on 17 May 2023 at 15:23:24 UTC