7 #include <boost/assign/list_of.hpp>
8 #include <boost/foreach.hpp>
12 #include "sandesh/sandesh_trace.h"
14 #include "bgp/bgp_peer_types.h"
19 using boost::assign::list_of;
26 vector<Address::Family> vpn_family_list = list_of
50 bool first =
import_[family].empty();
56 bool first =
export_[family].empty();
72 BOOST_FOREACH(
const RtGroupMembers::value_type &family_members,
import_) {
73 if (!family_members.second.empty())
76 BOOST_FOREACH(
const RtGroupMembers::value_type &family_members,
export_) {
77 if (!family_members.second.empty())
87 if (import_list.size() > 1)
89 table = *import_list.begin();
94 if (export_list.size() > 1)
96 table = *export_list.begin();
108 dep_[part_id].insert(rt);
112 dep_[part_id].erase(rt);
123 for (RTargetDepRouteList::const_iterator it =
dep_.begin();
124 it !=
dep_.end(); ++it) {
137 InterestedPeerList::iterator it =
peer_list_.find(peer);
141 assert(peer->GetIndex() >= 0);
144 it->second.insert(rt);
148 InterestedPeerList::iterator it =
peer_list_.find(peer);
150 it->second.erase(rt);
151 if (it->second.empty()) {
163 BOOST_FOREACH(
const InterestedPeerList::value_type &peer,
peer_list_) {
164 if (peer.first->peer_basename() == name)
171 vector<ShowRtGroupMemberTableList> *member_list)
const {
172 BOOST_FOREACH(
const RtGroupMembers::value_type &rt_tables, rt_members) {
173 ShowRtGroupMemberTableList member;
174 vector<string> table_names;
175 BOOST_FOREACH(
BgpTable *table, rt_tables.second) {
176 table_names.push_back(table->
name());
179 member.set_tables(table_names);
180 member_list->push_back(member);
185 BOOST_FOREACH(
const InterestedPeerList::value_type &peer,
peer_list_) {
186 interested_peers->push_back(peer.first->peer_basename());
191 for (RTargetDepRouteList::const_iterator dep_it =
dep_.begin();
192 dep_it !=
dep_.end(); ++dep_it) {
193 for (RouteList::const_iterator dep_rt_it = dep_it->begin();
194 dep_rt_it != dep_it->end(); ++dep_rt_it) {
195 rtlist->push_back((*dep_rt_it)->ToString());
201 bool fill_peers,
bool fill_routes)
const {
204 vector<ShowRtGroupMemberTableList> import_members;
206 info->set_import_members(import_members);
207 vector<ShowRtGroupMemberTableList> export_members;
209 info->set_export_members(export_members);
212 vector<string> interested_peers;
214 info->set_peers_interested(interested_peers);
217 vector<string> rtlist;
219 info->set_dep_route(rtlist);
void FillShowPeerInfo(ShowRtGroupInfo *info) const
std::set< RTargetRoute * > RTargetRouteList
bool RemoveImportTable(Address::Family family, BgpTable *tbl)
void RemoveDepRoute(int part_id, BgpRoute *rt)
std::set< BgpTable * > RtGroupMemberList
void FillShowInfoCommon(ShowRtGroupInfo *info, bool fill_peers, bool fill_routes) const
void FillMemberTables(const RtGroupMembers &rt_members, std::vector< ShowRtGroupMemberTableList > *member_list) const
bool AddExportTable(Address::Family family, BgpTable *tbl)
const RtGroupMemberList & GetExportTables(Address::Family family) const
bool HasDepRoutes() const
BitSet & reset(size_t pos)
virtual bool IsVpnTable() const
const RtGroupMemberList & GetImportTables(Address::Family family) const
void FillInterestedPeers(std::vector< std::string > *interested_peers) const
InterestedPeerList peer_list_
RtGroupInterestedPeerSet interested_peers_
void AddDepRoute(int part_id, BgpRoute *rt)
const RtGroupInterestedPeerSet & GetInterestedPeers() const
void FillShowSummaryInfo(ShowRtGroupInfo *info) const
bool HasVrfTables(Address::Family family) const
void FillDependentRoutes(std::vector< std::string > *rtlist) const
const std::string & name() const
bool HasInterestedPeers() const
bool AddImportTable(Address::Family family, BgpTable *tbl)
bool HasInterestedPeer(const std::string &name) const
static std::string FamilyToString(Family fmly)
bool HasImportExportTables() const
std::string ToString() const
std::vector< RouteList > RTargetDepRouteList
RtGroup(const RouteTarget &rt)
void NotifyDepRoutes(int part_id)
std::map< Address::Family, RtGroupMemberList > RtGroupMembers
void AddInterestedPeer(const BgpPeer *peer, RTargetRoute *rt)
DBTablePartBase * get_table_partition() const
void Notify(DBEntryBase *entry)
bool RemoveExportTable(Address::Family family, BgpTable *tbl)
void FillShowInfo(ShowRtGroupInfo *info) const
void RemoveInterestedPeer(const BgpPeer *peer, RTargetRoute *rt)