OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bfd_common.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 CodiLime, Inc. All rights reserved.
3  */
4 #ifndef SRC_BFD_BFD_COMMON_H_
5 #define SRC_BFD_BFD_COMMON_H_
6 
7 #include <ostream>
8 #include <string>
9 #include <boost/asio.hpp>
10 #include <boost/optional.hpp>
11 #include <boost/date_time.hpp>
12 #include <boost/random/taus88.hpp>
13 
14 #include "base/util.h"
15 
16 namespace BFD {
17 typedef uint32_t Discriminator;
18 typedef boost::posix_time::time_duration TimeInterval;
19 typedef uint32_t ClientId;
20 
21 enum BFDState {
23 };
24 
25 enum Port {
26  kSingleHop = 3784,
27  kMultiHop = 4784,
28  kSendPortMin = 49152,
29  kSendPortMax = 65535,
30 };
31 
32 enum AuthType {
39 };
40 
41 enum ResultCode {
47 };
48 
49 enum Diagnostic {
60 };
61 
62 std::ostream &operator<<(std::ostream &, enum BFDState);
63 boost::optional<BFDState> BFDStateFromString(const std::string& s);
64 
65 struct SessionIndex {
66 public:
67  SessionIndex(uint32_t if_index = 0, uint32_t vrf_index = 0) :
69  bool operator<(const SessionIndex &other) const {
72  return false;
73  }
74 
75  const std::string to_string() const {
76  std::ostringstream os;
77  os << "if_index:" << if_index << ", vrf_index: " << vrf_index;
78  return os.str();
79  }
80 
81  uint32_t if_index;
82  uint32_t vrf_index;
83 };
84 
85 struct SessionKey {
86 public:
87  SessionKey(const boost::asio::ip::address &remote_address,
88  const SessionIndex &session_index = SessionIndex(),
89  uint16_t remote_port = kSingleHop,
90  const boost::asio::ip::address &local_address =
91  boost::asio::ip::address()) :
93  remote_address(remote_address), index(session_index),
95  }
96 
98 
99  bool operator<(const SessionKey &other) const {
101  BOOL_KEY_COMPARE(remote_address, other.remote_address);
103  BOOL_KEY_COMPARE(index, other.index);
104  return false;
105  }
106 
107  const std::string to_string() const {
108  std::ostringstream os;
109  os << local_address << ":" << remote_address << ":";
110  os << index.to_string() << ":" << ":" << remote_port;
111  return os.str();
112  }
113 
114  boost::asio::ip::address local_address;
115  boost::asio::ip::address remote_address;
116  SessionIndex index; // InterfaceIndex or VrfIndex
117  uint16_t remote_port;
118 };
119 
121  SessionConfig() : desiredMinTxInterval(boost::posix_time::seconds(1)),
122  requiredMinRxInterval(boost::posix_time::seconds(0)),
124 
127  int detectionTimeMultiplier; // max-retries ?
128 };
129 
130 typedef boost::function<void(const SessionKey &key,
131  const BFD::BFDState &state)> ChangeCb;
132 extern const int kMinimalPacketLength;
133 extern const TimeInterval kIdleTxInterval;
134 extern boost::random::taus88 randomGen;
135 } // namespace BFD
136 
137 #endif // SRC_BFD_BFD_COMMON_H_
uint32_t Discriminator
Definition: bfd_common.h:17
bool operator<(const SessionKey &other) const
Definition: bfd_common.h:99
AuthType
Definition: bfd_common.h:32
TimeInterval desiredMinTxInterval
Definition: bfd_common.h:125
std::ostream & operator<<(std::ostream &out, BFDState state)
Definition: bfd_common.cc:23
boost::asio::ip::address local_address
Definition: bfd_common.h:114
uint32_t vrf_index
Definition: bfd_common.h:82
uint32_t ClientId
Definition: bfd_common.h:19
boost::optional< BFDState > BFDStateFromString(const std::string &str)
Definition: bfd_common.cc:33
TimeInterval requiredMinRxInterval
Definition: bfd_common.h:126
boost::random::taus88 randomGen
Definition: bfd_common.cc:43
Diagnostic
Definition: bfd_common.h:49
boost::asio::ip::address remote_address
Definition: bfd_common.h:115
SessionKey(const boost::asio::ip::address &remote_address, const SessionIndex &session_index=SessionIndex(), uint16_t remote_port=kSingleHop, const boost::asio::ip::address &local_address=boost::asio::ip::address())
Definition: bfd_common.h:87
bool operator<(const SessionIndex &other) const
Definition: bfd_common.h:69
boost::posix_time::time_duration TimeInterval
Definition: bfd_common.h:18
#define BOOL_KEY_COMPARE(x, y)
Definition: util.h:64
SessionIndex index
Definition: bfd_common.h:116
ResultCode
Definition: bfd_common.h:41
const int kMinimalPacketLength
Definition: bfd_common.cc:41
boost::function< void(const SessionKey &key, const BFD::BFDState &state)> ChangeCb
Definition: bfd_common.h:131
uint16_t remote_port
Definition: bfd_common.h:117
const TimeInterval kIdleTxInterval
Definition: bfd_common.cc:42
BFDState
Definition: bfd_common.h:21
SessionIndex(uint32_t if_index=0, uint32_t vrf_index=0)
Definition: bfd_common.h:67
const std::string to_string() const
Definition: bfd_common.h:75
const std::string to_string() const
Definition: bfd_common.h:107
uint32_t if_index
Definition: bfd_common.h:81