using System.Runtime.InteropServices; public struct CallbackMessage { public int eventCode; /* Pointers to structures that contain details about the subject of the callback */ public System.IntPtr node; public System.IntPtr network; public System.IntPtr netif; public System.IntPtr route; public System.IntPtr path; public System.IntPtr peer; public System.IntPtr addr; } [StructLayout(LayoutKind.Sequential)] public struct SockAddrStorage { public byte Length; public byte Family; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] Data1; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public uint[] Data2; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public uint[] Data3; } [StructLayout(LayoutKind.Sequential)] public struct SockAddr { public ushort Family; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 14)] public byte[] Data; } [StructLayout(LayoutKind.Sequential)] public struct SockAddrIn { public byte Length; public byte Family; public ushort Port; public uint Addr; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] Zero; } public struct NodeDetails { /** * The node ID */ public ulong address; /** * The current clock value accord to the node */ public ulong clock; /** * Whether or not this node is online */ public bool online; /** * Whether port mapping is enabled */ public bool portMappingEnabled; /** * Whether multipath support is enabled. If true, this node will * be capable of utilizing multiple physical links simultaneosly * to create higher quality or more robust aggregate links. * * See: https://www.zerotier.com/manual.shtml#2_1_5 */ public bool multipathEnabled; /** * The port used by the service to send and receive * all encapsulated traffic */ public ushort primaryPort; /** * Planet ID */ public ulong planetWorldId; public ulong planetWorldTimestamp; public byte versionMajor; public byte versionMinor; public byte versionRev; }; struct AddrDetails { public ulong nwid; public SockAddrStorage addr; }; struct NetifDetails { /** * The virtual network that this interface was commissioned for. */ public ulong nwid; /** * The hardware address assigned to this interface */ public ulong mac; /** * The MTU for this interface */ public int mtu; }; struct RouteDetails { /** * Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default */ public System.IntPtr target; /** * Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway) */ public System.IntPtr via; /** * Route flags */ public ushort flags; /** * Route metric (not currently used) */ public ushort metric; }; struct NetworkDetails { /** * Network ID */ public ulong nwid; /** * Maximum Transmission Unit size for this network */ public int mtu; /** * Number of addresses (actually) assigned to the node on this network */ public short num_addresses; /** * Array of IPv4 and IPv6 addresses assigned to the node on this network */ [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)] public System.IntPtr[] addr; /** * Number of routes */ public uint num_routes; /** * Array of IPv4 and IPv6 addresses assigned to the node on this network */ [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32)] public System.IntPtr[] routes; }; struct PathDetails { /** * Address of endpoint */ public System.IntPtr address; /** * Time of last send in milliseconds or 0 for never */ public ulong lastSend; /** * Time of last receive in milliseconds or 0 for never */ public ulong lastReceive; /** * Is this a trusted path? If so this will be its nonzero ID. */ public ulong trustedPathId; /** * Is path expired? */ int expired; /** * Is path preferred? */ int preferred; }; struct PeerDetails { /** * ZeroTier address (40 bits) */ public ulong address; /** * Remote major version or -1 if not known */ int versionMajor; /** * Remote minor version or -1 if not known */ int versionMinor; /** * Remote revision or -1 if not known */ int versionRev; /** * Last measured latency in milliseconds or -1 if unknown */ int latency; /** * What trust hierarchy role does this device have? */ public int role; /** * Number of paths (size of paths[]) */ public uint pathCount; /** * Known network paths to peer */ [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)] public System.IntPtr[] paths; }; [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] public delegate void CSharpCallback(System.IntPtr msg);