|
@@ -133,6 +133,11 @@ extern "C" {
|
|
|
*/
|
|
|
#define ZT_CLUSTER_MAX_MEMBERS 128
|
|
|
|
|
|
+/**
|
|
|
+ * Maximum number of physical ZeroTier addresses a cluster member can report
|
|
|
+ */
|
|
|
+#define ZT_CLUSTER_MAX_ZT_PHYSICAL_ADDRESSES 16
|
|
|
+
|
|
|
/**
|
|
|
* Maximum allowed cluster message length in bytes
|
|
|
*/
|
|
@@ -879,6 +884,78 @@ typedef struct {
|
|
|
unsigned int nextHopCount;
|
|
|
} ZT_CircuitTestReport;
|
|
|
|
|
|
+/**
|
|
|
+ * A cluster member's status
|
|
|
+ */
|
|
|
+typedef struct {
|
|
|
+ /**
|
|
|
+ * This cluster member's ID (from 0 to 1-ZT_CLUSTER_MAX_MEMBERS)
|
|
|
+ */
|
|
|
+ unsigned int id;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Number of milliseconds since last 'alive' heartbeat message received via cluster backplane address
|
|
|
+ */
|
|
|
+ unsigned int msSinceLastHeartbeat;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Non-zero if cluster member is alive
|
|
|
+ */
|
|
|
+ int alive;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * X, Y, and Z coordinates of this member (if specified, otherwise zero)
|
|
|
+ *
|
|
|
+ * What these mean depends on the location scheme being used for
|
|
|
+ * location-aware clustering. At present this is GeoIP and these
|
|
|
+ * will be the X, Y, and Z coordinates of the location on a spherical
|
|
|
+ * approximation of Earth where Earth's core is the origin (in km).
|
|
|
+ * They don't have to be perfect and need only be comparable with others
|
|
|
+ * to find shortest path via the standard vector distance formula.
|
|
|
+ */
|
|
|
+ int x,y,z;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Cluster member's last reported load
|
|
|
+ */
|
|
|
+ uint64_t load;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Number of peers this cluster member "has"
|
|
|
+ */
|
|
|
+ uint64_t peers;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Physical ZeroTier endpoints for this member (where peers are sent when directed here)
|
|
|
+ */
|
|
|
+ struct sockaddr_storage zeroTierPhysicalEndpoints[ZT_CLUSTER_MAX_ZT_PHYSICAL_ADDRESSES];
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Number of physical ZeroTier endpoints this member is announcing
|
|
|
+ */
|
|
|
+ unsigned int numZeroTierPhysicalEndpoints;
|
|
|
+} ZT_ClusterMemberStatus;
|
|
|
+
|
|
|
+/**
|
|
|
+ * ZeroTier cluster status
|
|
|
+ */
|
|
|
+typedef struct {
|
|
|
+ /**
|
|
|
+ * My cluster member ID (a record for 'self' is included in member[])
|
|
|
+ */
|
|
|
+ unsigned int myId;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Number of cluster members
|
|
|
+ */
|
|
|
+ unsigned int clusterSize;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Cluster member statuses
|
|
|
+ */
|
|
|
+ ZT_ClusterMemberStatus member[ZT_CLUSTER_MAX_MEMBERS];
|
|
|
+} ZT_ClusterStatus;
|
|
|
+
|
|
|
/**
|
|
|
* An instance of a ZeroTier One node (opaque)
|
|
|
*/
|