OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bfd_session.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 CodiLime, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_BFD_BFD_SESSION_H_
6 #define SRC_BFD_BFD_SESSION_H_
7 
8 #include "bfd/bfd_common.h"
10 
11 #include <string>
12 #include <map>
13 #include <boost/scoped_ptr.hpp>
14 #include <boost/asio/ip/address.hpp>
15 
16 #include "base/timer.h"
17 #include "io/event_manager.h"
18 
19 namespace BFD {
20 class Connection;
21 struct SessionConfig;
22 struct ControlPacket;
23 
26  minRxInterval(boost::posix_time::seconds(1)),
27  minTxInterval(boost::posix_time::seconds(0)),
29  state(kDown) {}
30 
36 };
37 
38 struct BFDStats {
43 
44  int rx_count;
45  int tx_count;
50 };
51 
52 class Session {
53  public:
54  Session(Discriminator localDiscriminator, const SessionKey &key,
56  Connection *communicator);
57  virtual ~Session();
58 
59  void Stop();
61  void InitPollSequence();
62  void RegisterChangeCallback(ClientId client_id, ChangeCb cb);
63  void UnregisterChangeCallback(ClientId client_id);
64  void UpdateConfig(const SessionConfig& config);
65 
66  std::string toString() const;
67  const SessionKey & key() const;
68  BFDState local_state() const;
69  SessionConfig config() const;
72  bool Up() const;
73  BFDStats & Stats() { return stats_; }
74 
77 
78  // Yields number of registered callbacks.
79  // Server::SessionManager will delete a Session instance if its
80  // reference count drops to zero.
81  int reference_count();
82 
83  // Used only in UTs
85  {
86  // Setting stopped_ as true so that Session::Stop can be avoided
87  // in destructor. It was adding unnecessary complications in UT
88  stopped_ = true;
89  // creating a default session key for UT
90  key_ = SessionKey();
91  }
92 
93  protected:
94  bool RecvTimerExpired();
95 
96  private:
97  typedef std::map<ClientId, ChangeCb> Callbacks;
98 
99  bool SendTimerExpired();
100  void ScheduleSendTimer();
102  void PreparePacket(const SessionConfig &config, ControlPacket *packet);
103  void SendPacket(const ControlPacket *packet);
104  void CallStateChangeCallbacks(const SessionKey &key,
105  const BFD::BFDState &new_state);
106  boost::asio::ip::udp::endpoint GetRandomLocalEndPoint() const;
107  uint16_t GetRandomLocalPort() const;
109 
117  boost::scoped_ptr<StateMachine> sm_;
120  boost::asio::ip::udp::endpoint local_endpoint_;
121  boost::asio::ip::udp::endpoint remote_endpoint_;
122  bool started_;
123  bool stopped_;
126 };
127 
128 } // namespace BFD
129 
130 #endif // SRC_BFD_BFD_SESSION_H_
bool RecvTimerExpired()
Definition: bfd_session.cc:66
uint32_t Discriminator
Definition: bfd_common.h:17
const SessionKey & key() const
Definition: bfd_session.cc:271
SessionConfig nextConfig_
Definition: bfd_session.h:115
void UnregisterChangeCallback(ClientId client_id)
Definition: bfd_session.cc:309
void PreparePacket(const SessionConfig &config, ControlPacket *packet)
Definition: bfd_session.cc:161
BFDState local_state_non_locking() const
Definition: bfd_session.cc:139
int reference_count()
Definition: bfd_session.cc:320
bool SendTimerExpired()
Definition: bfd_session.cc:54
Callbacks callbacks_
Definition: bfd_session.h:124
BFDStats stats_
Definition: bfd_session.h:125
std::string toString() const
Definition: bfd_session.cc:80
Connection * communicator_
Definition: bfd_session.h:119
TimeInterval tx_interval()
Definition: bfd_session.cc:251
std::map< ClientId, ChangeCb > Callbacks
Definition: bfd_session.h:97
uint32_t ClientId
Definition: bfd_common.h:19
boost::scoped_ptr< StateMachine > sm_
Definition: bfd_session.h:117
SessionConfig currentConfig_
Definition: bfd_session.h:114
Discriminator discriminator
Definition: bfd_session.h:31
BFDRemoteSessionState remote_state() const
Definition: bfd_session.cc:289
void CallStateChangeCallbacks(const SessionKey &key, const BFD::BFDState &new_state)
Definition: bfd_session.cc:297
Timer * recvTimer_
Definition: bfd_session.h:113
TimeInterval detection_time()
Definition: bfd_session.cc:245
Timer * sendTimer_
Definition: bfd_session.h:112
TimeInterval minRxInterval
Definition: bfd_session.h:32
uint32_t send_timer_expired_count
Definition: bfd_session.h:49
boost::posix_time::time_duration TimeInterval
Definition: bfd_common.h:18
int tx_error_count
Definition: bfd_session.h:47
int rx_error_count
Definition: bfd_session.h:46
void RegisterChangeCallback(ClientId client_id, ChangeCb cb)
Definition: bfd_session.cc:305
boost::asio::ip::udp::endpoint GetRandomLocalEndPoint() const
BFDRemoteSessionState remoteSession_
Definition: bfd_session.h:116
boost::asio::ip::udp::endpoint remote_endpoint_
Definition: bfd_session.h:121
Discriminator localDiscriminator_
Definition: bfd_session.h:110
SessionConfig config() const
Definition: bfd_session.cc:285
ResultCode
Definition: bfd_common.h:41
boost::function< void(const SessionKey &key, const BFD::BFDState &state)> ChangeCb
Definition: bfd_common.h:131
BFDState
Definition: bfd_common.h:21
SessionKey key_
Definition: bfd_session.h:111
boost::asio::ip::udp::endpoint local_endpoint_
Definition: bfd_session.h:120
void InitPollSequence()
Definition: bfd_session.cc:151
virtual ~Session()
Definition: bfd_session.cc:49
uint32_t receive_timer_expired_count
Definition: bfd_session.h:48
BFDState local_state() const
Definition: bfd_session.cc:143
ResultCode ProcessControlPacket(const ControlPacket *packet)
Definition: bfd_session.cc:173
BFDStats & Stats()
Definition: bfd_session.h:73
Discriminator local_discriminator() const
Definition: bfd_session.cc:293
Definition: timer.h:54
void SendPacket(const ControlPacket *packet)
Definition: bfd_session.cc:225
bool pollSequence_
Definition: bfd_session.h:118
TimeInterval minTxInterval
Definition: bfd_session.h:33
void ScheduleSendTimer()
Definition: bfd_session.cc:98
void ScheduleRecvDeadlineTimer()
Definition: bfd_session.cc:131
bool Up() const
Definition: bfd_session.cc:324
static EventManager evm
void UpdateConfig(const SessionConfig &config)
Definition: bfd_session.cc:313
uint16_t GetRandomLocalPort() const
Definition: bfd_session.cc:44