mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-05-06 18:48:29 +00:00
Some work on IPv4 enabled ad-hoc networks.
This commit is contained in:
parent
574b24c082
commit
bbdb2aa672
@ -41,7 +41,6 @@ void DB::initNetwork(nlohmann::json &network)
|
|||||||
if (!network.count("tags")) network["tags"] = nlohmann::json::array();
|
if (!network.count("tags")) network["tags"] = nlohmann::json::array();
|
||||||
if (!network.count("routes")) network["routes"] = nlohmann::json::array();
|
if (!network.count("routes")) network["routes"] = nlohmann::json::array();
|
||||||
if (!network.count("ipAssignmentPools")) network["ipAssignmentPools"] = nlohmann::json::array();
|
if (!network.count("ipAssignmentPools")) network["ipAssignmentPools"] = nlohmann::json::array();
|
||||||
//if (!network.count("anchors")) network["anchors"] = nlohmann::json::array();
|
|
||||||
if (!network.count("mtu")) network["mtu"] = ZT_DEFAULT_MTU;
|
if (!network.count("mtu")) network["mtu"] = ZT_DEFAULT_MTU;
|
||||||
if (!network.count("remoteTraceTarget")) network["remoteTraceTarget"] = nlohmann::json();
|
if (!network.count("remoteTraceTarget")) network["remoteTraceTarget"] = nlohmann::json();
|
||||||
if (!network.count("removeTraceLevel")) network["remoteTraceLevel"] = 0;
|
if (!network.count("removeTraceLevel")) network["remoteTraceLevel"] = 0;
|
||||||
|
@ -1072,15 +1072,11 @@ void Network::requestConfiguration(void *tPtr)
|
|||||||
if (_destroyed)
|
if (_destroyed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* ZeroTier addresses can't begin with 0xff, so this is used to mark controllerless
|
|
||||||
* network IDs. Controllerless network IDs only support unicast IPv6 using the 6plane
|
|
||||||
* addressing scheme and have the following format: 0xffSSSSEEEE000000 where SSSS
|
|
||||||
* is the 16-bit starting IP port range allowed and EEEE is the 16-bit ending IP port
|
|
||||||
* range allowed. Remaining digits are reserved for future use and must be zero. */
|
|
||||||
if ((_id >> 56) == 0xff) {
|
if ((_id >> 56) == 0xff) {
|
||||||
|
if ((_id & 0xffffff) == 0) {
|
||||||
const uint16_t startPortRange = (uint16_t)((_id >> 40) & 0xffff);
|
const uint16_t startPortRange = (uint16_t)((_id >> 40) & 0xffff);
|
||||||
const uint16_t endPortRange = (uint16_t)((_id >> 24) & 0xffff);
|
const uint16_t endPortRange = (uint16_t)((_id >> 24) & 0xffff);
|
||||||
if (((_id & 0xffffff) == 0)&&(endPortRange >= startPortRange)) {
|
if (endPortRange >= startPortRange) {
|
||||||
NetworkConfig *const nconf = new NetworkConfig();
|
NetworkConfig *const nconf = new NetworkConfig();
|
||||||
|
|
||||||
nconf->networkId = _id;
|
nconf->networkId = _id;
|
||||||
@ -1147,6 +1143,56 @@ void Network::requestConfiguration(void *tPtr)
|
|||||||
} else {
|
} else {
|
||||||
this->setNotFound();
|
this->setNotFound();
|
||||||
}
|
}
|
||||||
|
} else if ((_id & 0xff) == 0x01) {
|
||||||
|
// ffAA__________01
|
||||||
|
const uint64_t myAddress = RR->identity.address().toInt();
|
||||||
|
uint8_t ipv4[4];
|
||||||
|
ipv4[0] = (uint8_t)((_id >> 48) & 0xff);
|
||||||
|
ipv4[1] = (uint8_t)((myAddress >> 16) & 0xff);
|
||||||
|
ipv4[2] = (uint8_t)((myAddress >> 8) & 0xff);
|
||||||
|
ipv4[3] = (uint8_t)(myAddress & 0xff);
|
||||||
|
|
||||||
|
char v4ascii[24];
|
||||||
|
Utils::decimal(ipv4[0],v4ascii);
|
||||||
|
|
||||||
|
NetworkConfig *const nconf = new NetworkConfig();
|
||||||
|
|
||||||
|
nconf->networkId = _id;
|
||||||
|
nconf->timestamp = RR->node->now();
|
||||||
|
nconf->credentialTimeMaxDelta = ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MAX_MAX_DELTA;
|
||||||
|
nconf->revision = 1;
|
||||||
|
nconf->issuedTo = RR->identity.address();
|
||||||
|
nconf->flags = ZT_NETWORKCONFIG_FLAG_ENABLE_IPV6_NDP_EMULATION;
|
||||||
|
nconf->mtu = ZT_DEFAULT_MTU;
|
||||||
|
nconf->multicastLimit = 0;
|
||||||
|
nconf->staticIpCount = 2;
|
||||||
|
nconf->ruleCount = 14;
|
||||||
|
nconf->staticIps[0] = InetAddress::makeIpv66plane(_id,myAddress);
|
||||||
|
nconf->staticIps[1].set(ipv4,4,8);
|
||||||
|
|
||||||
|
nconf->rules[0].t = (uint8_t)ZT_NETWORK_RULE_ACTION_ACCEPT;
|
||||||
|
|
||||||
|
nconf->type = ZT_NETWORK_TYPE_PUBLIC;
|
||||||
|
|
||||||
|
nconf->name[0] = 'a';
|
||||||
|
nconf->name[1] = 'd';
|
||||||
|
nconf->name[2] = 'h';
|
||||||
|
nconf->name[3] = 'o';
|
||||||
|
nconf->name[4] = 'c';
|
||||||
|
nconf->name[5] = '-';
|
||||||
|
unsigned long nn = 6;
|
||||||
|
while ((nconf->name[nn] = v4ascii[nn - 6])) ++nn;
|
||||||
|
nconf->name[nn++] = '.';
|
||||||
|
nconf->name[nn++] = '0';
|
||||||
|
nconf->name[nn++] = '.';
|
||||||
|
nconf->name[nn++] = '0';
|
||||||
|
nconf->name[nn++] = '.';
|
||||||
|
nconf->name[nn++] = '0';
|
||||||
|
nconf->name[nn++] = (char)0;
|
||||||
|
|
||||||
|
this->setConfiguration(tPtr,*nconf,false);
|
||||||
|
delete nconf;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user