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