6 #include <vnc_cfg_types.h>
7 #include <bgp_schema_types.h>
12 #define INET_LABELED "inet-labeled"
18 const std::string &display_name,
20 name_(name), display_name_(display_name), uuid_(uuid) {
30 const std::string &ipv4_address,
31 const uint32_t &port, autogen::BgpRouterParams ¶ms) :
32 name_(name), port_(port) ,params_(params) {
33 boost::system::error_code ec;
35 if (ec.value() != 0) {
38 if ( std::find(params.address_families.begin(),
40 params.address_families.end() ) {
48 const uint32_t &port) {
49 boost::system::error_code ec;
51 if (ec.value() != 0) {
58 const std::string &control_node_zone_name) {
63 if ( std::find(params.address_families.begin(),
65 params.address_families.end() ) {
84 const std::string &xmpp_server) {
85 boost::system::error_code ec;
86 bool xmpp_server_ip_presence =
true;
87 Ip4Address ipv4_address = Ip4Address::from_string(xmpp_server, ec);
88 if (ec.value() != 0) {
89 xmpp_server_ip_presence =
false;
92 tbb::mutex::scoped_lock lock(
mutex_);
96 if (xmpp_server_ip_presence) {
97 if (entry->ipv4_address() == ipv4_address)
100 std::string fqdn_name = entry->name();
101 size_t pos = fqdn_name.rfind(
":");
102 if (pos != std::string::npos)
106 std::string bgp_router_name =
107 fqdn_name.substr(pos, fqdn_name.length());
108 if (bgp_router_name == xmpp_server)
116 const std::string &cnz_name) {
117 tbb::mutex::scoped_lock lock(
mutex_);
118 ControlNodeZoneTree::const_iterator cnz_it =
123 int index = rand() % entry->bgp_router_tree_.size();
124 BgpRouterTree::const_iterator it = entry->bgp_router_tree_.begin();
125 for ( ;it != entry->bgp_router_tree_.end(); it++) {
135 tbb::mutex::scoped_lock lock(
mutex_);
136 ControlNodeZoneTree::const_iterator cnz_it =
140 return entry->bgp_router_tree_.size();
147 std::string cnz_name = bgp_router->control_node_zone_name();
148 if (cnz_name.empty())
150 ControlNodeZoneTree::const_iterator it =
154 entry->bgp_router_tree_.erase(bgp_router->name());
155 if (entry->bgp_router_tree_.size() == 0) {
164 std::string cnz_node_name;
170 while (iter != bgp_router_node->
end(graph)) {
175 cnz_node_name = cnz_node->
name();
181 std::string cnz_name = bgp_router->control_node_zone_name();
182 if (strcmp(cnz_name.c_str(), cnz_node_name.c_str()) == 0) {
187 bgp_router->set_control_node_zone_name(cnz_node_name);
188 if (cnz_node == NULL)
192 ControlNodeZoneTree::const_iterator it =
196 entry->bgp_router_tree_.insert(
197 std::make_pair(bgp_router->name(), bgp_router));
199 autogen::ControlNodeZone *cfg =
200 static_cast<autogen::ControlNodeZone *
>(cnz_node->
GetObject());
201 autogen::IdPermsType id_perms = cfg->id_perms();
203 CfgUuidSet(id_perms.uuid.uuid_mslong, id_perms.uuid.uuid_lslong, uuid);
207 entry->bgp_router_tree_.insert(
208 std::make_pair(bgp_router->name(), bgp_router));
214 bool inet_labeled_flag =
false;
219 if (entry->get_inet_labeled_af()) {
220 inet_labeled_flag =
true;
238 autogen::BgpRouter *bgp_router_cfg =
239 static_cast<autogen::BgpRouter *
>(node->
GetObject());
240 if (bgp_router_cfg == NULL)
242 autogen::BgpRouterParams params = bgp_router_cfg->parameters();
247 std::string name = node->
name();
249 tbb::mutex::scoped_lock lock(
mutex_);
253 entry->set_ip_address_port(params.address, params.port);
254 entry->set_inet_labeled_af(params);
257 new BgpRouter(name, params.address, params.port, params));
269 autogen::BgpRouter *bgp_router_cfg =
270 static_cast<autogen::BgpRouter *
>(node->
GetObject());
271 if (bgp_router_cfg == NULL)
273 autogen::BgpRouterParams params = bgp_router_cfg->parameters();
278 std::string name = node->
name();
279 tbb::mutex::scoped_lock lock(
mutex_);
296 void BgpRouterSandeshReq::HandleRequest()
const {
297 BgpRouterSandeshResp *resp =
new BgpRouterSandeshResp();
298 resp->set_context(context());
299 std::string filter = get_name();
300 std::vector<BgpRouterSandeshList> bgp_router_sandesh_list;
304 BgpRouterTree::const_iterator it = bgp_router_tree.begin();
305 for ( ;it != bgp_router_tree.end(); it++) {
307 BgpRouterSandeshList bgp_router_sandesh_entry;
308 std::string bgp_router_name = bgp_router_entry->name();
310 if (bgp_router_name.find(filter) == std::string::npos) {
314 bgp_router_sandesh_entry.set_name(bgp_router_entry->name());
315 std::stringstream ss;
316 ss << bgp_router_entry->ipv4_address()
317 <<
":"<< bgp_router_entry->port();
318 bgp_router_sandesh_entry.set_ipv4_address_port(ss.str());
319 bgp_router_sandesh_entry.set_control_node_zone(
320 bgp_router_entry->control_node_zone_name());
321 bgp_router_sandesh_list.push_back(bgp_router_sandesh_entry);
323 resp->set_bgp_router_list(bgp_router_sandesh_list);
327 void ControlNodeZoneSandeshReq::HandleRequest()
const {
328 ControlNodeZoneSandeshResp *resp =
new ControlNodeZoneSandeshResp();
329 resp->set_context(context());
330 std::string filter = get_name();
331 std::vector<ControlNodeZoneSandeshList> cnz_sandesh_list;
335 ControlNodeZoneTree::const_iterator it = cnz_tree.begin();
336 for ( ;it != cnz_tree.end(); it++) {
338 ControlNodeZoneSandeshList cnz_sandesh_entry;
339 std::string cnz_name = cnz_entry->name();
341 if (cnz_name.find(filter) == std::string::npos) {
345 cnz_sandesh_entry.set_name(cnz_entry->name());
346 BgpRouterTree bgp_router_tree = cnz_entry->bgp_router_tree();
347 BgpRouterTree::const_iterator it = bgp_router_tree.begin();
348 std::vector<BgpRouterSandeshList> bgp_router_list;
349 for ( ;it != bgp_router_tree.end(); it++) {
351 BgpRouterSandeshList bgp_router_sandesh_entry;
352 bgp_router_sandesh_entry.set_name(bgp_router_entry->name());
353 std::stringstream ss;
354 ss << bgp_router_entry->ipv4_address()
355 <<
":" << bgp_router_entry->port();
356 bgp_router_sandesh_entry.set_ipv4_address_port(ss.str());
357 bgp_router_sandesh_entry.set_control_node_zone(
358 bgp_router_entry->control_node_zone_name());
359 bgp_router_list.push_back(bgp_router_sandesh_entry);
361 cnz_sandesh_entry.set_bgp_router_list(bgp_router_list);
362 cnz_sandesh_list.push_back(cnz_sandesh_entry);
364 resp->set_control_node_zone_list(cnz_sandesh_list);
BgpRouterPtr GetBgpRouterFromControlNodeZone(const std::string &cnz_name)
bool inet_labeled_af_enabled_
void UpdateBgpRouterConfigAf()
void AddBgpRouterConfigNode(IFMapNode *node)
const std::string & control_node_zone_name() const
static Agent * GetInstance()
void set_control_node_zone_name(const std::string &contol_node_zone_name)
static void CfgUuidSet(uint64_t ms_long, uint64_t ls_long, boost::uuids::uuid &u)
ControlNodeZone(const std::string &name, const std::string &display_name, const boost::uuids::uuid &uuid)
ConfigManager * config_manager() const
ControlNodeZoneTree control_node_zone_tree_
void UpdateControlNodeZoneConfig(IFMapNode *bgp_router_node, BgpRouterPtr bgp_router)
const ControlNodeZoneTree & control_node_zone_tree() const
virtual const char * Typename() const =0
boost::shared_ptr< BgpRouter > BgpRouterPtr
adjacency_iterator end(DBGraph *graph)
virtual ~BgpRouterConfig()
const DBGraph * GetGraph() const
#define BGP_ROUTER_EXT_TYPE
BgpRouterConfig * bgp_router_config() const
void ConfigManagerEnqueue(IFMapNode *node)
uint32_t GetBgpRouterCount()
void ConfigAddChange(IFMapNode *node)
BgpRouterPtr GetBgpRouterFromXmppServer(const std::string &xmpp_server)
BgpRouterConfig(Agent *agent)
const BgpRouterTree & bgp_router_tree() const
BgpRouter(const std::string &name, const std::string &ipv4_address, const uint32_t &port, autogen::BgpRouterParams ¶ms)
const std::string & name() const
std::string control_node_zone_name_
boost::asio::ip::address_v4 Ip4Address
void ConfigDelete(IFMapNode *node)
IFMapObject * GetObject()
BgpRouterTree bgp_router_tree_
void DeleteControlNodeZoneConfig(IFMapNode *bgp_router_node, BgpRouterPtr bgp_router)
void set_inet_labeled_flag(bool flag)
std::map< std::string, BgpRouterPtr > BgpRouterTree
boost::shared_ptr< ControlNodeZone > ControlNodeZonePtr
bool inet_labeled_af_enable_
void set_inet_labeled_af(const autogen::BgpRouterParams params)
#define CONTROL_NODE_ZONE_CONFIG_NAME
adjacency_iterator begin(DBGraph *graph)
void set_ip_address_port(const std::string &ip_address, const uint32_t &port)
std::map< std::string, ControlNodeZonePtr > ControlNodeZoneTree
const uint32_t & port() const