5 changed files with 309 additions and 24 deletions
@ -0,0 +1,255 @@ |
|||||||
|
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); |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
/* libzt.i */ |
||||||
|
|
||||||
|
%begin |
||||||
|
%{ |
||||||
|
#define SWIG_PYTHON_CAST_MODE |
||||||
|
%} |
||||||
|
|
||||||
|
%include <stdint.i> |
||||||
|
|
||||||
|
#define PYTHON_BUILD 1 |
||||||
|
|
||||||
|
%module libzt |
||||||
|
%{ |
||||||
|
#include "../include/ZeroTier.h" |
||||||
|
#include "../include/ZeroTierConstants.h" |
||||||
|
%} |
||||||
|
|
||||||
|
%define %cs_callback(TYPE, CSTYPE) |
||||||
|
%typemap(ctype) TYPE, TYPE& "void *" |
||||||
|
%typemap(in) TYPE %{ $1 = ($1_type)$input; %} |
||||||
|
%typemap(in) TYPE& %{ $1 = ($1_type)&$input; %} |
||||||
|
%typemap(imtype, out="IntPtr") TYPE, TYPE& "CSTYPE" |
||||||
|
%typemap(cstype, out="IntPtr") TYPE, TYPE& "CSTYPE" |
||||||
|
%typemap(csin) TYPE, TYPE& "$csinput" |
||||||
|
%enddef |
||||||
|
|
||||||
|
%cs_callback(userCallbackFunc, CSharpCallback) |
||||||
|
|
||||||
|
%include "../include/ZeroTier.h" |
||||||
|
%include "../include/ZeroTierConstants.h" |
||||||
Loading…
Reference in new issue