5 #ifndef vnsw_agent_arp_proto_hpp
6 #define vnsw_agent_arp_proto_hpp
12 #define ARP_TRACE(obj, ...) \
14 Arp##obj::TraceMsg(ArpTraceBuf, __FILE__, __LINE__, ##__VA_ARGS__); \
96 boost::asio::io_context &
io);
251 typedef std::map<uint32_t, InterfaceArpPathPreferenceInfo>
253 typedef std::pair<uint32_t, InterfaceArpPathPreferenceInfo>
305 WaitForTrafficIntfMap::iterator it = imap.find(
id);
306 if (it == imap.end()) {
309 return it->second.arp_retry_count;
boost::asio::ip::address IpAddress
boost::asio::ip::address_v4 Ip4Address
boost::intrusive_ptr< const Interface > InterfaceConstRef
std::vector< int > TagList
std::vector< int > SecurityGroupList
std::set< std::string > VnListType
boost::intrusive_ptr< Interface > InterfaceRef
void intrusive_ptr_add_ref(ArpPathPreferenceState *aps)
void intrusive_ptr_release(ArpPathPreferenceState *aps)
boost::intrusive_ptr< ArpPathPreferenceState > ArpPathPreferenceStatePtr
Agent supports multiple route tables - Inet-unicast (IPv4/IPv6), Inet-multicast, bridge,...
Base class for all Route entries in agent.
ArpDBState(ArpVrfState *vrf_state, uint32_t vrf_id, IpAddress vm_ip_addr, uint8_t plen)
void Delete(const InetUnicastRouteEntry *rt)
static const uint32_t kMaxRetry
ArpPathPreferenceStatePtr arp_path_preference_state_
SecurityGroupList sg_list_
static const uint32_t kTimeout
void Update(const AgentRoute *route)
void UpdateMac(const InterfaceNH *nh)
void UpdateArpRoutes(const InetUnicastRouteEntry *route)
void SetVrf(VrfEntry *vrf, VrfEntry *fabric_vrf)
DBTable::DBTableWalkRef walk_ref_
bool WalkNotify(DBTablePartBase *partition, DBEntryBase *entry)
void WalkDone(DBTableBase *part)
ArpInterfaceState(Interface *intf)
std::map< uint32_t, InterfaceArpPathPreferenceInfo > WaitForTrafficIntfMap
friend void intrusive_ptr_add_ref(ArpPathPreferenceState *aps)
~ArpPathPreferenceState()
void SendArpRequestForAllIntf(const AgentRoute *route)
uint32_t IntfRetryCountInIpMap(uint32_t id)
std::set< uint32_t > ArpTransmittedIntfMap
friend void intrusive_ptr_release(ArpPathPreferenceState *aps)
std::pair< uint32_t, InterfaceArpPathPreferenceInfo > WaitForTrafficIntfPair
MacAddress mac(void) const
void set_mac(MacAddress mac)
WaitForTrafficIntfMap evpn_wait_for_traffic_map_
bool IntfPresentInEvpnMap(uint32_t id)
static const uint32_t kArpTryCount
static const uint32_t kMaxRetry
void HandleArpReply(Ip4Address sip, uint32_t itf)
static const uint32_t kTimeout
tbb::atomic< int > refcount_
const IpAddress & ip() const
bool IntfPresentInIpMap(uint32_t id)
WaitForTrafficIntfMap l3_wait_for_traffic_map_
ArpPathPreferenceState(ArpVrfState *state, uint32_t vrf_id, const IpAddress &vm_ip, uint8_t plen)
uint32_t IntfRetryCountInEvpnMap(uint32_t id)
ArpVrfState * vrf_state()
uint32_t GetRetryCount(uint32_t id, WaitForTrafficIntfMap &imap)
std::size_t GetArpCacheSize()
void IncrementStatsInvalidAddress()
std::map< ArpKey, ArpEntry * > ArpCache
const InterfaceArpMap & interface_arp_map()
ProtoHandler * AllocProtoHandler(boost::shared_ptr< PktInfo > info, boost::asio::io_context &io)
std::map< uint32_t, InterfaceArpInfo > InterfaceArpMap
bool DeleteArpEntry(ArpEntry *entry)
InterfaceArpMap interface_arp_map_
ArpIterator FindUpperBoundArpEntry(const ArpKey &key)
bool ValidateAndClearVrfState(VrfEntry *vrf, const ArpVrfState *vrf_state)
DBTableBase::ListenerId vrf_table_listener_id() const
void IncrementStatsArpReq()
bool AddArpEntry(ArpEntry *entry)
const ArpStats & GetStats() const
static const uint16_t kMaxRetries
void InterfaceNotify(DBEntryBase *entry)
void IncrementStatsArpRequest(uint32_t idx)
GratuitousArpCache gratuitous_arp_cache_
uint32_t aging_timeout() const
Interface * ip_fabric_interface_
void IncrementStatsErrors()
std::pair< ArpKey, ArpEntrySet > GratuitousArpCachePair
DISALLOW_COPY_AND_ASSIGN(ArpProto)
std::pair< ArpKey, ArpEntry * > ArpCachePair
DBTableBase::ListenerId nexthop_table_listener_id_
const ArpCache & arp_cache()
void IncrementStatsArpReplies()
Interface * ip_fabric_interface() const
uint32_t ip_fabric_interface_index_
void set_retry_timeout(uint32_t timeout)
void ClearInterfaceArpStats(uint32_t idx)
void set_max_retries(uint16_t retries)
static const uint32_t kAgingTimeout
std::map< ArpKey, ArpEntrySet > GratuitousArpCache
void AddGratuitousArpEntry(ArpKey &key)
void VrfNotify(DBTablePartBase *part, DBEntryBase *entry)
InterfaceArpInfo & ArpMapIndexToEntry(uint32_t idx)
uint32_t ip_fabric_interface_index() const
void IncrementStatsMaxRetries()
std::set< ArpEntry * > ArpEntrySet
void HandlePathPreferenceArpReply(const VrfEntry *vrf, uint32_t itf, Ip4Address sip)
uint16_t max_retries() const
bool TimerExpiry(ArpKey &key, uint32_t timer_type, const Interface *itf)
MacAddress ip_fabric_interface_mac_
static const uint32_t kGratRetryTimeout
void IncrementStatsVmArpReq()
void set_ip_fabric_interface_mac(const MacAddress &mac)
uint32_t ArpResolvedStatsCounter(uint32_t idx)
ArpEntry * GratuitousArpEntry(const ArpKey &key, const Interface *intf)
void DeleteGratuitousArpEntry(ArpEntry *entry)
void IncrementStatsResolved()
void NextHopNotify(DBEntryBase *entry)
ArpIterator FindLowerBoundArpEntry(const ArpKey &key)
void IncrementStatsInvalidPackets()
void IncrementStatsInvalidVrf()
void IncrementStatsInvalidInterface()
void SendArpIpc(ArpProto::ArpMsgType type, in_addr_t ip, const VrfEntry *vrf, InterfaceConstRef itf)
static const uint32_t kRetryTimeout
void IncrementStatsIPFabricNotInst()
ArpProto::GratuitousArpIterator GratuitousArpEntryIterator(const ArpKey &key, bool *key_valid)
void set_ip_fabric_interface_index(uint32_t ind)
DBTableBase::ListenerId interface_table_listener_id_
ArpEntry * FindArpEntry(const ArpKey &key)
std::map< ArpKey, ArpEntry * >::iterator ArpIterator
static const uint16_t kGratRetries
void IncrementStatsGratuitous()
uint32_t ArpRequestStatsCounter(uint32_t idx)
std::pair< uint32_t, InterfaceArpInfo > InterfaceArpPair
std::set< ArpKey > ArpKeySet
void set_aging_timeout(uint32_t timeout)
void IncrementStatsArpReply(uint32_t idx)
const GratuitousArpCache & gratuitous_arp_cache()
DBTableBase::ListenerId vrf_table_listener_id_
ArpProto(Agent *agent, boost::asio::io_context &io, bool run_with_vrouter)
uint32_t ArpReplyStatsCounter(uint32_t idx)
void set_ip_fabric_interface(Interface *itf)
std::map< ArpKey, ArpEntrySet >::iterator GratuitousArpIterator
@ GRATUITOUS_TIMER_EXPIRED
const MacAddress & ip_fabric_interface_mac() const
static const uint16_t kMaxFailures
uint32_t retry_timeout() const
void IncrementStatsVmGarpReq()
DBTableBase::ListenerId interface_table_listener_id() const
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
bool operator()(const ArpPathPreferenceStateKey &lhs, const ArpPathPreferenceStateKey &rhs) const
ArpPathPreferenceStateKey(const IpAddress &addr, uint8_t len)
bool IsLess(const ArpPathPreferenceStateKey &key) const
ArpIpc(ArpProto::ArpMsgType msg, in_addr_t ip, const VrfEntry *vrf, InterfaceConstRef itf)
ArpIpc(ArpProto::ArpMsgType msg, ArpKey &akey, InterfaceConstRef itf)
InterfaceConstRef interface_
uint32_t ipfabric_not_inst
uint32_t arp_invalid_address
uint32_t arp_invalid_packets
uint32_t arp_invalid_interface
uint32_t max_retries_exceeded
ArpPathPreferenceState * Get(const IpAddress ip, uint8_t plen=32)
std::pair< ArpPathPreferenceStateKey, ArpPathPreferenceState * > ArpPathPreferenceStatePair
ArpPathPreferenceState * Locate(const IpAddress &ip, uint8_t plen)
static void WalkDone(DBTableBase *partition, ArpVrfState *state)
bool DeleteRouteState(DBTablePartBase *part, DBEntryBase *entry)
ArpVrfState(Agent *agent, ArpProto *proto, VrfEntry *vrf, AgentRouteTable *table, AgentRouteTable *evpn_table)
bool DeleteEvpnRouteState(DBTablePartBase *part, DBEntryBase *entry)
DBTable::DBTableWalkRef managed_delete_walk_ref
LifetimeRef< ArpVrfState > table_delete_ref
DBTableBase::ListenerId evpn_route_table_listener_id
LifetimeRef< ArpVrfState > evpn_table_delete_ref
bool PreWalkDone(DBTableBase *partition)
DBTableBase::ListenerId route_table_listener_id
void Erase(const IpAddress &ip, uint8_t plen)
void RouteUpdate(DBTablePartBase *part, DBEntryBase *entry)
AgentRouteTable * rt_table
bool evpn_walk_completed() const
void EvpnRouteUpdate(DBTablePartBase *part, DBEntryBase *entry)
bool l3_walk_completed() const
ArpPathPreferenceStateMap arp_path_preference_map_
DBTable::DBTableWalkRef evpn_walk_ref_
bool evpn_walk_completed_
AgentRouteTable * evpn_rt_table
std::map< ArpPathPreferenceStateKey, ArpPathPreferenceState *, ArpPathPreferenceCmp > ArpPathPreferenceStateMap
Ip4Address prev_responded_ip
InterfaceArpPathPreferenceInfo()
uint32_t arp_failure_count