Line data Source code
1 : /* 2 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #ifndef SRC_BGP_BGP_PEER_CLOSE_H__ 6 : #define SRC_BGP_BGP_PEER_CLOSE_H__ 7 : 8 : #include <set> 9 : #include <string> 10 : #include <vector> 11 : 12 : #include "bgp/ipeer.h" 13 : 14 : class BgpNeighborResp; 15 : class BgpPath; 16 : class BgpPeerInfoData; 17 : class PeerCloseManager; 18 : 19 : class BgpPeerClose : public IPeerClose { 20 : public: 21 : typedef std::set<Address::Family> Families; 22 : 23 : explicit BgpPeerClose(BgpPeer *peer); 24 : virtual ~BgpPeerClose(); 25 : virtual void CustomClose(); 26 : virtual void GracefulRestartStale(); 27 : virtual void LongLivedGracefulRestartStale(); 28 : virtual void GracefulRestartSweep(); 29 : virtual bool IsReady() const; 30 : virtual IPeer *peer() const; 31 : virtual void Close(bool graceful); 32 : virtual void Delete(); 33 : virtual int GetGracefulRestartTime() const; 34 : virtual int GetLongLivedGracefulRestartTime() const; 35 : virtual void ReceiveEndOfRIB(Address::Family family); 36 : virtual const char *GetTaskName() const; 37 : virtual int GetTaskInstance() const; 38 : virtual void MembershipRequestCallbackComplete(); 39 : 40 : virtual bool IsCloseGraceful() const; 41 : virtual bool IsCloseLongLivedGraceful() const; 42 : virtual void CloseComplete(); 43 : virtual void GetGracefulRestartFamilies(Families *families) const; 44 : virtual void GetLongLivedGracefulRestartFamilies(Families *families) const; 45 : virtual PeerCloseManager *GetManager() const; 46 : virtual void UpdateRouteStats(Address::Family family, 47 : const BgpPath *old_path, uint32_t path_flags) const; 48 : 49 : void AddGRCapabilities(BgpProto::OpenMessage::OptParam *opt_param); 50 : void AddLLGRCapabilities(BgpProto::OpenMessage::OptParam *opt_param); 51 : bool SetGRCapabilities(BgpPeerInfoData *peer_info); 52 : void FillNeighborInfo(BgpNeighborResp *bnr) const; 53 : virtual void RestartStateMachine(); 54 2389 : const BgpProto::OpenMessage::Capability::GR &gr_params() const { 55 2389 : return gr_params_; 56 : } 57 : 58 : private: 59 : virtual bool IsGRReady() const; 60 : virtual bool IsGRHelperModeEnabled() const; 61 : virtual const std::vector<std::string> &negotiated_families() const; 62 : virtual const std::vector<std::string> &PeerNegotiatedFamilies() const; 63 : virtual bool IsPeerDeleted() const; 64 : virtual bool IsPeerAdminDown() const; 65 : virtual bool IsServerDeleted() const; 66 : virtual bool IsServerAdminDown() const; 67 : virtual bool IsInGRTimerWaitState() const; 68 : virtual bool IsInLlgrTimerWaitState() const; 69 : virtual const std::vector<BgpProto::OpenMessage::Capability *> 70 : &capabilities() const; 71 : bool IsLlgrSupportedForFamilies() const; 72 : bool IsCloseLongLivedGracefulInternal() const; 73 : 74 : BgpPeer *peer_; 75 : uint64_t flap_count_; 76 : std::vector<std::string> negotiated_families_; 77 : std::vector<std::string> gr_families_; 78 : std::vector<std::string> llgr_families_; 79 : BgpProto::OpenMessage::Capability::GR gr_params_; 80 : BgpProto::OpenMessage::Capability::LLGR llgr_params_; 81 : 82 : DISALLOW_COPY_AND_ASSIGN(BgpPeerClose); 83 : }; 84 : 85 : #endif // SRC_BGP_BGP_PEER_CLOSE_H__