Add Ad-hoc network ID convenience function to control interface

This commit is contained in:
Joseph Henry
2020-04-17 11:37:46 -07:00
parent 9eefbd55d3
commit 907a2e8417
2 changed files with 32 additions and 0 deletions

View File

@@ -707,6 +707,31 @@ ZT_SOCKET_API int ZTCALL zts_get_6plane_addr(
ZT_SOCKET_API int ZTCALL zts_get_rfc4193_addr(
struct sockaddr_storage *addr, const uint64_t nwid, const uint64_t nodeId);
/**
* Ad-hoc Network:
*
* ffSSSSEEEE000000
* | | | |
* | | | Reserved for future use, must be 0
* | | End of port range (hex)
* | Start of port range (hex)
* Reserved ZeroTier address prefix indicating a controller-less network.
*
* Ad-hoc networks are public (no access control) networks that have no network controller. Instead
* their configuration and other credentials are generated locally. Ad-hoc networks permit only IPv6
* UDP and TCP unicast traffic (no multicast or broadcast) using 6plane format NDP-emulated IPv6
* addresses. In addition an ad-hoc network ID encodes an IP port range. UDP packets and TCP SYN
* (connection open) packets are only allowed to destination ports within the encoded range.
*
* For example ff00160016000000 is an ad-hoc network allowing only SSH, while ff0000ffff000000 is an
* ad-hoc network allowing any UDP or TCP port.
*
* Keep in mind that these networks are public and anyone in the entire world can join them. Care must
* be taken to avoid exposing vulnerable services or sharing unwanted files or other resources.
*
*/
uint64_t zts_generate_adhoc_nwid_from_range(uint16_t startPortOfRange, uint16_t endPortOfRange);
/**
* @brief Return the number of peers
*

View File

@@ -747,6 +747,13 @@ int zts_get_rfc4193_addr(struct sockaddr_storage *addr, const uint64_t nwid, con
memcpy(in6->sin6_addr.s6_addr, _rfc4193Addr.rawIpData(), sizeof(struct in6_addr));
}
uint64_t zts_generate_adhoc_nwid_from_range(uint16_t startPortOfRange, uint16_t endPortOfRange)
{
char nwidStr[INET6_ADDRSTRLEN];
sprintf(nwidStr, "ff%04x%04x000000", startPortOfRange, endPortOfRange);
return strtoull(nwidStr, NULL, 16);
}
//////////////////////////////////////////////////////////////////////////////
// Peers //
//////////////////////////////////////////////////////////////////////////////