Add support for pushing network config refresh hints from a MEMORY queue table. That ways it will be possible for network changes to take effect almost immediately across all active peers.
This commit is contained in:
parent
46f868bd4f
commit
7e7e28f5f7
4 changed files with 79 additions and 7 deletions
|
@ -140,6 +140,10 @@ bool PacketDecoder::_doERROR(const RuntimeEnvironment *_r,const SharedPtr<Peer>
|
|||
if (inReVerb == Packet::VERB_WHOIS) {
|
||||
if (_r->topology->isSupernode(source()))
|
||||
_r->sw->cancelWhoisRequest(Address(field(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD,ZT_ADDRESS_LENGTH),ZT_ADDRESS_LENGTH));
|
||||
} else if (inReVerb == Packet::VERB_NETWORK_CONFIG_REQUEST) {
|
||||
SharedPtr<Network> network(_r->nc->network(at<uint64_t>(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD)));
|
||||
if ((network)&&(network->controller() == source()))
|
||||
network->forceStatusTo(Network::NETWORK_NOT_FOUND);
|
||||
}
|
||||
break;
|
||||
case Packet::ERROR_IDENTITY_COLLISION:
|
||||
|
@ -154,6 +158,11 @@ bool PacketDecoder::_doERROR(const RuntimeEnvironment *_r,const SharedPtr<Peer>
|
|||
if (network)
|
||||
network->pushMembershipCertificate(source(),true,Utils::now());
|
||||
} break;
|
||||
case Packet::ERROR_NETWORK_ACCESS_DENIED: {
|
||||
SharedPtr<Network> network(_r->nc->network(at<uint64_t>(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD)));
|
||||
if ((network)&&(network->controller() == source()))
|
||||
network->forceStatusTo(Network::NETWORK_ACCESS_DENIED);
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -732,10 +741,13 @@ bool PacketDecoder::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *_r,const
|
|||
bool PacketDecoder::_doNETWORK_CONFIG_REFRESH(const RuntimeEnvironment *_r,const SharedPtr<Peer> &peer)
|
||||
{
|
||||
try {
|
||||
uint64_t nwid = at<uint64_t>(ZT_PROTO_VERB_NETWORK_CONFIG_REFRESH_IDX_NETWORK_ID);
|
||||
SharedPtr<Network> nw(_r->nc->network(nwid));
|
||||
if ((nw)&&(source() == nw->controller())) // only respond to requests from controller
|
||||
nw->requestConfiguration();
|
||||
unsigned int ptr = ZT_PACKET_IDX_PAYLOAD;
|
||||
while ((ptr + sizeof(uint64_t)) <= size()) {
|
||||
uint64_t nwid = at<uint64_t>(ptr); ptr += sizeof(uint64_t);
|
||||
SharedPtr<Network> nw(_r->nc->network(nwid));
|
||||
if ((nw)&&(source() == nw->controller())) // only respond to requests from controller
|
||||
nw->requestConfiguration();
|
||||
}
|
||||
} catch (std::exception &exc) {
|
||||
TRACE("dropped NETWORK_CONFIG_REFRESH from %s(%s): unexpected exception: %s",source().toString().c_str(),_remoteAddress.toString().c_str(),exc.what());
|
||||
} catch ( ... ) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue