OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
diag.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef vnsw_agent_diag_diag_hpp
6 #define vnsw_agent_diag_diag_hpp
7 
8 #include <base/logging.h>
9 #include <base/address.h>
10 #include <base/timer.h>
11 #include <base/queue_task.h>
12 #include "boost/date_time/posix_time/posix_time.hpp"
13 
14 class Agent;
15 struct AgentDiagPktData;
16 struct OverlayOamPktData;
17 class DiagProto;
18 class DiagTable;
19 class DiagPktHandler;
20 
21 class DiagEntry {
22 public:
23  typedef uint16_t DiagKey;
24  typedef Timer DiagTimer;
25 
26  DiagEntry(const std::string &sip, const std::string &dip, uint8_t proto,
27  uint16_t sport, uint16_t dport, const std::string &vrf_name,
28  int timeout, int count, DiagTable *diag_table);
29  virtual ~DiagEntry();
30  void Init();
31  void EnqueueForceDelete();
32  virtual void SendRequest() = 0;
33  virtual void HandleReply(DiagPktHandler *handler) = 0;
34  virtual void RequestTimedOut(uint32_t seq_no) = 0;
35  virtual void SendSummary() { };
36  bool TimerExpiry(uint32_t seqno);
37  void RestartTimer();
38  virtual bool IsDone();
39  virtual bool ResendOnTimerExpiry() { return true; }
40  DiagKey GetKey() { return key_;};
41  uint32_t GetSeqNo() {return seq_no_;};
42  uint32_t GetMaxAttempts() {return max_attempts_;};
43  void SetKey(DiagKey key) {key_ = key;};
44  virtual void Retry();
45  bool TimerCancel() {
46  return timer_->Cancel();
47  }
48  DiagTable* diag_table() const {
49  return diag_table_;
50  }
51  uint32_t HashValUdpSourcePort();
52  void FillOamPktHeader(OverlayOamPktData *pktdata, uint32_t vxlan_id,
53  const boost::posix_time::ptime &time);
54 
55 protected:
58  uint8_t proto_;
59  uint16_t sport_;
60  uint16_t dport_;
61  std::string vrf_name_;
62  boost::system::error_code ec_;
63 
66 
67  int timeout_;
69  uint32_t max_attempts_;
70  uint32_t seq_no_;
71 };
72 
74  enum Op {
77  };
78 
80  memset(data_, 0, sizeof(data_));
81  }
82  uint32_t op_;
84  uint32_t seq_no_;
85  char data_[8];
86  boost::posix_time::ptime rtt_;
87 };
88 
89 struct DiagEntryOp {
90  enum Op {
91  ADD = 1,
92  DEL,
95  };
96 
98  }
99 
102 };
103 
104 class DiagTable {
105 public:
106  typedef std::map<DiagEntry::DiagKey, DiagEntry *> DiagEntryTree;
107  static const std::string kDiagData;
109  ~DiagTable();
110  void Add(DiagEntry *);
111  void Delete(DiagEntry *);
113 
114  void Shutdown();
115  void Enqueue(DiagEntryOp *op);
116  bool Process(DiagEntryOp *op);
117  Agent* agent() const { return agent_; }
118  DiagProto *diag_proto() const { return diag_proto_.get(); }
119 
120 private:
121  uint16_t index_;
123  boost::scoped_ptr<DiagProto> diag_proto_;
126 };
127 
128 struct OamTlv {
129  enum Type {
138  };
139 
140  struct VxlanOamV4Tlv {
141  uint32_t vxlan_id_;
142  uint32_t sip_;
143  };
144 
145  struct VxlanOamV6Tlv {
146  uint32_t vxlan_id_;
147  uint8_t sip_[16];
148  };
149 
150  uint16_t type_;
151  uint16_t length_;
152  char data_[1];
153 };
154 
155 struct SubTlv {
156  enum Type {
162  };
163 
164  enum ReturnCode {
167  };
168 
169  uint16_t type_;
170  uint16_t length_;
171 
172  struct EndSystemMac {
173  uint8_t mac[6];
174  uint16_t return_code;
175  };
176 };
177 
179  enum MsgType {
182  };
183 
184  enum Returncode {
190  };
191 
192  enum Replymode {
196  };
197 
198  uint8_t msg_type_;
199  uint8_t reply_mode_;
200  uint8_t return_code_;
202  uint32_t org_handle_;
203  uint32_t seq_no_;
204  uint32_t timesent_sec_;
205  uint32_t timesent_misec_;
206  uint32_t timerecv_sec_;
207  uint32_t timerecv_misec_;
209 };
210 #endif
uint16_t length_
Definition: diag.h:170
IpAddress dip_
Definition: diag.h:57
boost::system::error_code ec_
Definition: diag.h:62
int timeout_
Definition: diag.h:67
IpAddress sip_
Definition: diag.h:56
uint32_t GetMaxAttempts()
Definition: diag.h:42
uint32_t timerecv_sec_
Definition: diag.h:206
DiagProto * diag_proto() const
Definition: diag.h:118
boost::posix_time::ptime rtt_
Definition: diag.h:86
void Shutdown()
Definition: diag.cc:127
Definition: diag.h:128
DiagTable(Agent *agent)
Definition: diag.cc:116
uint8_t proto_
Definition: diag.h:58
boost::asio::ip::address IpAddress
Definition: address.h:13
static const std::string kDiagData
Definition: diag.h:107
uint32_t seq_no_
Definition: diag.h:84
uint8_t return_code_
Definition: diag.h:200
uint32_t op_
Definition: diag.h:82
void Delete(DiagEntry *)
Definition: diag.cc:144
virtual void RequestTimedOut(uint32_t seq_no)=0
char data_[8]
Definition: diag.h:85
DiagEntry(const std::string &sip, const std::string &dip, uint8_t proto, uint16_t sport, uint16_t dport, const std::string &vrf_name, int timeout, int count, DiagTable *diag_table)
Definition: diag.cc:25
uint8_t return_subcode_
Definition: diag.h:201
DiagEntryTree tree_
Definition: diag.h:122
uint32_t timerecv_misec_
Definition: diag.h:207
std::map< DiagEntry::DiagKey, DiagEntry * > DiagEntryTree
Definition: diag.h:106
AgentDiagPktData()
Definition: diag.h:79
uint16_t dport_
Definition: diag.h:60
ReturnCode
Definition: diag.h:164
uint16_t index_
Definition: diag.h:121
~DiagTable()
Definition: diag.cc:133
bool TimerCancel()
Definition: diag.h:45
uint16_t return_code
Definition: diag.h:174
void FillOamPktHeader(OverlayOamPktData *pktdata, uint32_t vxlan_id, const boost::posix_time::ptime &time)
Definition: diag.cc:173
DiagEntry * de_
Definition: diag.h:101
WorkQueue< DiagEntryOp * > * entry_op_queue_
Definition: diag.h:124
uint32_t vxlan_id_
Definition: diag.h:146
void SetKey(DiagKey key)
Definition: diag.h:43
DiagTimer * timer_
Definition: diag.h:68
uint16_t DiagKey
Definition: diag.h:23
void Init()
Definition: diag.cc:47
Definition: agent.h:358
Type
Definition: diag.h:129
uint32_t GetSeqNo()
Definition: diag.h:41
void RestartTimer()
Definition: diag.cc:57
uint32_t org_handle_
Definition: diag.h:202
void Add(DiagEntry *)
Definition: diag.cc:137
Timer DiagTimer
Definition: diag.h:24
DiagEntry::DiagKey key_
Definition: diag.h:83
virtual void SendRequest()=0
uint32_t seq_no_
Definition: diag.h:70
virtual bool ResendOnTimerExpiry()
Definition: diag.h:39
uint8_t mac[6]
Definition: diag.h:173
virtual void HandleReply(DiagPktHandler *handler)=0
Agent * agent() const
Definition: diag.h:117
virtual bool IsDone()
Definition: diag.cc:63
uint16_t type_
Definition: diag.h:169
std::string vrf_name_
Definition: diag.h:61
DiagTable * diag_table() const
Definition: diag.h:48
Op op_
Definition: diag.h:100
Type
Definition: diag.h:156
bool Cancel()
Definition: timer.cc:150
Definition: diag.h:155
char data_[1]
Definition: diag.h:152
uint32_t HashValUdpSourcePort()
Definition: diag.cc:163
uint16_t sport_
Definition: diag.h:59
uint32_t max_attempts_
Definition: diag.h:69
uint8_t msg_type_
Definition: diag.h:198
Agent * agent_
Definition: diag.h:125
uint32_t vxlan_id_
Definition: diag.h:141
uint32_t sip_
Definition: diag.h:142
DiagKey GetKey()
Definition: diag.h:40
uint32_t timesent_sec_
Definition: diag.h:204
uint16_t length_
Definition: diag.h:151
boost::scoped_ptr< DiagProto > diag_proto_
Definition: diag.h:123
virtual void SendSummary()
Definition: diag.h:35
void Enqueue(DiagEntryOp *op)
Definition: diag.cc:159
uint32_t seq_no_
Definition: diag.h:203
bool TimerExpiry(uint32_t seqno)
Definition: diag.cc:67
Definition: diag.h:21
OamTlv oamtlv_
Definition: diag.h:208
DiagEntryOp(DiagEntryOp::Op op, DiagEntry *de)
Definition: diag.h:97
Definition: timer.h:54
bool Process(DiagEntryOp *op)
Definition: diag.cc:89
DiagEntry * Find(DiagEntry::DiagKey &key)
Definition: diag.cc:148
uint8_t reply_mode_
Definition: diag.h:199
DiagKey key_
Definition: diag.h:65
uint32_t timesent_misec_
Definition: diag.h:205
uint8_t sip_[16]
Definition: diag.h:147
void EnqueueForceDelete()
Definition: diag.cc:52
DiagTable * diag_table_
Definition: diag.h:64
virtual void Retry()
Definition: diag.cc:84
uint16_t type_
Definition: diag.h:150
virtual ~DiagEntry()
Definition: diag.cc:40