-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add config-read and run thread_birds with arguments. #265
base: bird-import-proto
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -3,6 +3,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||
#include <nlohmann/json.hpp> | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
#include "balancer.h" | ||||||||||||||||||||||||||||||||||||||||||||||
#include "define.h" | ||||||||||||||||||||||||||||||||||||||||||||||
#include "scheduler.h" | ||||||||||||||||||||||||||||||||||||||||||||||
#include "type.h" | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -104,6 +105,19 @@ class interface_t | |||||||||||||||||||||||||||||||||||||||||||||
common::globalBase::tFlow flow; | ||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
class bird_import_t | ||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||
public: | ||||||||||||||||||||||||||||||||||||||||||||||
SERIALIZABLE(socket, vrf); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
public: | ||||||||||||||||||||||||||||||||||||||||||||||
inline static const std::string socketStr = "socket"; | ||||||||||||||||||||||||||||||||||||||||||||||
inline static const std::string vrfStr = "vrf"; | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
std::string socket; | ||||||||||||||||||||||||||||||||||||||||||||||
std::string vrf; | ||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+108
to
+119
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since everything is public, why not just
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
class config_t | ||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||
public: | ||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -114,7 +128,7 @@ class config_t | |||||||||||||||||||||||||||||||||||||||||||||
nlohmann::json save() const; | ||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
SERIALIZABLE(routeId, to_kernel_prefixes, vrf, tunnel_enabled, ignore_tables, ipv4_source_address, ipv6_source_address, udp_destination_port, local_prefixes, peers, interfaces); | ||||||||||||||||||||||||||||||||||||||||||||||
SERIALIZABLE(routeId, to_kernel_prefixes, vrf, tunnel_enabled, ignore_tables, ipv4_source_address, ipv6_source_address, udp_destination_port, local_prefixes, peers, interfaces, bird_imports); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
public: | ||||||||||||||||||||||||||||||||||||||||||||||
tRouteId routeId; | ||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -128,6 +142,7 @@ class config_t | |||||||||||||||||||||||||||||||||||||||||||||
std::set<common::ip_prefix_t> local_prefixes; ///< for fallback to default | ||||||||||||||||||||||||||||||||||||||||||||||
std::map<uint32_t, std::string> peers; | ||||||||||||||||||||||||||||||||||||||||||||||
std::map<std::string, interface_t> interfaces; | ||||||||||||||||||||||||||||||||||||||||||||||
std::vector<bird_import_t> bird_imports; | ||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -197,6 +197,32 @@ controlplane::base_t config_parser_t::loadConfig(const std::string& rootFilePath | |||||||||||||||||||||
return baseNext; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
void config_parser_t::loadConfig_route_bird(controlplane::base_t& baseNext, | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I guess we need
Suggested change
|
||||||||||||||||||||||
std::vector<controlplane::route::bird_import_t>& birdsImport, | ||||||||||||||||||||||
const nlohmann::json& birdJson) | ||||||||||||||||||||||
{ | ||||||||||||||||||||||
using BirdImport = controlplane::route::bird_import_t; | ||||||||||||||||||||||
for (const auto& elemJson : birdJson) | ||||||||||||||||||||||
{ | ||||||||||||||||||||||
BirdImport import; | ||||||||||||||||||||||
|
||||||||||||||||||||||
if (exist(elemJson, BirdImport::socketStr)) | ||||||||||||||||||||||
{ | ||||||||||||||||||||||
import.socket = elemJson[BirdImport::socketStr]; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
if (exist(elemJson, BirdImport::vrfStr)) | ||||||||||||||||||||||
{ | ||||||||||||||||||||||
import.vrf = elemJson[BirdImport::vrfStr]; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
birdsImport.push_back(import); | ||||||||||||||||||||||
YANET_LOG_INFO("loadConfig_route_bird: socket(%s), vrf(%s)\n", | ||||||||||||||||||||||
import.socket.data(), | ||||||||||||||||||||||
import.vrf.data()); | ||||||||||||||||||||||
} | ||||||||||||||||||||||
Comment on lines
+219
to
+223
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. interchange those lines, and now we will be able to benefit from moving
Suggested change
|
||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
void config_parser_t::loadConfig_logicalPort(controlplane::base_t& baseNext, | ||||||||||||||||||||||
const std::string& moduleId, | ||||||||||||||||||||||
const nlohmann::json& moduleJson) | ||||||||||||||||||||||
|
@@ -367,6 +393,13 @@ void config_parser_t::loadConfig_route(controlplane::base_t& baseNext, | |||||||||||||||||||||
route.tunnel_enabled = false; | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
if (exist(moduleJson, "birdImport")) | ||||||||||||||||||||||
{ | ||||||||||||||||||||||
loadConfig_route_bird(baseNext, | ||||||||||||||||||||||
route.bird_imports, | ||||||||||||||||||||||
moduleJson["birdImport"]); | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
// | ||||||||||||||||||||||
|
||||||||||||||||||||||
route.routeId = routeId; | ||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -538,6 +538,18 @@ common::icp::controlplane_values::response cControlPlane::controlplane_values() | |
return response; | ||
} | ||
|
||
common::icp::route_config::response cControlPlane::getRoute() const | ||
{ | ||
common::icp::route_config::response response; | ||
|
||
{ | ||
auto current_guard = generations.current_lock_guard(); | ||
response = generations.current().routes; | ||
} | ||
|
||
return response; | ||
} | ||
|
||
common::icp::getDecapPrefixes::response cControlPlane::command_getDecapPrefixes() | ||
{ | ||
common::icp::getDecapPrefixes::response response; | ||
|
@@ -941,6 +953,14 @@ eResult cControlPlane::loadConfig(const std::string& rootFilePath, | |
} | ||
|
||
YANET_LOG_INFO("dataplane has been updated (stage 7)\n"); | ||
for (auto& module : modules) | ||
{ | ||
if (rib_t* rib = dynamic_cast<rib_t*>(module)) | ||
{ | ||
rib->bird_import_get(); | ||
rib->moduleStart(); | ||
} | ||
} | ||
} | ||
Comment on lines
+956
to
964
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is every module is also a rib module? I don't quite understand. |
||
catch (const error_result_t& error) | ||
{ | ||
|
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -1,6 +1,6 @@ | ||||||
#include "rib.h" | ||||||
#include "libbird.h" | ||||||
#include "controlplane.h" | ||||||
#include "libbird.h" | ||||||
|
||||||
#include <fcntl.h> | ||||||
|
||||||
|
@@ -64,10 +64,6 @@ eResult rib_t::init() | |||||
rib_thread(); | ||||||
}); | ||||||
|
||||||
funcThreads.emplace_back([this]() { | ||||||
bird_thread(); | ||||||
}); | ||||||
|
||||||
return eResult::success; | ||||||
} | ||||||
|
||||||
|
@@ -869,22 +865,41 @@ void rib_t::rib_thread() | |||||
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds{200}); | ||||||
} | ||||||
} | ||||||
|
||||||
void rib_t::bird_import_get() | ||||||
{ | ||||||
auto route = controlPlane->getRoute(); | ||||||
for (auto& [vrf, response] : route) | ||||||
{ | ||||||
(void)vrf; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
auto imports = response.bird_imports; | ||||||
|
||||||
for (auto& import : imports) | ||||||
{ | ||||||
funcThreads.emplace_back([this, import]() { | ||||||
bird_thread(import.socket, import.vrf); | ||||||
}); | ||||||
} | ||||||
} | ||||||
} | ||||||
|
||||||
void rib_t::bird_thread() | ||||||
void rib_t::bird_thread(const std::string& socket, const std::string& vrf) | ||||||
{ | ||||||
while (!flagStop) { | ||||||
read_bird_feed("/tmp/export.sock", "default", this); | ||||||
YANET_LOG_DEBUG("Run bird thread: socket(%s), vrf(%s)\n", | ||||||
socket.data(), | ||||||
vrf.data()); | ||||||
while (!flagStop) | ||||||
{ | ||||||
read_bird_feed(socket.c_str(), vrf.c_str(), this); | ||||||
|
||||||
common::icp::rib_update::clear request = {"bgp", std::nullopt}; | ||||||
/* std::get<1>(request) = {peer_address, | ||||||
{"default", ///< @todo: vrf | ||||||
YANET_RIB_PRIORITY_DEFAULT}}; | ||||||
*/ | ||||||
/* std::get<1>(request) = {peer_address, | ||||||
{"default", ///< @todo: vrf | ||||||
YANET_RIB_PRIORITY_DEFAULT}}; | ||||||
*/ | ||||||
rib_clear(request); | ||||||
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds{200}); | ||||||
} | ||||||
|
||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.