5 #include <boost/foreach.hpp>
6 #include <boost/assign/list_of.hpp>
7 #include <boost/scoped_ptr.hpp>
16 #include "bgp/bgp_peer_types.h"
19 using boost::assign::list_of;
20 using std::back_inserter;
26 : peer_(peer), flap_count_(0) {
121 const std::vector<BgpProto::OpenMessage::Capability *> &
128 uint32_t path_flags)
const {
183 "GR address families list is empty");
191 "GR restart time value is 0 seconds and (there is no applicable "
202 "GR families list differs from the list received last time");
211 "families differs from negotiated address families");
219 if (family.forwarding_state_preserved())
231 "enabled because after restart, GR forwarding state is not "
232 "preserved for address family " << family_str);
251 " been held administratively down");
265 "has been held administratively down");
277 static vector<string> unsupported_families = list_of
285 vector<string> differing_families;
288 back_inserter(differing_families));
291 return includes(unsupported_families.begin(), unsupported_families.end(),
292 differing_families.begin(), differing_families.end());
308 "No LLGR support due to empty LLGR address families list");
320 "GR address families and LLGR address families");
333 if (!family.forwarding_state_preserved()) {
337 "enabled because after restart, LLGR forwarding state is not "
338 "preserved for address family " << family_str);
372 vector<Address::Family> gr_families;
373 vector<uint8_t> afi_flags;
391 gr_families.push_back(family);
393 ForwardingStatePreservedFlag);
399 afi_flags, gr_families);
418 peer_info->set_long_lived_graceful_restart_families(
llgr_families_);
420 peer_info->set_long_lived_graceful_restart_time(
422 assert(!peer_info->get_name().empty());
446 vector<Address::Family> llgr_families;
449 llgr_families.push_back(family);
462 bnr->set_graceful_restart_address_families(
gr_families_);
463 bnr->set_long_lived_graceful_restart_address_families(
llgr_families_);
465 bnr->set_long_lived_graceful_restart_time(
std::vector< Family > families
std::vector< std::string > llgr_families_
virtual void GetLongLivedGracefulRestartFamilies(Families *families) const
virtual void CustomClose()
virtual bool IsGRHelperModeEnabled() const
virtual int GetLongLivedGracefulRestartTime() const
static Capability * Encode(uint16_t gr_time, bool restarted, bool notification, const std::vector< uint8_t > &gr_afi_flags, const std::vector< Address::Family > &gr_families)
PeerCloseManager * close_manager()
static void GetFamilies(const LLGR &llgr_params, std::vector< std::string > *families)
virtual bool IsReady() const
virtual void LongLivedGracefulRestartStale()
bool IsInLlgrTimerWaitState() const
virtual bool IsPeerAdminDown() const
static Family FamilyFromString(const std::string &family)
bool IsInGRTimerWaitState() const
static Address::Family AfiSafiToFamily(uint16_t afi, uint8_t safi)
BgpGlobalSystemConfig * global_config()
virtual void CloseComplete()
bool LookupFamily(Address::Family family)
bool IsLlgrSupportedForFamilies() const
uint32_t GetLongLivedGracefulRestartTime() const
#define BGP_UVE_SEND(type, object)
virtual const std::vector< std::string > & negotiated_families() const
virtual int GetGracefulRestartTime() const
uint64_t total_flap_count() const
virtual int GetTaskInstance() const
static bool Decode(GR *gr_params, const std::vector< Capability * > &capabilities)
bool IsGRHelperModeEnabled() const
std::vector< std::string > gr_families_
void FillNeighborInfo(BgpNeighborResp *bnr) const
virtual BgpServer * server()
bool IsCloseLongLivedGracefulInternal() const
StateMachine * state_machine()
BgpProto::OpenMessage::Capability::GR gr_params_
virtual PeerCloseManager * GetManager() const
virtual bool IsCloseLongLivedGraceful() const
virtual bool IsPeerDeleted() const
virtual void ReceiveEndOfRIB(Address::Family family)
virtual void GracefulRestartStale()
const std::vector< std::string > & negotiated_families() const
std::vector< Family > families
static void GetFamilies(const GR &gr_params, std::vector< std::string > *families)
virtual bool IsInLlgrTimerWaitState() const
virtual void UpdateRouteStats(Address::Family family, const BgpPath *old_path, uint32_t path_flags) const
bool SetGRCapabilities(BgpPeerInfoData *peer_info)
#define CHECK_CONCURRENCY(...)
virtual const std::vector< std::string > & PeerNegotiatedFamilies() const
static Capability * Encode(uint32_t llgr_time, uint8_t llgr_afi_flags, const std::vector< Address::Family > &llgr_families)
virtual bool IsServerAdminDown() const
void UpdateRouteStats(Address::Family family, const BgpPath *old_path, uint32_t path_flags) const
virtual void Close(bool graceful)
virtual bool IsServerDeleted() const
static std::string FamilyToString(Family fmly)
virtual bool IsCloseGraceful() const
const std::vector< BgpProto::OpenMessage::Capability * > & capabilities() const
void AddGRCapabilities(BgpProto::OpenMessage::OptParam *opt_param)
BgpProto::OpenMessage::Capability::LLGR llgr_params_
virtual IPeer * peer() const
static bool Decode(LLGR *llgr_params, const std::vector< Capability * > &capabilities)
void Close(bool graceful)
virtual bool IsServerStartingUp() const
virtual const char * GetTaskName() const
virtual void MembershipRequestCallbackComplete()
std::vector< Capability * > capabilities
virtual bool IsInGRTimerWaitState() const
virtual bool IsReady() const
static const std::vector< Address::Family > & supported_families()
void ReceiveEndOfRIB(Address::Family family, size_t msgsize)
virtual void GetGracefulRestartFamilies(Families *families) const
virtual void RestartStateMachine()
virtual void GracefulRestartSweep()
std::set< Address::Family > Families
uint16_t GetGracefulRestartTime() const
BgpPeerClose(BgpPeer *peer)
virtual const std::vector< BgpProto::OpenMessage::Capability * > & capabilities() const
std::vector< std::string > negotiated_families_
void AddLLGRCapabilities(BgpProto::OpenMessage::OptParam *opt_param)
#define BGP_LOG_PEER(type, peer, level, flags, dir, arg)
virtual bool IsGRReady() const