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