7 #include <boost/foreach.hpp>
20 #include "schema/bgp_schema_types.h"
21 #include "schema/vnc_cfg_types.h"
23 using std::unique_ptr;
47 last = identifier.rfind(
':');
48 if (last == 0 || last == string::npos) {
51 parent = identifier.substr(0, last);
56 return htonl(address.to_v4().to_ulong());
61 return addr.to_string();
65 : instance_(instance) {
81 instance_(rti), policy_(rtp) {
100 iter != node->
end(graph); ++iter) {
102 if (strcmp(adj->
table()->
Typename(),
"routing-instance") == 0)
103 routing_instance = adj;
105 routing_policy = adj;
107 if (routing_policy == NULL || routing_instance == NULL) {
111 pair->first = routing_instance;
112 pair->second = routing_policy;
117 const autogen::RoutingPolicyRoutingInstance *ri_rp) {
127 if (boost::iequals(value,
"md5")) {
134 const autogen::AuthenticationData &values) {
139 for (vector<autogen::AuthenticationKeyItem>::const_iterator iter =
140 values.key_items.begin(); iter != values.key_items.end(); ++iter) {
141 key.
id = iter->key_id;
142 key.
value = iter->key;
154 const string &family) {
157 return (family ==
"inet" || family ==
"inet6");
167 const vector<string> &remote_family_list) {
169 BOOST_FOREACH(
const string &family, family_list) {
175 if (!remote_family_list.empty()) {
176 vector<string>::const_iterator it = find(
177 remote_family_list.begin(), remote_family_list.end(), family);
178 if (it == remote_family_list.end())
183 family_attributes_list.push_back(family_attributes);
198 const autogen::BgpSessionAttributes *attributes) {
199 set<string> family_set;
201 BOOST_FOREACH(
const autogen::BgpFamilyAttributes &family_config,
202 attributes->family_attributes) {
206 family_config.address_family);
207 family_attributes.
loop_count = family_config.loop_count;
208 family_attributes.
prefix_limit = family_config.prefix_limit.maximum;
210 family_config.prefix_limit.idle_timeout;
212 family_config.default_tunnel_encap;
213 family_attributes_list.push_back(family_attributes);
214 family_set.insert(family_config.address_family);
217 BOOST_FOREACH(
const string &family, attributes->address_families.family) {
218 if (family_set.find(family) != family_set.end())
221 family_attributes_list.push_back(family_attributes);
236 const autogen::BgpSession *session) {
237 typedef vector<autogen::BgpSessionAttributes> AttributeVec;
238 const autogen::BgpSessionAttributes *common = NULL;
239 const autogen::BgpSessionAttributes *local = NULL;
240 for (AttributeVec::const_iterator iter = session->attributes.begin();
241 iter != session->attributes.end(); ++iter) {
242 const autogen::BgpSessionAttributes *attr = iter.operator->();
243 if (attr->bgp_router.empty()) {
245 }
else if (neighbor->
router_type() !=
"bgpaas-client" &&
246 attr->bgp_router == localname) {
248 }
else if (neighbor->
router_type() ==
"bgpaas-client" &&
249 attr->bgp_router ==
"bgpaas-server") {
255 const autogen::BgpSessionAttributes *attributes = NULL;
256 if (common != NULL) {
258 }
else if (local != NULL) {
261 if (attributes != NULL) {
266 if (attributes->admin_down) {
269 if (attributes->local_autonomous_system) {
270 neighbor->
set_local_as(attributes->local_autonomous_system);
272 if (attributes->hold_time) {
277 const autogen::RouteOriginOverride &origin_override =
278 attributes->route_origin_override;
280 origin_override.origin);
287 const string &local_name,
288 const string &remote_name,
289 const autogen::BgpRouter *local_router,
290 const autogen::BgpRouter *remote_router,
291 const autogen::BgpSession *session) {
298 if (session && !session->uuid.empty()) {
300 neighbor->
set_name(remote_name +
":" + session->uuid);
307 const autogen::BgpRouterParams ¶ms = remote_router->parameters();
309 if (params.admin_down) {
312 if (params.local_autonomous_system) {
313 neighbor->
set_peer_as(params.local_autonomous_system);
317 boost::system::error_code err;
319 IpAddress::from_string(params.address, err));
322 "Invalid peer address " << params.address <<
323 " for neighbor " << neighbor->
name());
326 Ip4Address identifier = Ip4Address::from_string(params.identifier, err);
329 "Invalid peer identifier " << params.identifier <<
330 " for neighbor " << neighbor->
name());
334 if (params.router_type ==
"bgpaas-client") {
336 Ip4Address::from_string(params.gateway_address, err);
337 if (!params.gateway_address.empty() && err) {
339 "Invalid gateway address " <<
340 params.gateway_address <<
341 " for neighbor " << neighbor->
name());
347 Ip6Address::from_string(params.ipv6_gateway_address, err);
348 if (!params.ipv6_gateway_address.empty() && err) {
350 "Invalid ipv6 gateway address " <<
351 params.ipv6_gateway_address <<
352 " for neighbor " << neighbor->
name());
362 if (session != NULL) {
369 if (master_protocol && master_protocol->
bgp_router()) {
370 const autogen::BgpRouterParams &master_params =
372 if (master_params.admin_down) {
376 Ip4Address::from_string(master_params.identifier, err);
381 if (master_params.local_autonomous_system) {
382 neighbor->
set_local_as(master_params.local_autonomous_system);
384 neighbor->
set_local_as(master_params.autonomous_system);
387 if (instance != master_instance) {
396 const autogen::BgpRouterParams &protocol_params =
400 protocol_params.address_families.family,
401 params.address_families.family);
404 const autogen::BgpRouterParams &local_params =
405 local_router->parameters();
412 params.address_families.family);
422 const autogen::BgpRouter *local_rt_config,
423 const string &peername,
const autogen::BgpRouter *remote_rt_config,
424 const autogen::BgpPeering *peering,
NeighborMap *map) {
430 const autogen::BgpPeeringAttributes &attr = peering->data();
431 for (autogen::BgpPeeringAttributes::const_iterator iter = attr.begin();
432 iter != attr.end(); ++iter) {
435 local_rt_config, remote_rt_config, iter.operator->());
436 map->insert(make_pair(neighbor->
name(), neighbor));
444 local_rt_config, remote_rt_config, NULL);
445 map->insert(make_pair(neighbor->
name(), neighbor));
458 const autogen::BgpPeering *peering) {
460 assert(node != NULL);
467 pair<IFMapNode *, IFMapNode *> routers;
470 const autogen::BgpRouter *local_rt_config =
471 static_cast<const autogen::BgpRouter *
>(
472 routers.first->GetObject());
473 const autogen::BgpRouter *remote_rt_config =
474 static_cast<const autogen::BgpRouter *
>(
475 routers.second->GetObject());
476 if (local_rt_config &&
477 local_rt_config->IsPropertySet(autogen::BgpRouter::PARAMETERS) &&
479 remote_rt_config->IsPropertySet(autogen::BgpRouter::PARAMETERS)) {
481 remote_rt_config, peering, &future);
492 NeighborMap::iterator it1 = current.begin();
493 NeighborMap::iterator it2 = future.begin();
494 while (it1 != current.end() && it2 != future.end()) {
495 if (it1->first < it2->first) {
499 }
else if (it1->first > it2->first) {
508 if (*neighbor != *update) {
520 for (; it1 != current.end(); ++it1) {
524 for (; it2 != future.end(); ++it2) {
546 for (NeighborMap::iterator iter = current.begin();
547 iter != current.end(); ++iter) {
565 const string &localname,
IFMapNode *node,
566 pair<IFMapNode *, IFMapNode *> *pair) {
569 string local_router_type;
570 string remote_router_type;
571 string local_instance;
572 string remote_instance;
575 iter != node->
end(db_graph); ++iter) {
579 autogen::BgpRouter *router =
580 static_cast<autogen::BgpRouter *
>(adj->
GetObject());
583 const autogen::BgpRouterParams ¶ms = router->parameters();
585 string name = adj->
name().substr(instance_name.size() + 1);
586 if (name == localname && params.router_type !=
"bgpaas-client") {
588 local_router_type = params.router_type;
589 local_instance = instance_name;
591 params.router_type ==
"bgpaas-server") {
593 local_router_type = params.router_type;
594 local_instance = instance_name;
597 remote_router_type = params.router_type;
598 remote_instance = instance_name;
602 if ((local == NULL || remote == NULL) || (local_router_type ==
603 "bgpaas-server" && remote_router_type !=
"bgpaas-client") ||
604 (local_router_type !=
"bgpaas-server" && remote_router_type ==
605 "bgpaas-client") || (local_instance != remote_instance)) {
607 "localname: " << localname <<
608 ((local == NULL) ?
" Local node not present" :
609 " Local node present") <<
610 ((remote == NULL) ?
" Remote node not present" :
611 " Remote node present") <<
612 " local_router_type: " << local_router_type <<
613 " remote_router_type: " << remote_router_type <<
614 " local instance: " << local_instance <<
615 " remote instance: " << remote_instance);
620 pair->second = remote;
628 : instance_(instance),
629 data_(instance->name()) {
655 const autogen::BgpRouter *router) {
657 const autogen::BgpRouterParams ¶ms = router->parameters();
663 boost::system::error_code err;
664 IpAddress identifier = IpAddress::from_string(params.identifier, err);
680 iter != node->
end(graph); ++iter) {
684 const autogen::SubCluster *sc =
685 static_cast<autogen::SubCluster *
>(adj->
GetObject());
759 iter != node->
end(graph); ++iter) {
762 *target = adj->
name();
780 vector<string> *target_list) {
782 iter != node->
end(graph); ++iter) {
785 if ((strcmp(adj->
table()->
Typename(),
"instance-target") == 0) &&
787 const autogen::InstanceTarget *itarget =
788 dynamic_cast<autogen::InstanceTarget *
>(adj->
GetObject());
791 const autogen::InstanceTargetType &itt = itarget->data();
792 if (itt.import_export.empty())
793 target_list->push_back(target);
810 const string &src_instance,
IFMapNode *node,
811 vector<string> *target_list) {
812 const autogen::Connection *conn =
813 dynamic_cast<autogen::Connection *
>(node->
GetObject());
816 const autogen::ConnectionType &conn_type = conn->data();
817 if (!conn_type.destination_instance.empty() &&
818 conn_type.destination_instance != src_instance)
821 iter != node->
end(graph); ++iter) {
825 if (strcmp(adj->
table()->
Typename(),
"routing-instance") != 0)
839 const autogen::RoutingPolicyRoutingInstance *policy =
840 static_cast<autogen::RoutingPolicyRoutingInstance *
>(node->
GetObject());
841 const autogen::RoutingPolicyType &attach_info = policy->data();
843 ri_rp_link->
sequence_ = attach_info.sequence;
846 iter != node->
end(graph); ++iter) {
848 if (strcmp(adj->
table()->
Typename(),
"routing-policy") == 0) {
862 const autogen::RouteAggregate *ra =
863 static_cast<autogen::RouteAggregate *
>(node->
GetObject());
864 if (ra == NULL)
return false;
866 boost::system::error_code ec;
868 IpAddress::from_string(ra->aggregate_route_nexthop(), ec);
869 if (ec.failed())
return false;
871 BOOST_FOREACH(
const string &route, ra->aggregate_route_entries()) {
878 if (!nexthop.is_v4())
continue;
880 inet_list->push_back(aggregate);
882 if (!nexthop.is_v6())
continue;
885 if (ec.failed())
continue;
887 inet6_list->push_back(aggregate);
899 const autogen::VirtualNetwork *vn =
900 static_cast<autogen::VirtualNetwork *
>(node->
GetObject());
901 if (vn && vn->IsPropertySet(autogen::VirtualNetwork::NETWORK_ID))
902 return vn->network_id();
903 if (vn && vn->IsPropertySet(autogen::VirtualNetwork::PROPERTIES))
904 return vn->properties().network_id;
913 const autogen::VirtualNetwork *vn =
914 static_cast<autogen::VirtualNetwork *
>(node->
GetObject());
915 if (vn && vn->IsPropertySet(autogen::VirtualNetwork::PROPERTIES))
916 return vn->properties().allow_transit;
926 const autogen::VirtualNetwork *vn =
927 static_cast<autogen::VirtualNetwork *
>(node->
GetObject());
928 if (vn && vn->IsPropertySet(autogen::VirtualNetwork::PBB_EVPN_ENABLE))
929 return vn->pbb_evpn_enable();
942 const autogen::VirtualNetwork *vn =
943 static_cast<autogen::VirtualNetwork *
>(node->
GetObject());
944 if (vn && vn->IsPropertySet(autogen::VirtualNetwork::PROPERTIES)) {
945 if (vn->properties().vxlan_network_identifier) {
946 return vn->properties().vxlan_network_identifier;
948 return vn->properties().network_id;
955 const autogen::RoutingInstance *config) {
958 BOOST_FOREACH(
const autogen::StaticRouteType &route,
959 config->static_route_entries()) {
960 boost::system::error_code ec;
962 item.
nexthop = IpAddress::from_string(route.next_hop, ec);
974 std::pair<BgpInstanceConfig::StaticRouteList::iterator, bool> ret =
975 inet_list.insert(item);
978 "Duplicate static route prefix " << route.prefix <<
979 " with nexthop " << route.next_hop <<
980 " for routing instance " << rti->
name());
988 std::pair<BgpInstanceConfig::StaticRouteList::iterator, bool> ret =
989 inet6_list.insert(item);
992 "Duplicate static route prefix " << route.prefix <<
993 " with nexthop " << route.next_hop <<
994 " for routing instance " << rti->
name());
1003 const autogen::RoutingInstance *config) {
1005 const autogen::ServiceChainInfo &inet_chain =
1006 config->service_chain_information();
1007 if (config->IsPropertySet(
1008 autogen::RoutingInstance::SERVICE_CHAIN_INFORMATION)) {
1011 inet_chain.routing_instance,
1013 inet_chain.service_chain_address,
1014 inet_chain.service_instance,
1015 inet_chain.source_routing_instance,
1016 inet_chain.service_chain_id,
1018 inet_chain.retain_as_path,
1020 list.push_back(item);
1023 const autogen::ServiceChainInfo &inet6_chain =
1024 config->ipv6_service_chain_information();
1025 if (config->IsPropertySet(
1026 autogen::RoutingInstance::IPV6_SERVICE_CHAIN_INFORMATION)) {
1029 inet6_chain.routing_instance,
1031 inet6_chain.service_chain_address,
1032 inet6_chain.service_instance,
1033 inet6_chain.source_routing_instance,
1034 inet6_chain.service_chain_id,
1035 inet6_chain.sc_head,
1036 inet6_chain.retain_as_path,
1038 list.push_back(item);
1041 const autogen::ServiceChainInfo &evpn_chain =
1042 config->evpn_service_chain_information();
1043 if (config->IsPropertySet(
1044 autogen::RoutingInstance::EVPN_SERVICE_CHAIN_INFORMATION)) {
1047 evpn_chain.routing_instance,
1049 evpn_chain.service_chain_address,
1050 evpn_chain.service_instance,
1051 evpn_chain.source_routing_instance,
1052 evpn_chain.service_chain_id,
1054 evpn_chain.retain_as_path,
1056 list.push_back(item);
1059 const autogen::ServiceChainInfo &evpnv6_chain =
1060 config->evpn_ipv6_service_chain_information();
1061 if (config->IsPropertySet(
1062 autogen::RoutingInstance::EVPN_IPV6_SERVICE_CHAIN_INFORMATION)) {
1065 evpnv6_chain.routing_instance,
1066 evpnv6_chain.prefix,
1067 evpnv6_chain.service_chain_address,
1068 evpnv6_chain.service_instance,
1069 evpnv6_chain.source_routing_instance,
1070 evpnv6_chain.service_chain_id,
1071 evpnv6_chain.sc_head,
1072 evpnv6_chain.retain_as_path,
1074 list.push_back(item);
1086 if (ri_rp_link == NULL) {
1088 if (proxy == NULL) {
1092 if (node == NULL || delta.
obj.get() == NULL) {
1096 pair<IFMapNode *, IFMapNode *> ri_rp_pair;
1098 node, &ri_rp_pair)) {
1102 string instance_name = ri_rp_pair.first->
name();
1103 string policy_name = ri_rp_pair.second->name();
1106 config_->FindInstance(instance_name);
1108 config_->FindRoutingPolicy(policy_name);
1113 ri_rp_link =
config_->CreateRoutingPolicyLink(rti, rtp, proxy);
1116 assert(node != NULL);
1117 if (delta.
obj.get() == NULL) {
1120 config_->DeleteRoutingPolicyLink(ri_rp_link);
1122 config_->DeleteRoutingPolicy(rtp);
1133 autogen::RoutingPolicyRoutingInstance *ri_rp_link_cfg =
1134 static_cast<autogen::RoutingPolicyRoutingInstance *
>(delta.
obj.get());
1136 ri_rp_link->
Update(
this, ri_rp_link_cfg);
1148 string old_vit =
"target:" +
GetVitFromId(ntohl(old_id));
1149 import_list.erase(old_vit);
1152 string new_vit =
"target:" +
GetVitFromId(ntohl(new_id));
1153 import_list.insert(new_vit);
1162 import_list.erase(old_es_rtarget);
1166 import_list.insert(new_es_rtarget);
1172 if (identifier == 0)
1194 uint32_t bgp_identifier = 0;
1196 if (master_instance) {
1199 if (master_protocol) {
1207 if (bgp_identifier > 0)
1208 import_list.insert(
"target:" +
GetVitFromId(ntohl(bgp_identifier)));
1227 const autogen::RoutingInstance *config) {
1237 iter != node->
end(graph); ++iter) {
1239 if (strcmp(adj->
table()->
Typename(),
"instance-target") == 0) {
1242 const autogen::InstanceTarget *itarget =
1243 dynamic_cast<autogen::InstanceTarget *
>(adj->
GetObject());
1246 const autogen::InstanceTargetType &itt = itarget->data();
1247 if (itt.import_export ==
"import") {
1248 import_list.insert(target);
1249 }
else if (itt.import_export ==
"export") {
1250 export_list.insert(target);
1252 import_list.insert(target);
1253 export_list.insert(target);
1257 "routing-policy-routing-instance") == 0) {
1260 policy_list.push_back(policy_info);
1262 }
else if (strcmp(adj->
table()->
Typename(),
"route-aggregate") == 0) {
1264 &inet6_aggregate_list);
1265 }
else if (strcmp(adj->
table()->
Typename(),
"connection") == 0) {
1266 vector<string> target_list;
1268 BOOST_FOREACH(
string target, target_list) {
1269 import_list.insert(target);
1271 }
else if (strcmp(adj->
table()->
Typename(),
"virtual-network") == 0) {
1334 Create, manager->
server(), neighbor, SandeshLevel::SYS_DEBUG,
1355 loc->second = neighbor;
1390 const string &name)
const {
1391 NeighborMap::const_iterator loc;
1393 if (name.find(
name_) == string::npos) {
1402 return loc !=
neighbors_.end() ? loc->second : NULL;
1437 uint32_t new_id, uint32_t old_id,
1438 uint32_t new_as, uint32_t old_as) {
1439 assert(new_id != old_id || new_as != old_as);
1444 if (new_id != old_id)
1446 if (new_as != old_as)
1490 pair<BgpInstanceMap::iterator, bool> result2 =
1493 assert(result2.second);
1520 const string &name)
const {
1542 pair<IfmapRoutingPolicyLinkMap::iterator, bool> result =
1544 assert(result.second);
1570 const string &name) {
1571 IfmapRoutingPolicyLinkMap::iterator loc =
ri_rp_links_.find(name);
1584 IfmapRoutingPolicyLinkMap::const_iterator loc =
ri_rp_links_.find(name);
1602 pair<IfmapPeeringMap::iterator, bool> result =
1604 assert(result.second);
1607 "Creating BgpIfmapPeering " << peering->
node()->
name());
1620 "Deleting BgpIfmapPeering " << peering->
node()->
name());
1630 IfmapPeeringMap::iterator loc =
peerings_.find(name);
1642 const string &name)
const {
1643 IfmapPeeringMap::const_iterator loc =
peerings_.find(name);
1668 const string &name) {
1674 pair<IfmapRoutingPolicyMap::iterator, bool> result =
1676 assert(result.second);
1677 pair<BgpRoutingPolicyMap::iterator, bool> result2 =
1680 assert(result2.second);
1692 BgpRoutingPolicyMap::iterator loc2 =
1700 const string &name) {
1709 const string &name)
const {
1726 kConfigTaskInstanceId),
1742 const string &localname) {
1760 return config_->InstanceMapItems(start_name);
1765 return config_->RoutingPolicyMapItems(start_name);
1770 const string &instance_name)
const {
1774 return make_pair(nilMap.begin(), nilMap.end());
1784 const string &instance_name)
const {
1811 if (proxy != NULL) {
1826 if (
node() != NULL) {
1855 BOOST_FOREACH(
const autogen::PrefixMatchType &prefix_match,
1856 cfg_term.term_match_condition.prefix) {
1857 string prefix_type(prefix_match.prefix_type);
1859 prefix_type.empty() ?
"exact" : prefix_type);
1863 cfg_term.term_match_condition.community_match_all;
1864 if (!cfg_term.term_match_condition.community_list.empty()) {
1866 cfg_term.term_match_condition.community_list;
1868 if (!cfg_term.term_match_condition.community.empty()) {
1870 cfg_term.term_match_condition.community);
1873 cfg_term.term_match_condition.extcommunity_match_all;
1874 if (!cfg_term.term_match_condition.extcommunity_list.empty()) {
1876 cfg_term.term_match_condition.extcommunity_list;
1879 BOOST_FOREACH(uint32_t asn,
1880 cfg_term.term_action_list.update.as_path.expand.asn_list) {
1883 BOOST_FOREACH(
const string community,
1884 cfg_term.term_action_list.update.community.add.community) {
1887 BOOST_FOREACH(
const string community,
1888 cfg_term.term_action_list.update.community.remove.community) {
1891 BOOST_FOREACH(
const string community,
1892 cfg_term.term_action_list.update.community.set.community) {
1895 BOOST_FOREACH(
const string community,
1896 cfg_term.term_action_list.update.extcommunity.add.community) {
1899 BOOST_FOREACH(
const string community,
1900 cfg_term.term_action_list.update.extcommunity.remove.community) {
1903 BOOST_FOREACH(
const string community,
1904 cfg_term.term_action_list.update.extcommunity.set.community) {
1908 cfg_term.term_action_list.update.local_pref;
1912 if (strcmp(cfg_term.term_action_list.action.c_str(),
"reject") == 0) {
1915 strcmp(cfg_term.term_action_list.action.c_str(),
"accept") == 0) {
1921 const autogen::RoutingPolicy *policy) {
1922 vector<autogen::PolicyTermType> terms = policy->entries();
1923 BOOST_FOREACH(autogen::PolicyTermType cfg_term, terms) {
1926 policy_cfg->
add_term(policy_term_cfg);
1931 const autogen::RoutingPolicy *policy) {
1947 const string &name)
const {
1956 const string &name)
const {
1965 const string &instance_name)
const {
1971 if (proto == NULL) {
1978 const string &instance_name,
const string &name)
const {
1990 autogen::BgpRouterParams *param) {
2003 unique_ptr<autogen::BgpRouter> router(
new autogen::BgpRouter());
2004 autogen::BgpRouterParams param;
2006 router->SetProperty(
"bgp-router-parameters", ¶m);
2008 protocol->
Update(
this, router.release());
2011 vector<string> import_list;
2012 vector<string> export_list;
2015 import_list, export_list,
2019 Create,
server(), protocol,
2030 const autogen::GlobalSystemConfig *system) {
2031 bool changed =
false;
2033 if (
data_.
gr_enable() != system->graceful_restart_parameters().enable) {
2038 if (
data_.
gr_time() != system->graceful_restart_parameters().restart_time) {
2044 system->graceful_restart_parameters().long_lived_restart_time)) {
2046 system->graceful_restart_parameters().long_lived_restart_time);
2051 system->graceful_restart_parameters().end_of_rib_timeout) {
2053 system->graceful_restart_parameters().end_of_rib_timeout);
2058 system->graceful_restart_parameters().bgp_helper_enable) {
2060 system->graceful_restart_parameters().bgp_helper_enable);
2065 system->graceful_restart_parameters().xmpp_helper_enable) {
2067 system->graceful_restart_parameters().xmpp_helper_enable);
2087 system->fast_convergence_parameters().xmpp_hold_time) {
2089 system->fast_convergence_parameters().xmpp_hold_time);
2103 if (
data_.
fc_enabled() != system->fast_convergence_parameters().enable) {
2109 system->fast_convergence_parameters().nh_reachability_check) {
2111 system->fast_convergence_parameters().nh_reachability_check);
2119 const autogen::GlobalQosConfig *qos) {
2120 bool changed =
false;
2121 const autogen::ControlTrafficDscpType &dscp = qos->control_traffic_dscp();
2142 id_map_.insert(make_pair(
"routing-instance",
2145 id_map_.insert(make_pair(
"routing-policy",
2147 id_map_.insert(make_pair(
"routing-policy-routing-instance",
2150 id_map_.insert(make_pair(
"bgp-router",
2152 id_map_.insert(make_pair(
"bgp-peering",
2154 id_map_.insert(make_pair(
"global-system-config",
2157 id_map_.insert(make_pair(
"global-qos-config",
2171 vector<string> import_rt(rti->
import_list().begin(),
2173 vector<string> export_rt(rti->
export_list().begin(),
2178 import_rt, export_rt,
2183 import_rt, export_rt,
2217 string instance_name = delta.
id_name;
2221 if (proxy == NULL) {
2225 if (node == NULL || node->
IsDeleted()) {
2229 rti =
config_->LocateInstance(instance_name);
2235 if (proxy == NULL) {
2251 autogen::RoutingInstance *rti_config =
2252 static_cast<autogen::RoutingInstance *
>(delta.
obj.get());
2253 if (rti->
index() != -1)
2255 rti->
Update(
this, rti_config);
2277 if (protocol == NULL) {
2279 if (proxy == NULL) {
2283 if (delta.
obj.get() == NULL) {
2287 if (node == NULL || node->
IsDeleted()) {
2292 rti =
config_->LocateInstance(instance_name);
2302 if (delta.
obj.get() == NULL) {
2306 }
else if (delta.
obj.get() == NULL) {
2320 autogen::BgpRouter *rt_config =
2321 static_cast<autogen::BgpRouter *
>(delta.
obj.get());
2324 protocol->
Update(
this, rt_config);
2327 if (new_id != old_id || new_as != old_as) {
2328 config_->ProcessIdentifierAndASUpdate(
this, new_id, old_id, new_as,
2337 vector<string> families(
2371 string policy_name = delta.
id_name;
2375 if (proxy == NULL) {
2379 if (node == NULL || node->
IsDeleted()) {
2383 rtp =
config_->LocateRoutingPolicy(policy_name);
2389 if (proxy == NULL) {
2396 config_->DeleteRoutingPolicy(rtp);
2402 autogen::RoutingPolicy *rtp_config =
2403 static_cast<autogen::RoutingPolicy *
>(delta.
obj.get());
2404 rtp->
Update(
this, rtp_config);
2416 if (instance_name.empty() ||
2422 string name = delta.
id_name.substr(instance_name.size() + 1);
2431 BOOST_FOREACH(
const BgpIfmapConfigData::IfmapPeeringMap::value_type &value,
2461 if (peering == NULL) {
2463 if (proxy == NULL) {
2465 "ProcessBgpPeering failed. Cannot find proxy " <<
2470 if (node == NULL || delta.
obj.get() == NULL) {
2472 "ProcessBgpPeering failed. Cannot find node/obj " <<
2477 pair<IFMapNode *, IFMapNode *> routers;
2488 rti =
config_->LocateInstance(instance_name);
2491 peering =
config_->CreatePeering(rti, proxy);
2494 assert(node != NULL);
2495 if (delta.
obj.get() == NULL) {
2500 config_->DeletePeering(peering);
2517 autogen::BgpPeering *peering_config =
2518 static_cast<autogen::BgpPeering *
>(delta.
obj.get());
2519 peering->
Update(
this, peering_config);
2529 autogen::GlobalSystemConfig *
config, default_config;
2530 if (node == NULL || node->
IsDeleted() || delta.
obj.get() == NULL) {
2531 config = &default_config;
2533 config =
static_cast<autogen::GlobalSystemConfig *
>(delta.
obj.get());
2536 if (
config_->global_config()->Update(
this, config))
2547 autogen::GlobalQosConfig *
config, default_config;
2548 if (node == NULL || node->
IsDeleted() || delta.
obj.get() == NULL) {
2549 config = &default_config;
2551 config =
static_cast<autogen::GlobalQosConfig *
>(delta.
obj.get());
2554 if (
config_->global_qos()->Update(
this, config))
2565 for (ChangeList::const_iterator iter = change_list.begin();
2566 iter != change_list.end(); ++iter) {
2567 IdentifierMap::iterator loc =
id_map_.find(iter->id_type);
2569 (loc->second)(*iter);
#define BGP_CONFIG_LOG_PROTOCOL(type, server, protocol, level, flags,...)
virtual const BgpNeighborConfig * FindNeighbor(const std::string &instance_name, const std::string &name) const
void ProcessGlobalSystemConfig(const BgpConfigDelta &delta)
std::vector< std::string > route_targets
void set_peer_address(const IpAddress &address)
void ProcessRoutingPolicy(const BgpConfigDelta &change)
bool ext_community_match_all
const RouteTargetList & export_list() const
BgpIfmapPeeringConfig * FindPeering(const std::string &name)
const RouteTargetList & import_list() const
bool nh_check_enabled() const
void delete_neighbor(const std::string &neighbor)
void Update(BgpIfmapConfigManager *manager, const autogen::BgpRouter *router)
const BgpNeighborConfig * FindNeighbor(const std::string &name) const
std::vector< std::string > AddressFamilyList
void DeleteRoutingPolicyLink(BgpIfmapRoutingPolicyLinkConfig *ri_rp_link)
void AddPeering(BgpIfmapPeeringConfig *peering)
BgpIfmapInstanceConfig * instance()
void set_cluster_id(uint32_t cluster_id)
void set_subcluster_name(const std::string &name)
IFMapNodeProxy node_proxy_
void add_term(const RoutingPolicyTermConfig &term)
void AddInstance(BgpIfmapInstanceConfig *rti)
const IFMapNode * node() const
void ProcessBgpPeering(const BgpConfigDelta &change)
boost::intrusive_ptr< const autogen::BgpPeering > bgp_peering_
void set_virtual_network_index(int virtual_network_index)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
void Update(BgpIfmapConfigManager *manager, const autogen::RoutingPolicy *policy)
IFMapNodeProxy node_proxy_
void ReserveBit(int index)
static void SetStaticRouteConfig(BgpInstanceConfig *rti, const autogen::RoutingInstance *config)
void set_virtual_network_pbb_evpn_enable(bool pbb_evpn)
static bool GetRouteAggregateConfig(DBGraph *graph, IFMapNode *node, BgpInstanceConfig::AggregateRouteList *inet_list, BgpInstanceConfig::AggregateRouteList *inet6_list)
BgpConfigManager::RoutingPolicyMapRange RoutingPolicyMapItems(const std::string &start_name=std::string()) const
void set_gateway_address(Address::Family family, const IpAddress &address)
static void BuildFamilyAttributesList(BgpNeighborConfig *neighbor, const BgpNeighborConfig::AddressFamilyList &family_list, const vector< string > &remote_family_list)
const RouteTargetList & import_list() const
uint8_t control_dscp() const
BgpIfmapPeeringConfig * CreatePeering(BgpIfmapInstanceConfig *rti, IFMapNodeProxy *proxy)
BgpIfmapConfigManager(BgpServer *server)
std::pair< RoutingPolicyMap::const_iterator, RoutingPolicyMap::const_iterator > RoutingPolicyMapRange
void set_name(const std::string &name)
const BgpIfmapConfigData * config() const
void set_virtual_network_allow_transit(bool allow_transit)
const std::string & name() const
std::pair< InstanceMap::const_iterator, InstanceMap::const_iterator > InstanceMapRange
void Update(BgpIfmapConfigManager *manager, const autogen::RoutingInstance *config)
void set_gr_time(uint16_t gr_time)
void Update(BgpIfmapConfigManager *manager, const autogen::RoutingPolicyRoutingInstance *ri_rp)
void set_identifier(uint32_t identifier)
bool Update(BgpIfmapConfigManager *manager, const autogen::GlobalSystemConfig *system)
const std::string & instance_name() const
#define EVPN_ES_IMPORT_ROUTE_TARGET_AS2
uint32_t autonomous_system() const
void set_virtual_network(const std::string &virtual_network)
bool gr_bgp_helper() const
void SetNodeProxy(IFMapNodeProxy *proxy)
void BuildNeighbors(BgpIfmapConfigManager *manager, const autogen::BgpRouter *local_rt_config, const std::string &peername, const autogen::BgpRouter *remote_rt_config, const autogen::BgpPeering *peering, NeighborMap *map)
void set_always_compare_med(bool always_compare_med)
static const char * kMasterInstance
void reset_subcluster_id()
virtual ~BgpIfmapConfigManager()
BgpIfmapProtocolConfig * protocol_config_mutable()
void swap_aggregate_routes(Address::Family family, AggregateRouteList *list)
void Notify(const BgpConfigObject *, EventType)
boost::asio::ip::address IpAddress
PrefixMatchConfigList prefixes_to_match
uint16_t rd_cluster_seed() const
static string BgpIdentifierToString(uint32_t identifier)
void set_local_as(uint32_t local_as)
void set_subcluster_id(uint32_t id)
void ProcessIdentifierAndASUpdate(BgpIfmapConfigManager *manager, uint32_t new_id, uint32_t old_id, uint32_t new_as, uint32_t old_as)
CommunityList community_match
BgpGlobalSystemConfig data_
void set_vxlan_id(int vxlan_id)
virtual const BgpRoutingPolicyConfig * FindRoutingPolicy(const std::string &name) const
void Delete(BgpIfmapConfigManager *manager)
BgpIfmapRoutingPolicyConfig * LocateRoutingPolicy(const std::string &name)
void swap_routing_policy_list(RoutingPolicyConfigList *list)
virtual const char * Typename() const =0
std::vector< AggregateRouteConfig > AggregateRouteList
void set_private_as_action(const std::string &private_as_action)
BgpIfmapRoutingPolicyLinkConfig * CreateRoutingPolicyLink(BgpIfmapInstanceConfig *rti, BgpIfmapRoutingPolicyConfig *rtp, IFMapNodeProxy *proxy)
void set_peer_identifier(uint32_t identifier)
void set_index(int index)
void set_import_list(const RouteTargetList &import_list)
std::set< std::string > RouteTargetList
static void BuildPolicyTermConfig(autogen::PolicyTermType cfg_term, RoutingPolicyTermConfig *term)
void DeletePeering(BgpIfmapPeeringConfig *peering)
void set_loop_count(uint8_t loop_count)
BgpInstanceMap instance_config_map_
static void SetDscpValue(uint8_t value)
adjacency_iterator end(DBGraph *graph)
void set_hold_time(int hold_time)
const FamilyAttributesList & family_attributes_list() const
IfmapInstanceMap instances_
void DefaultAddressFamilyInit()
std::set< StaticRouteConfig > StaticRouteList
std::vector< std::string > communities
static bool GetVirtualNetworkPbbEvpnEnable(DBGraph *graph, IFMapNode *node)
~BgpIfmapProtocolConfig()
void SetNodeProxy(IFMapNodeProxy *proxy)
std::string router_type() const
static bool AddressFamilyIsValid(BgpNeighborConfig *neighbor, const string &family)
void AddNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor)
ValueType * At(int index) const
#define BGP_CONFIG_LOG_NEIGHBOR(type, server, neighbor, level, flags,...)
void set_source_port(uint16_t source_port)
CommunityList ext_community_remove
~BgpIfmapRoutingPolicyLinkConfig()
boost::scoped_ptr< BgpIfmapConfigData > config_
void ProcessBgpProtocol(const BgpConfigDelta &change)
ProtocolList protocols_match
#define EVPN_ES_IMPORT_ROUTE_TARGET_AS4
void DeleteNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor)
void Initialize(DB *db, DBGraph *db_graph, const std::string &localname)
#define BGP_LOG_STR(obj, level, flags, arg)
CommunityList community_remove
RoutingPolicyActionConfig action
void DeletePeering(BgpIfmapPeeringConfig *peer)
BgpRoutingPolicyConfig data_
bool gr_xmpp_helper() const
void set_local_autonomous_system(uint32_t local_autonomous_system)
void Delete(BgpIfmapConfigManager *manager)
static uint32_t IpAddressToBgpIdentifier(const IpAddress &address)
virtual const std::string & localname() const
void Swap(IFMapNodeProxy *rhs)
BgpIfmapRoutingPolicyConfig * policy()
bool Update(BgpIfmapConfigManager *manager, const autogen::GlobalQosConfig *qos)
bool always_compare_med() const
void SetOriginOverride(bool origin_override, std::string origin)
const NeighborMap & neighbors() const
BgpIfmapRoutingPolicyLinkConfig * FindRoutingPolicyLink(const std::string &name)
std::vector< std::string > default_tunnel_encap_list
IfmapPeeringMap peerings_
void set_hold_time(uint32_t hold_time)
boost::intrusive_ptr< const autogen::BgpRouter > bgp_router_
void set_key_type(KeyType in_type)
void DeleteRoutingPolicy(BgpIfmapRoutingPolicyConfig *rtp)
static bool GetRouterPair(DBGraph *db_graph, const std::string &localname, IFMapNode *node, std::pair< IFMapNode *, IFMapNode * > *pair)
#define BGP_LOG_FLAG_SYSLOG
const autogen::BgpRouterParams & router_params() const
const std::string & name() const
static const std::string integerToString(const NumberType &num)
void set_router_type(const std::string &router_type)
void Remove(const KeyType &key, int index, bool clear_bit=true)
#define BGP_CONFIG_LOG_INSTANCE(type, server, rtinstance, level, flags,...)
uint32_t identifier() const
static BgpNeighborConfig::AddressFamilyList default_addr_family_list
std::vector< ConfigDelta > ChangeList
void swap_service_chain_list(ServiceChainList *list)
IfmapRoutingPolicyMap routing_policies_
void InsertVitAndESRTargetInImportList(BgpIfmapConfigManager *manager, BgpInstanceConfig::RouteTargetList &import_list)
virtual int NeighborCount(const std::string &instance_name) const
static AuthenticationData::KeyType KeyChainType(const string &value)
boost::asio::ip::address_v6 Ip6Address
void swap_static_routes(Address::Family family, StaticRouteList *list)
std::pair< NeighborMap::const_iterator, NeighborMap::const_iterator > NeighborMapRange
static void GetRoutingInstanceExportTargets(DBGraph *graph, IFMapNode *node, vector< string > *target_list)
void STLDeleteElements(Container *container)
BgpIfmapInstanceConfig * LocateInstance(const std::string &name)
#define CHECK_CONCURRENCY(...)
std::vector< RoutingPolicyAttachInfo > RoutingPolicyConfigList
virtual RoutingPolicyMapRange RoutingPolicyMapItems(const std::string &start_name=std::string()) const
IFMapNodeProxy node_proxy_
void set_analytics_dscp(uint8_t value)
const std::string & virtual_network() const
BgpIfmapInstanceConfig * instance_
static void SetServiceChainConfig(BgpInstanceConfig *rti, const autogen::RoutingInstance *config)
bool DeleteIfEmpty(BgpConfigManager *manager)
std::vector< std::string > AuthKeysToString() const
void set_family_attributes_list(const FamilyAttributesList &family_attributes_list)
void DeleteRoutingPolicy(BgpIfmapRoutingPolicyConfig *rtp)
std::string GetESRouteTarget(uint32_t as) const
virtual const BgpProtocolConfig * GetProtocolConfig(const std::string &instance_name) const
bool DeleteIfEmpty(BgpConfigManager *manager)
uint16_t end_of_rib_timeout() const
CommunityList community_add
const AuthenticationData & auth_data() const
RoutingPolicyMatchConfig match
RouitngPolicyMap routing_policies_
void set_local_identifier(uint32_t identifier)
static const int kConfigTaskInstanceId
void set_enable_4byte_as(bool as_4byte)
void ProcessIdentifierUpdate(uint32_t new_id, uint32_t old_id)
virtual InstanceMapRange InstanceMapItems(const std::string &start_name=std::string()) const
void SetNodeProxy(IFMapNodeProxy *proxy)
BgpIfmapInstanceConfig * instance()
std::string AuthKeyTypeToString() const
CommunityList ext_community_set
#define BGP_LOG_WARNING_STR(obj, flags, arg)
void UpdateInstanceConfig(BgpIfmapInstanceConfig *rti, BgpConfigManager::EventType event)
BgpIfmapPeeringConfig(BgpIfmapInstanceConfig *instance)
uint32_t local_as() const
const std::string & name() const
void set_gr_xmpp_helper(bool helper)
~BgpIfmapInstanceConfig()
boost::asio::ip::address_v4 Ip4Address
boost::system::error_code Ip4SubnetParse(const string &str, Ip4Address *addr, int *plen)
uint16_t bgpaas_port_start() const
boost::intrusive_ptr< const autogen::RoutingPolicy > routing_policy_
void AddRoutingPolicy(BgpIfmapRoutingPolicyConfig *rtp)
AddressFamilyList GetAddressFamilies() const
static void GetConnectionExportTargets(DBGraph *graph, IFMapNode *src_node, const string &src_instance, IFMapNode *node, vector< string > *target_list)
std::vector< BgpFamilyAttributesConfig > FamilyAttributesList
void ProcessASUpdate(uint32_t new_as, uint32_t old_as)
std::vector< ServiceChainConfig > ServiceChainList
void set_llgr_time(uint64_t llgr_time)
IFMapObject * GetObject()
void set_keydata(const AuthenticationData &in_auth_data)
uint8_t analytics_dscp() const
~BgpIfmapRoutingPolicyConfig()
void ProcessBgpRouter(const BgpConfigDelta &change)
const std::string & InstanceName() const
BgpRoutingPolicyMap routing_policy_config_map_
virtual const BgpInstanceConfig * FindInstance(const std::string &name) const
uint8_t xmpp_hold_time() const
void set_fc_enabled(bool enable)
IfmapRoutingPolicyLinkMap ri_rp_links_
const std::string & name() const
uint16_t bgpaas_port_end() const
BgpIfmapProtocolConfig(BgpIfmapInstanceConfig *instance)
static int GetVirtualNetworkIndex(DBGraph *graph, IFMapNode *node)
BgpIfmapInstanceConfig * instance_
static void BuildPolicyTermsConfig(BgpRoutingPolicyConfig *policy_cfg, const autogen::RoutingPolicy *policy)
void set_rd_cluster_seed(uint16_t seed)
void set_gr_bgp_helper(bool helper)
static int GetVirtualNetworkVxlanId(DBGraph *graph, IFMapNode *node)
void DeleteInstance(BgpIfmapInstanceConfig *rti)
std::string GetVitFromId(uint32_t identifier) const
static bool GetRoutingInstanceRoutingPolicy(DBGraph *graph, IFMapNode *node, RoutingPolicyAttachInfo *ri_rp_link)
IFMapNodeProxy node_proxy_
const autogen::BgpPeering * bgp_peering() const
const BgpIfmapProtocolConfig * protocol_config() const
void set_bgpaas_port_start(uint16_t bgpaas_port_start)
void RemoveInstance(BgpIfmapInstanceConfig *rti)
void set_admin_down(bool admin_down)
void set_export_list(const RouteTargetList &export_list)
void Delete(BgpConfigManager *manager)
static BgpNeighborConfig * MakeBgpNeighborConfig(const BgpIfmapInstanceConfig *instance, const BgpIfmapInstanceConfig *master_instance, const string &local_name, const string &remote_name, const autogen::BgpRouter *local_router, const autogen::BgpRouter *remote_router, const autogen::BgpSession *session)
BgpIfmapRoutingPolicyConfig(const std::string &name)
void set_admin_down(bool admin_down)
void ProcessChanges(const ChangeList &change_list)
IFMapNodeProxy node_proxy_
std::map< std::string, BgpNeighborConfig * > NeighborMap
void set_gr_enable(bool enable)
CommunityList ext_community_match
boost::scoped_ptr< BgpIfmapProtocolConfig > protocol_
void ProcessGlobalQosConfig(const BgpConfigDelta &delta)
static void NeighborSetSessionAttributes(BgpNeighborConfig *neighbor, const string &localname, const autogen::BgpSession *session)
void SetNodeProxy(IFMapNodeProxy *proxy)
std::vector< BgpConfigDelta > ChangeList
void set_has_pnf(bool has_pnf)
void set_instance_name(const std::string &instance_name)
static bool GetInstanceTargetRouteTarget(DBGraph *graph, IFMapNode *node, string *target)
static const int kDefaultPort
bool enable_4byte_as() const
std::map< std::string, BgpNeighborConfig * > NeighborMap
static string IdentifierParent(const string &identifier)
void ChangeNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor)
void ProcessRoutingInstance(const BgpConfigDelta &change)
void set_passive(bool passive)
void add_neighbor(const std::string &neighbor)
void set_xmpp_hold_time(uint8_t hold_time)
void set_autonomous_system(uint32_t autonomous_system)
BgpIfmapProtocolConfig * LocateProtocol()
boost::scoped_ptr< BgpConfigListener > listener_
void SetNodeProxy(IFMapNodeProxy *proxy)
static void BuildKeyChain(BgpNeighborConfig *neighbor, const autogen::AuthenticationData &values)
static bool GetVirtualNetworkAllowTransit(DBGraph *graph, IFMapNode *node)
void set_index(int index)
void set_peer_as(uint32_t peer_as)
uint32_t local_identifier() const
BgpConfigManager::NeighborMapRange NeighborMapItems() const
void set_port(uint16_t port)
void AddKeyToKeyChain(const AuthenticationKey &key)
void Update(BgpIfmapConfigManager *manager, const autogen::BgpPeering *peering)
BgpInstanceConfig * instance_config()
void Delete(BgpIfmapConfigManager *manager)
void set_as_override(bool as_override)
const std::string & name() const
BgpIfmapRoutingPolicyLinkConfig(BgpIfmapInstanceConfig *rti, BgpIfmapRoutingPolicyConfig *rtp)
virtual void ResetRoutingInstanceIndexBit(int index)
IfmapInstanceMap & instances()
adjacency_iterator begin(DBGraph *graph)
CommunityList community_set
uint32_t llgr_time() const
BgpIfmapInstanceConfig * FindInstance(const std::string &name)
CommunityList ext_community_add
const IpAddress & peer_address() const
BgpIfmapInstanceConfig(const std::string &name)
const BgpServer * server()
BgpConfigManager::InstanceMapRange InstanceMapItems(const std::string &start_name=std::string()) const
void set_end_of_rib_timeout(uint16_t time)
const BgpProtocolConfig * protocol_config() const
const IFMapNode * node() const
boost::intrusive_ptr< const autogen::RoutingPolicyRoutingInstance > ri_rp_link_
static bool CompareRoutingPolicyOrder(const RoutingPolicyAttachInfo &lhs, const RoutingPolicyAttachInfo &rhs)
virtual NeighborMapRange NeighborMapItems(const std::string &instance_name) const
BgpRoutingPolicyConfig * routing_policy_config()
void reset_subcluster_name()
ValueType * Find(const KeyType &key) const
#define MODULE_INITIALIZER(Func)
#define BGP_CONFIG_LOG_PEERING(type, server, peering, level, flags,...)
size_t Insert(const KeyType &key, ValueType *value, int index=-1)
BgpIfmapRoutingPolicyConfig * FindRoutingPolicy(const std::string &name)
void set_uuid(const std::string &uuid)
const autogen::BgpRouter * bgp_router() const
void DefaultBgpRouterParams(autogen::BgpRouterParams *param)
static bool GetInstancePolicyPair(DBGraph *graph, IFMapNode *node, std::pair< IFMapNode *, IFMapNode * > *pair)
void set_bgpaas_port_end(uint16_t bgpaas_port_end)
boost::system::error_code Inet6SubnetParse(const string &str, Ip6Address *addr, int *plen)
std::string routing_policy_
void ProcessRoutingPolicyLink(const BgpConfigDelta &change)
int virtual_network_index() const
static const uint32_t kDefaultAutonomousSystem
void set_nh_check_enabled(bool enable)
void set_control_dscp(uint8_t value)