Fix primary port binding issue in 1.12 (#2107)
* Add test for primary port bindings to validator - See #2105 * Add delay to binding test * Remove TCP binding logic from Binder to fix #2105 * add second control plane socket for ipv6 * fix controller network post endpoint * exit if we can't bind at least one of IPV4 or IPV6 for control plane port --------- Co-authored-by: Grant Limberg <grant.limberg@zerotier.com>
This commit is contained in:
parent
ffb63f3ee5
commit
7637ef10d7
5 changed files with 249 additions and 91 deletions
|
@ -863,9 +863,17 @@ std::string EmbeddedNetworkController::networkUpdateFromPostData(uint64_t networ
|
|||
|
||||
void EmbeddedNetworkController::configureHTTPControlPlane(
|
||||
httplib::Server &s,
|
||||
httplib::Server &sv6,
|
||||
const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent)
|
||||
{
|
||||
s.Get("/controller/network", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
// Control plane Endpoints
|
||||
std::string networkListPath = "/controller/network";
|
||||
std::string networkPath = "/controller/network/([0-9a-fA-F]{16})";
|
||||
std::string oldAndBustedNetworkCreatePath = "/controller/network/([0-9a-fA-F]{10})______";
|
||||
std::string memberListPath = "/controller/network/([0-9a-fA-F]{16})/member";
|
||||
std::string memberPath = "/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})";
|
||||
|
||||
auto networkListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
std::set<uint64_t> networkIds;
|
||||
_db.networks(networkIds);
|
||||
char tmp[64];
|
||||
|
@ -877,9 +885,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
}
|
||||
|
||||
setContent(req, res, out.dump());
|
||||
});
|
||||
};
|
||||
s.Get(networkListPath, networkListGet);
|
||||
sv6.Get(networkListPath, networkListGet);
|
||||
|
||||
s.Get("/controller/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1];
|
||||
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
||||
json network;
|
||||
|
@ -889,7 +899,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
}
|
||||
|
||||
setContent(req, res, network.dump());
|
||||
});
|
||||
};
|
||||
s.Get(networkPath, networkGet);
|
||||
sv6.Get(networkPath, networkGet);
|
||||
|
||||
auto createNewNetwork = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
fprintf(stderr, "creating new network (new style)\n");
|
||||
|
@ -912,8 +924,10 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
|
||||
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
||||
};
|
||||
s.Put("/controller/network", createNewNetwork);
|
||||
s.Post("/controller/network", createNewNetwork);
|
||||
s.Put(networkListPath, createNewNetwork);
|
||||
s.Post(networkListPath, createNewNetwork);
|
||||
sv6.Put(networkListPath, createNewNetwork);
|
||||
sv6.Post(networkListPath, createNewNetwork);
|
||||
|
||||
auto createNewNetworkOldAndBusted = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto inID = req.matches[1].str();
|
||||
|
@ -941,10 +955,24 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
}
|
||||
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
||||
};
|
||||
s.Put("/controller/network/([0-9a-fA-F]{10})______", createNewNetworkOldAndBusted);
|
||||
s.Post("/controller/network/([0-9a-fA-F]{10})______", createNewNetworkOldAndBusted);
|
||||
s.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
|
||||
s.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
|
||||
sv6.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
|
||||
sv6.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
|
||||
|
||||
s.Delete("/controller/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1].str();
|
||||
uint64_t nwid = Utils::hexStrToU64(networkID.c_str());
|
||||
|
||||
res.status = 200;
|
||||
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
||||
};
|
||||
s.Put(networkPath, networkPost);
|
||||
s.Post(networkPath, networkPost);
|
||||
sv6.Put(networkPath, networkPost);
|
||||
sv6.Post(networkPath, networkPost);
|
||||
|
||||
auto networkDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1].str();
|
||||
uint64_t nwid = Utils::hexStrToU64(networkID.c_str());
|
||||
|
||||
|
@ -956,9 +984,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
|
||||
_db.eraseNetwork(nwid);
|
||||
setContent(req, res, network.dump());
|
||||
});
|
||||
};
|
||||
s.Delete(networkPath, networkDelete);
|
||||
sv6.Delete(networkPath, networkDelete);
|
||||
|
||||
s.Get("/controller/network/([0-9a-fA-F]{16})/member", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto memberListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1];
|
||||
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
||||
json network;
|
||||
|
@ -982,9 +1012,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
}
|
||||
|
||||
setContent(req, res, out.dump());
|
||||
});
|
||||
};
|
||||
s.Get(memberListPath, memberListGet);
|
||||
sv6.Get(memberListPath, memberListGet);
|
||||
|
||||
s.Get("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto memberGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1];
|
||||
auto memberID = req.matches[2];
|
||||
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
||||
|
@ -997,7 +1029,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
}
|
||||
|
||||
setContent(req, res, member.dump());
|
||||
});
|
||||
};
|
||||
s.Get(memberPath, memberGet);
|
||||
sv6.Get(memberPath, memberGet);
|
||||
|
||||
auto memberPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1].str();
|
||||
|
@ -1102,10 +1136,12 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
|
||||
setContent(req, res, member.dump());
|
||||
};
|
||||
s.Put("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", memberPost);
|
||||
s.Post("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", memberPost);
|
||||
s.Put(memberPath, memberPost);
|
||||
s.Post(memberPath, memberPost);
|
||||
sv6.Put(memberPath, memberPost);
|
||||
sv6.Post(memberPath, memberPost);
|
||||
|
||||
s.Delete("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto memberDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1].str();
|
||||
auto memberID = req.matches[2].str();
|
||||
|
||||
|
@ -1126,7 +1162,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
_db.eraseMember(nwid, address);
|
||||
|
||||
setContent(req, res, member.dump());
|
||||
});
|
||||
};
|
||||
s.Delete(memberPath, memberDelete);
|
||||
sv6.Delete(memberPath, memberDelete);
|
||||
}
|
||||
|
||||
void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt)
|
||||
|
|
|
@ -70,6 +70,7 @@ public:
|
|||
|
||||
void configureHTTPControlPlane(
|
||||
httplib::Server &s,
|
||||
httplib::Server &sV6,
|
||||
const std::function<void(const httplib::Request&, httplib::Response&, std::string)>);
|
||||
|
||||
void handleRemoteTrace(const ZT_RemoteTrace &rt);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue