|
@@ -93,15 +93,20 @@
|
|
|
#define ZT_NETWORKCONFIG_FLAG_DISABLE_COMPRESSION 0x0000000000000010ULL
|
|
|
|
|
|
/**
|
|
|
- * Device is an active bridge
|
|
|
+ * Device can bridge to other Ethernet networks and gets unknown recipient multicasts
|
|
|
*/
|
|
|
#define ZT_NETWORKCONFIG_SPECIALIST_TYPE_ACTIVE_BRIDGE 0x0000020000000000ULL
|
|
|
|
|
|
/**
|
|
|
- * Anchors are stable devices on this network that can cache multicast info, etc.
|
|
|
+ * Anchors are stable devices on this network that can act like roots when none are up
|
|
|
*/
|
|
|
#define ZT_NETWORKCONFIG_SPECIALIST_TYPE_ANCHOR 0x0000040000000000ULL
|
|
|
|
|
|
+/**
|
|
|
+ * Designated multicast replicators replicate multicast in place of sender-side replication
|
|
|
+ */
|
|
|
+#define ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR 0x0000080000000000ULL
|
|
|
+
|
|
|
namespace ZeroTier {
|
|
|
|
|
|
// Dictionary capacity needed for max size network config
|
|
@@ -312,16 +317,16 @@ public:
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param a Address to check
|
|
|
- * @return True if address is an anchor
|
|
|
+ * @return ZeroTier addresses of "anchor" devices on this network
|
|
|
*/
|
|
|
- inline bool isAnchor(const Address &a) const
|
|
|
+ inline std::vector<Address> multicastReplicators() const
|
|
|
{
|
|
|
+ std::vector<Address> r;
|
|
|
for(unsigned int i=0;i<specialistCount;++i) {
|
|
|
- if ((a == specialists[i])&&((specialists[i] & ZT_NETWORKCONFIG_SPECIALIST_TYPE_ANCHOR) != 0))
|
|
|
- return true;
|
|
|
+ if ((specialists[i] & ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR) != 0)
|
|
|
+ r.push_back(Address(specialists[i]));
|
|
|
}
|
|
|
- return false;
|
|
|
+ return r;
|
|
|
}
|
|
|
|
|
|
/**
|