OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
arp_proto.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_arp_proto_hpp
6 #define vnsw_agent_arp_proto_hpp
7 
8 #include "pkt/proto.h"
9 #include "services/arp_handler.h"
10 #include "services/arp_entry.h"
11 
12 #define ARP_TRACE(obj, ...) \
13 do { \
14  Arp##obj::TraceMsg(ArpTraceBuf, __FILE__, __LINE__, ##__VA_ARGS__); \
15 } while (false) \
16 
17 struct ArpVrfState;
18 
19 class ArpProto : public Proto {
20 public:
21  static const uint16_t kGratRetries = 2;
22  static const uint16_t kMaxFailures = 3;
23  static const uint32_t kGratRetryTimeout = 2000; // milli seconds
24  static const uint16_t kMaxRetries = 8;
25  static const uint32_t kRetryTimeout = 2000; // milli seconds
26  static const uint32_t kAgingTimeout = (5 * 60 * 1000); // milli seconds
27 
28  typedef std::map<ArpKey, ArpEntry *> ArpCache;
29  typedef std::pair<ArpKey, ArpEntry *> ArpCachePair;
30  typedef std::map<ArpKey, ArpEntry *>::iterator ArpIterator;
31  typedef std::set<ArpKey> ArpKeySet;
32  typedef std::set<ArpEntry *> ArpEntrySet;
33  typedef std::map<ArpKey, ArpEntrySet> GratuitousArpCache;
34  typedef std::pair<ArpKey, ArpEntrySet> GratuitousArpCachePair;
35  typedef std::map<ArpKey, ArpEntrySet>::iterator GratuitousArpIterator;
36 
37  enum ArpMsgType {
44  };
45 
46  struct ArpIpc : InterTaskMsg {
48  : InterTaskMsg(msg), key(akey), interface_(itf) {}
49  ArpIpc(ArpProto::ArpMsgType msg, in_addr_t ip, const VrfEntry *vrf,
50  InterfaceConstRef itf) :
51  InterTaskMsg(msg), key(ip, vrf), interface_(itf) {}
52 
55  };
56 
57  struct ArpStats {
58  ArpStats() { Reset(); }
59  void Reset() {
65  }
66 
67  uint32_t arp_req;
68  uint32_t arp_replies;
69  uint32_t arp_gratuitous;
70  uint32_t resolved;
72  uint32_t errors;
75  uint32_t arp_invalid_vrf;
77  uint32_t vm_arp_req;
78  uint32_t vm_garp_req;
79  uint32_t agent_not_inst;
81  };
82 
87  };
88  typedef std::map<uint32_t, InterfaceArpInfo> InterfaceArpMap;
89  typedef std::pair<uint32_t, InterfaceArpInfo> InterfaceArpPair;
90 
91  void Shutdown();
92  ArpProto(Agent *agent, boost::asio::io_context &io, bool run_with_vrouter);
93  virtual ~ArpProto();
94 
95  ProtoHandler *AllocProtoHandler(boost::shared_ptr<PktInfo> info,
96  boost::asio::io_context &io);
97  bool TimerExpiry(ArpKey &key, uint32_t timer_type, const Interface *itf);
98 
99  bool AddArpEntry(ArpEntry *entry);
100  bool DeleteArpEntry(ArpEntry *entry);
101  ArpEntry *FindArpEntry(const ArpKey &key);
102  std::size_t GetArpCacheSize() { return arp_cache_.size(); }
103  const ArpCache& arp_cache() { return arp_cache_; }
106 
108  uint32_t ip_fabric_interface_index() const {
110  }
113  }
115  void set_ip_fabric_interface_index(uint32_t ind) {
117  }
120  }
121 
122  void AddGratuitousArpEntry(ArpKey &key);
123  void DeleteGratuitousArpEntry(ArpEntry *entry);
124  ArpEntry* GratuitousArpEntry (const ArpKey &key, const Interface *intf);
126  GratuitousArpEntryIterator(const ArpKey &key, bool *key_valid);
138  }
142  }
146  }
150  }
151 
153 
154  const ArpStats &GetStats() const { return arp_stats_; }
156 
157  void IncrementStatsArpRequest(uint32_t idx);
158  void IncrementStatsArpReply(uint32_t idx);
159  void IncrementStatsResolved(uint32_t idx);
160  InterfaceArpInfo& ArpMapIndexToEntry(uint32_t idx);
161  uint32_t ArpRequestStatsCounter(uint32_t idx);
162  uint32_t ArpReplyStatsCounter(uint32_t idx);
163  uint32_t ArpResolvedStatsCounter(uint32_t idx);
164  void ClearInterfaceArpStats(uint32_t idx);
165 
166  uint16_t max_retries() const { return max_retries_; }
167  uint32_t retry_timeout() const { return retry_timeout_; }
168  uint32_t aging_timeout() const { return aging_timeout_; }
169  void set_max_retries(uint16_t retries) { max_retries_ = retries; }
170  void set_retry_timeout(uint32_t timeout) { retry_timeout_ = timeout; }
171  void set_aging_timeout(uint32_t timeout) { aging_timeout_ = timeout; }
172  void SendArpIpc(ArpProto::ArpMsgType type, in_addr_t ip,
173  const VrfEntry *vrf, InterfaceConstRef itf);
174  bool ValidateAndClearVrfState(VrfEntry *vrf, const ArpVrfState *vrf_state);
177  void HandlePathPreferenceArpReply(const VrfEntry *vrf, uint32_t itf,
178  Ip4Address sip);
179 
181  return vrf_table_listener_id_;
182  }
185  }
186 private:
187  void VrfNotify(DBTablePartBase *part, DBEntryBase *entry);
188  void NextHopNotify(DBEntryBase *entry);
189  void InterfaceNotify(DBEntryBase *entry);
191  InterfaceConstRef itf);
193 
205 
206  uint16_t max_retries_;
207  uint32_t retry_timeout_; // milli seconds
208  uint32_t aging_timeout_; // milli seconds
209 
211 };
212 
215  uint8_t plen;
216  ArpPathPreferenceStateKey(const IpAddress &addr, uint8_t len) :
217  ip(addr), plen(len) {}
218  bool IsLess(const ArpPathPreferenceStateKey &key) const {
219  if (ip != key.ip) {
220  return ip < key.ip;
221  }
222  return plen < key.plen;
223  }
224 };
225 
227  /* When prefix-len is less than 32 we send ARP request for all IPs in the
228  * prefix. Whoever responds last, his IP will stored in field
229  * prev_responded_ip. Subsequently periodic ARP requests will be sent
230  * only for this IP instead of whole subnet. We will fallback to whole
231  * subnet when prev_responded_ip does not respond for kMaxFailures times */
233  uint32_t arp_reply_count;
235  uint32_t arp_send_count;
236  uint32_t arp_retry_count; //used by UT
237  uint32_t arp_try_count;
240  arp_try_count(0) {
241  }
242 };
243 //Stucture used to retry ARP queries when a particular route is in
244 //backup state.
246 public:
247  static const uint32_t kMaxRetry = 30 * 5; //retries upto 5 minutes,
248  //30 tries/per minutes
249  static const uint32_t kTimeout = 2000;
250  static const uint32_t kArpTryCount = 9;
251  typedef std::map<uint32_t, InterfaceArpPathPreferenceInfo>
253  typedef std::pair<uint32_t, InterfaceArpPathPreferenceInfo>
255  typedef std::set<uint32_t> ArpTransmittedIntfMap;
256 
257  ArpPathPreferenceState(ArpVrfState *state, uint32_t vrf_id,
258  const IpAddress &vm_ip, uint8_t plen);
260 
261  bool SendArpRequest();
262  bool SendArpRequest(WaitForTrafficIntfMap &wait_for_traffic_map,
263  ArpTransmittedIntfMap &arp_transmitted_intf_map);
264  void SendArpRequestForAllIntf(const AgentRoute *route);
265  void StartTimer();
266 
268  return vrf_state_;
269  }
270 
271  const IpAddress& ip() const { return vm_ip_; }
272  uint8_t plen() const { return plen_; }
274  MacAddress mac(void) const { return mac_; }
275  uint32_t vrf_id() const { return vrf_id_; }
276  void HandleArpReply(Ip4Address sip, uint32_t itf);
277 
278 
279  bool IntfPresentInIpMap(uint32_t id) {
280  if (l3_wait_for_traffic_map_.find(id) ==
281  l3_wait_for_traffic_map_.end()) {
282  return false;
283  }
284  return true;
285  }
286 
287  bool IntfPresentInEvpnMap(uint32_t id) {
288  if (evpn_wait_for_traffic_map_.find(id) ==
290  return false;
291  }
292  return true;
293  }
294 
295  uint32_t IntfRetryCountInIpMap(uint32_t id) {
297  }
298 
299  uint32_t IntfRetryCountInEvpnMap(uint32_t id) {
301  }
302 
303 private:
304  uint32_t GetRetryCount(uint32_t id, WaitForTrafficIntfMap &imap) {
305  WaitForTrafficIntfMap::iterator it = imap.find(id);
306  if (it == imap.end()) {
307  return 0;
308  }
309  return it->second.arp_retry_count;
310  }
315  uint32_t vrf_id_;
317  uint8_t plen_;
321  tbb::atomic<int> refcount_;
322 };
323 
324 typedef boost::intrusive_ptr<ArpPathPreferenceState> ArpPathPreferenceStatePtr;
325 
328 
331  const ArpPathPreferenceStateKey &rhs) const {
332  return lhs.IsLess(rhs);
333  }
334 };
335 
336 struct ArpVrfState : public DBState {
337 public:
338  typedef std::map<ArpPathPreferenceStateKey,
341  typedef std::pair<ArpPathPreferenceStateKey,
344  AgentRouteTable *table, AgentRouteTable *evpn_table);
345  ~ArpVrfState();
346  void RouteUpdate(DBTablePartBase *part, DBEntryBase *entry);
347  void EvpnRouteUpdate(DBTablePartBase *part, DBEntryBase *entry);
348  void ManagedDelete() { deleted = true;}
349  void Delete();
350  bool DeleteRouteState(DBTablePartBase *part, DBEntryBase *entry);
352  bool PreWalkDone(DBTableBase *partition);
353  static void WalkDone(DBTableBase *partition, ArpVrfState *state);
354 
355  ArpPathPreferenceState* Locate(const IpAddress &ip, uint8_t plen);
356  void Erase(const IpAddress &ip, uint8_t plen);
357  ArpPathPreferenceState* Get(const IpAddress ip, uint8_t plen=32);
358 
359  bool l3_walk_completed() const {
360  return l3_walk_completed_;
361  }
362 
363  bool evpn_walk_completed() const {
364  return evpn_walk_completed_;
365  }
366 
376  bool deleted;
382  friend class ArpProto;
383 };
384 
385 class ArpDBState : public DBState {
386 public:
387  static const uint32_t kMaxRetry = 30 * 5; //retries upto 5 minutes,
388  //30 tries/per minutes
389  static const uint32_t kTimeout = 2000;
390 
391  ArpDBState(ArpVrfState *vrf_state, uint32_t vrf_id,
392  IpAddress vm_ip_addr, uint8_t plen);
393  ~ArpDBState();
394  void UpdateMac(const InterfaceNH *nh);
395  void Update(const AgentRoute *route);
396  void UpdateArpRoutes(const InetUnicastRouteEntry *route);
397  void Delete(const InetUnicastRouteEntry *rt);
398 private:
402  bool policy_;
406 };
407 
408 class ArpInterfaceState : public DBState {
409 public:
412  void SetVrf(VrfEntry *vrf, VrfEntry *fabric_vrf);
413 
414 private:
415  void WalkDone(DBTableBase *part);
416  bool WalkNotify(DBTablePartBase *partition, DBEntryBase *entry);
417 
422 };
423 #endif // vnsw_agent_arp_proto_hpp
MacAddress ip_fabric_interface_mac_
Definition: arp_proto.h:199
uint32_t ip_fabric_interface_index() const
Definition: arp_proto.h:108
uint16_t max_retries_
Definition: arp_proto.h:206
std::pair< uint32_t, InterfaceArpInfo > InterfaceArpPair
Definition: arp_proto.h:89
DBTableBase::ListenerId vrf_table_listener_id() const
Definition: arp_proto.h:180
void IncrementStatsErrors()
Definition: arp_proto.h:132
int intrusive_ptr_add_ref(const AsPath *cpath)
Definition: bgp_aspath.h:147
DBTableBase::ListenerId evpn_route_table_listener_id
Definition: arp_proto.h:373
static const uint16_t kMaxRetries
Definition: arp_proto.h:24
DBTable::DBTableWalkRef managed_delete_walk_ref
Definition: arp_proto.h:378
void Delete()
Definition: arp_proto.cc:508
uint32_t arp_invalid_packets
Definition: arp_proto.h:73
void RouteUpdate(DBTablePartBase *part, DBEntryBase *entry)
Definition: arp_proto.cc:437
uint32_t vrf_id() const
Definition: arp_proto.h:275
std::pair< ArpPathPreferenceStateKey, ArpPathPreferenceState * > ArpPathPreferenceStatePair
Definition: arp_proto.h:342
uint32_t errors
Definition: arp_proto.h:72
Definition: vrf.h:86
void VrfNotify(DBTablePartBase *part, DBEntryBase *entry)
Definition: arp_proto.cc:67
bool run_with_vrouter_
Definition: arp_proto.h:197
void NextHopNotify(DBEntryBase *entry)
Definition: arp_proto.cc:739
AgentRouteTable * rt_table
Definition: arp_proto.h:370
void set_aging_timeout(uint32_t timeout)
Definition: arp_proto.h:171
bool AddArpEntry(ArpEntry *entry)
Definition: arp_proto.cc:838
Agent supports multiple route tables - Inet-unicast (IPv4/IPv6), Inet-multicast, bridge, EVPN (Type2/Type5). This base class contains common code for all types of route tables.
Definition: agent_route.h:109
uint32_t resolved
Definition: arp_proto.h:70
DBTableBase::ListenerId interface_table_listener_id() const
Definition: arp_proto.h:183
void set_ip_fabric_interface_index(uint32_t ind)
Definition: arp_proto.h:115
ArpDBState(ArpVrfState *vrf_state, uint32_t vrf_id, IpAddress vm_ip_addr, uint8_t plen)
Definition: arp_proto.cc:315
boost::asio::ip::address IpAddress
Definition: address.h:13
static const uint16_t kMaxFailures
Definition: arp_proto.h:22
ArpVrfState(Agent *agent, ArpProto *proto, VrfEntry *vrf, AgentRouteTable *table, AgentRouteTable *evpn_table)
Definition: arp_proto.cc:578
uint16_t max_retries() const
Definition: arp_proto.h:166
ArpVrfState * vrf_state_
Definition: arp_proto.h:313
std::vector< int > SecurityGroupList
Definition: agent.h:201
int ListenerId
Definition: db_table.h:62
uint32_t GetRetryCount(uint32_t id, WaitForTrafficIntfMap &imap)
Definition: arp_proto.h:304
DBTable::DBTableWalkRef walk_ref_
Definition: arp_proto.h:421
void Update(const AgentRoute *route)
Definition: arp_proto.cc:374
void set_ip_fabric_interface_mac(const MacAddress &mac)
Definition: arp_proto.h:118
void IncrementStatsArpReply(uint32_t idx)
Definition: arp_proto.cc:709
const ArpCache & arp_cache()
Definition: arp_proto.h:103
VnListType vn_list_
Definition: arp_proto.h:404
void Shutdown()
Definition: arp_proto.cc:41
void IncrementStatsArpReq()
Definition: arp_proto.h:127
VrfEntry * vrf
Definition: arp_proto.h:369
uint32_t ArpResolvedStatsCounter(uint32_t idx)
Definition: arp_proto.cc:729
void InterfaceNotify(DBEntryBase *entry)
Definition: arp_proto.cc:599
virtual ~ArpProto()
Definition: arp_proto.cc:38
bool evpn_walk_completed() const
Definition: arp_proto.h:363
VrfEntryRef fabric_vrf_
Definition: arp_proto.h:420
bool ValidateAndClearVrfState(VrfEntry *vrf, const ArpVrfState *vrf_state)
Definition: arp_proto.cc:892
LifetimeRef< ArpVrfState > table_delete_ref
Definition: arp_proto.h:374
InterfaceRef intf_
Definition: arp_proto.h:418
ArpProto * arp_proto
Definition: arp_proto.h:368
uint32_t arp_gratuitous
Definition: arp_proto.h:69
const InterfaceArpMap & interface_arp_map()
Definition: arp_proto.h:105
static const uint32_t kAgingTimeout
Definition: arp_proto.h:26
uint32_t vm_garp_req
Definition: arp_proto.h:78
bool deleted
Definition: arp_proto.h:376
static const uint32_t kMaxRetry
Definition: arp_proto.h:247
Base class for all Route entries in agent.
Definition: agent_route.h:224
void ManagedDelete()
Definition: arp_proto.h:348
ArpIpc(ArpProto::ArpMsgType msg, ArpKey &akey, InterfaceConstRef itf)
Definition: arp_proto.h:47
void Erase(const IpAddress &ip, uint8_t plen)
Definition: arp_proto.cc:560
std::map< ArpKey, ArpEntrySet > GratuitousArpCache
Definition: arp_proto.h:33
void set_ip_fabric_interface(Interface *itf)
Definition: arp_proto.h:114
void ClearStats()
Definition: arp_proto.h:155
uint32_t aging_timeout_
Definition: arp_proto.h:208
void IncrementStatsResolved()
Definition: arp_proto.h:130
LifetimeRef< ArpVrfState > evpn_table_delete_ref
Definition: arp_proto.h:375
void SendArpRequestForAllIntf(const AgentRoute *route)
Definition: arp_proto.cc:254
Interface * ip_fabric_interface() const
Definition: arp_proto.h:107
ArpPathPreferenceState * Locate(const IpAddress &ip, uint8_t plen)
Definition: arp_proto.cc:547
const GratuitousArpCache & gratuitous_arp_cache()
Definition: arp_proto.h:104
void IncrementStatsInvalidPackets()
Definition: arp_proto.h:135
std::map< uint32_t, InterfaceArpInfo > InterfaceArpMap
Definition: arp_proto.h:88
ArpStats arp_stats_
Definition: arp_proto.h:195
void WalkDone(DBTableBase *part)
Definition: arp_proto.cc:1019
bool DeleteEvpnRouteState(DBTablePartBase *part, DBEntryBase *entry)
Definition: arp_proto.cc:501
std::pair< ArpKey, ArpEntry * > ArpCachePair
Definition: arp_proto.h:29
ArpPathPreferenceState * Get(const IpAddress ip, uint8_t plen=32)
Definition: arp_proto.cc:569
ArpIpc(ArpProto::ArpMsgType msg, in_addr_t ip, const VrfEntry *vrf, InterfaceConstRef itf)
Definition: arp_proto.h:49
std::map< ArpKey, ArpEntrySet >::iterator GratuitousArpIterator
Definition: arp_proto.h:35
uint8_t type
Definition: load_balance.h:109
Definition: agent.h:358
uint32_t max_retries_exceeded
Definition: arp_proto.h:71
bool IsLess(const ArpPathPreferenceStateKey &key) const
Definition: arp_proto.h:218
ArpIterator FindLowerBoundArpEntry(const ArpKey &key)
Definition: arp_proto.cc:931
VrfEntryRef vrf_
Definition: arp_proto.h:419
void IncrementStatsIPFabricNotInst()
Definition: arp_proto.h:152
void HandleArpReply(Ip4Address sip, uint32_t itf)
Definition: arp_proto.cc:935
WaitForTrafficIntfMap l3_wait_for_traffic_map_
Definition: arp_proto.h:319
const ArpStats & GetStats() const
Definition: arp_proto.h:154
void IncrementStatsMaxRetries()
Definition: arp_proto.h:131
ArpProto(Agent *agent, boost::asio::io_context &io, bool run_with_vrouter)
Definition: arp_proto.cc:19
friend void intrusive_ptr_add_ref(ArpPathPreferenceState *aps)
Definition: arp_proto.cc:116
ArpVrfState * vrf_state_
Definition: arp_proto.h:399
std::set< ArpKey > ArpKeySet
Definition: arp_proto.h:31
ArpPathPreferenceStateMap arp_path_preference_map_
Definition: arp_proto.h:379
uint32_t arp_replies
Definition: arp_proto.h:68
bool DeleteArpEntry(ArpEntry *entry)
Definition: arp_proto.cc:864
uint32_t aging_timeout() const
Definition: arp_proto.h:168
static const uint32_t kRetryTimeout
Definition: arp_proto.h:25
void UpdateMac(const InterfaceNH *nh)
Definition: arp_proto.cc:326
uint32_t ArpRequestStatsCounter(uint32_t idx)
Definition: arp_proto.cc:719
boost::intrusive_ptr< const Interface > InterfaceConstRef
Definition: agent.h:51
Agent * agent
Definition: arp_proto.h:367
bool operator()(const ArpPathPreferenceStateKey &lhs, const ArpPathPreferenceStateKey &rhs) const
Definition: arp_proto.h:330
uint32_t arp_invalid_vrf
Definition: arp_proto.h:75
InterfaceConstRef interface_
Definition: arp_proto.h:54
ArpEntry * FindArpEntry(const ArpKey &key)
Definition: arp_proto.cc:885
MacAddress mac(void) const
Definition: arp_proto.h:274
ArpPathPreferenceStateKey(const IpAddress &addr, uint8_t len)
Definition: arp_proto.h:216
void ClearInterfaceArpStats(uint32_t idx)
Definition: arp_proto.cc:734
uint32_t ArpReplyStatsCounter(uint32_t idx)
Definition: arp_proto.cc:724
ArpInterfaceState(Interface *intf)
Definition: arp_proto.cc:977
std::set< std::string > VnListType
Definition: agent.h:212
InterfaceArpMap interface_arp_map_
Definition: arp_proto.h:204
void EvpnRouteUpdate(DBTablePartBase *part, DBEntryBase *entry)
Definition: arp_proto.cc:410
uint32_t ipfabric_not_inst
Definition: arp_proto.h:80
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
bool TimerExpiry(ArpKey &key, uint32_t timer_type, const Interface *itf)
Definition: arp_proto.cc:760
uint8_t plen() const
Definition: arp_proto.h:272
bool IntfPresentInEvpnMap(uint32_t id)
Definition: arp_proto.h:287
void IncrementStatsGratuitous()
Definition: arp_proto.h:129
DBTableBase::ListenerId interface_table_listener_id_
Definition: arp_proto.h:202
static const uint32_t kMaxRetry
Definition: arp_proto.h:387
InterfaceArpInfo & ArpMapIndexToEntry(uint32_t idx)
Definition: arp_proto.cc:692
void DeleteGratuitousArpEntry(ArpEntry *entry)
Definition: arp_proto.cc:776
ArpPathPreferenceState(ArpVrfState *state, uint32_t vrf_id, const IpAddress &vm_ip, uint8_t plen)
Definition: arp_proto.cc:129
static const uint16_t kGratRetries
Definition: arp_proto.h:21
std::set< uint32_t > ArpTransmittedIntfMap
Definition: arp_proto.h:255
bool PreWalkDone(DBTableBase *partition)
Definition: arp_proto.cc:534
uint32_t arp_invalid_address
Definition: arp_proto.h:76
std::pair< ArpKey, ArpEntrySet > GratuitousArpCachePair
Definition: arp_proto.h:34
void set_max_retries(uint16_t retries)
Definition: arp_proto.h:169
uint32_t ip_fabric_interface_index_
Definition: arp_proto.h:198
tbb::atomic< int > refcount_
Definition: arp_proto.h:321
void IncrementStatsInvalidInterface()
Definition: arp_proto.h:139
const IpAddress & ip() const
Definition: arp_proto.h:271
void IncrementStatsArpReplies()
Definition: arp_proto.h:128
ProtoHandler * AllocProtoHandler(boost::shared_ptr< PktInfo > info, boost::asio::io_context &io)
Definition: arp_proto.cc:62
uint32_t agent_not_inst
Definition: arp_proto.h:79
void set_mac(MacAddress mac)
Definition: arp_proto.h:273
bool resolve_route_
Definition: arp_proto.h:403
static const uint32_t kTimeout
Definition: arp_proto.h:389
uint32_t arp_invalid_interface
Definition: arp_proto.h:74
bool evpn_walk_completed_
Definition: arp_proto.h:381
bool WalkNotify(DBTablePartBase *partition, DBEntryBase *entry)
Definition: arp_proto.cc:1022
void IncrementStatsVmGarpReq()
Definition: arp_proto.h:133
static const uint32_t kArpTryCount
Definition: arp_proto.h:250
void IncrementStatsInvalidVrf()
Definition: arp_proto.h:143
void AddGratuitousArpEntry(ArpKey &key)
Definition: arp_proto.cc:771
std::map< ArpKey, ArpEntry * > ArpCache
Definition: arp_proto.h:28
uint32_t IntfRetryCountInIpMap(uint32_t id)
Definition: arp_proto.h:295
uint32_t arp_req
Definition: arp_proto.h:67
void intrusive_ptr_release(const AsPath *cpath)
Definition: bgp_aspath.h:155
uint32_t retry_timeout() const
Definition: arp_proto.h:167
friend void intrusive_ptr_release(ArpPathPreferenceState *aps)
Definition: arp_proto.cc:120
void IncrementStatsArpRequest(uint32_t idx)
Definition: arp_proto.cc:704
std::map< ArpPathPreferenceStateKey, ArpPathPreferenceState *, ArpPathPreferenceCmp > ArpPathPreferenceStateMap
Definition: arp_proto.h:340
TagList tag_list_
Definition: arp_proto.h:401
uint32_t vm_arp_req
Definition: arp_proto.h:77
void UpdateArpRoutes(const InetUnicastRouteEntry *route)
Definition: arp_proto.cc:336
std::map< uint32_t, InterfaceArpPathPreferenceInfo > WaitForTrafficIntfMap
Definition: arp_proto.h:252
DBTableBase::ListenerId route_table_listener_id
Definition: arp_proto.h:372
void SetVrf(VrfEntry *vrf, VrfEntry *fabric_vrf)
Definition: arp_proto.cc:987
ArpProto::GratuitousArpIterator GratuitousArpEntryIterator(const ArpKey &key, bool *key_valid)
Definition: arp_proto.cc:809
std::map< ArpKey, ArpEntry * >::iterator ArpIterator
Definition: arp_proto.h:30
boost::intrusive_ptr< Interface > InterfaceRef
Definition: agent.h:49
DISALLOW_COPY_AND_ASSIGN(ArpProto)
void SendArpIpc(ArpProto::ArpMsgType type, in_addr_t ip, const VrfEntry *vrf, InterfaceConstRef itf)
Definition: arp_proto.cc:826
void set_retry_timeout(uint32_t timeout)
Definition: arp_proto.h:170
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
Definition: db_table.h:169
static const uint32_t kTimeout
Definition: arp_proto.h:249
AgentRouteTable * evpn_rt_table
Definition: arp_proto.h:371
WaitForTrafficIntfMap evpn_wait_for_traffic_map_
Definition: arp_proto.h:320
Definition: timer.h:54
bool l3_walk_completed_
Definition: arp_proto.h:380
std::set< ArpEntry * > ArpEntrySet
Definition: arp_proto.h:32
DBTableBase::ListenerId vrf_table_listener_id_
Definition: arp_proto.h:201
ArpPathPreferenceStatePtr arp_path_preference_state_
Definition: arp_proto.h:405
ArpEntry * GratuitousArpEntry(const ArpKey &key, const Interface *intf)
Definition: arp_proto.cc:793
uint32_t retry_timeout_
Definition: arp_proto.h:207
ArpIterator FindUpperBoundArpEntry(const ArpKey &key)
Definition: arp_proto.cc:926
void HandlePathPreferenceArpReply(const VrfEntry *vrf, uint32_t itf, Ip4Address sip)
Definition: arp_proto.cc:954
SecurityGroupList sg_list_
Definition: arp_proto.h:400
static const uint32_t kGratRetryTimeout
Definition: arp_proto.h:23
uint32_t IntfRetryCountInEvpnMap(uint32_t id)
Definition: arp_proto.h:299
void Delete(const InetUnicastRouteEntry *rt)
Definition: arp_proto.cc:354
ArpVrfState * vrf_state()
Definition: arp_proto.h:267
void IncrementStatsVmArpReq()
Definition: arp_proto.h:134
Interface * ip_fabric_interface_
Definition: arp_proto.h:200
bool DeleteRouteState(DBTablePartBase *part, DBEntryBase *entry)
Definition: arp_proto.cc:496
ArpCache arp_cache_
Definition: arp_proto.h:194
const MacAddress & ip_fabric_interface_mac() const
Definition: arp_proto.h:111
bool IntfPresentInIpMap(uint32_t id)
Definition: arp_proto.h:279
boost::intrusive_ptr< ArpPathPreferenceState > ArpPathPreferenceStatePtr
Definition: arp_proto.h:324
std::size_t GetArpCacheSize()
Definition: arp_proto.h:102
static void WalkDone(DBTableBase *partition, ArpVrfState *state)
Definition: arp_proto.cc:518
GratuitousArpCache gratuitous_arp_cache_
Definition: arp_proto.h:196
DBTableBase::ListenerId nexthop_table_listener_id_
Definition: arp_proto.h:203
DBTable::DBTableWalkRef evpn_walk_ref_
Definition: arp_proto.h:377
std::pair< uint32_t, InterfaceArpPathPreferenceInfo > WaitForTrafficIntfPair
Definition: arp_proto.h:254
std::vector< int > TagList
Definition: agent.h:202
bool l3_walk_completed() const
Definition: arp_proto.h:359
bool policy_
Definition: arp_proto.h:402
void IncrementStatsInvalidAddress()
Definition: arp_proto.h:147