5 #ifndef vnsw_agent_icmpv6_proto_h
6 #define vnsw_agent_icmpv6_proto_h
12 #define ICMP_PKT_SIZE 1024
13 #define IPV6_ALL_NODES_ADDRESS "FF02::1"
14 #define IPV6_ALL_ROUTERS_ADDRESS "FF02::2"
15 #define PKT0_LINKLOCAL_ADDRESS "FE80::5E00:0100"
17 #define NDP_TRACE(obj, ...) \
19 Ndp##obj::TraceMsg(Icmpv6TraceBuf, __FILE__, __LINE__, ##__VA_ARGS__); \
22 #define ICMPV6_TRACE(obj, arg) \
24 std::ostringstream _str; \
26 Icmpv6##obj::TraceMsg(Icmpv6TraceBuf, __FILE__, __LINE__, _str.str()); \
100 boost::asio::io_context &io);
334 typedef boost::intrusive_ptr<Icmpv6PathPreferenceState>
349 #endif // vnsw_agent_icmpv6_proto_h
std::map< NdpKey, NdpEntrySet >::iterator UnsolNaIterator
DBTable::DBTableWalkRef managed_delete_walk_ref()
const InterfaceNdpMap & interface_ndp_map()
static const uint16_t kMaxRetries
int intrusive_ptr_add_ref(const AsPath *cpath)
std::map< VmInterface *, Icmpv6Stats > VmInterfaceMap
NdpEntry * FindNdpEntry(const NdpKey &key)
bool l3_walk_completed() const
Icmpv6Proto * icmp_proto_
Icmpv6PathPreferenceState * Locate(const IpAddress &ip)
void HandlePathPreferenceNA(const VrfEntry *, uint32_t, IpAddress)
bool DeleteNdpEntry(NdpEntry *entry)
uint32_t icmpv6_ping_request_
static const uint32_t kNSTryCount
InterfaceIcmpv6PathPreferenceInfo()
std::pair< VmInterface *, Icmpv6Stats > VmInterfacePair
Interface * ip_fabric_interface_
Icmpv6Proto * icmp_proto() const
DBTableBase::ListenerId vrf_table_listener_id() const
void VrfNotify(DBTablePartBase *part, DBEntryBase *entry)
DBTable::DBTableWalkRef evpn_walk_ref()
Icmpv6VrfState(Agent *agent, Icmpv6Proto *proto, VrfEntry *vrf, AgentRouteTable *table, AgentRouteTable *evpn_table)
Icmpv6VrfState * vrf_state_
std::map< NdpKey, NdpEntrySet > UnsolNaCache
std::map< const IpAddress, Icmpv6PathPreferenceState * > Icmpv6PathPreferenceStateMap
WaitForTrafficIntfMap l3_wait_for_traffic_map_
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.
uint32_t ip_fabric_interface_index() const
bool IntfPresentInEvpnMap(uint32_t id)
void IncrementStatsNeighborAdvertUnSolicited(VmInterface *vmi)
void set_route_table_listener_id(const DBTableBase::ListenerId &id)
bool PreWalkDone(DBTableBase *partition)
void SendNeighborSolicitForAllIntf(const AgentRoute *route)
DBTableBase::ListenerId evpn_route_table_listener_id_
Icmpv6RouteState(Icmpv6VrfState *vrf_state, uint32_t vrf_id, IpAddress vm_ip_addr, uint8_t plen)
DBTableBase::ListenerId vrf_table_listener_id_
boost::asio::ip::address IpAddress
uint32_t icmpv6_neighbor_advert_solicited_
AgentRouteTable * rt_table_
tbb::atomic< int > refcount_
Icmpv6Stats * VmiToIcmpv6Stats(VmInterface *i)
DISALLOW_COPY_AND_ASSIGN(Icmpv6VrfState)
UnsolNaCache unsol_na_cache_
uint32_t icmpv6_neighbor_solicit_
Icmpv6PathPreferenceStatePtr icmpv6_path_preference_state_
void SendIcmpv6Ipc(Icmpv6Proto::Icmpv6MsgType type, Ip6Address ip, const VrfEntry *vrf, InterfaceConstRef itf)
bool default_routes_added() const
void set_evpn_route_table_listener_id(const DBTableBase::ListenerId &id)
const NdpCache & ndp_cache()
static const uint32_t kTimeoutMultiplier
friend void intrusive_ptr_add_ref(Icmpv6PathPreferenceState *ps)
ProtoHandler * AllocProtoHandler(boost::shared_ptr< PktInfo > info, boost::asio::io_context &io)
void IncrementStatsNeighborSolicit(VmInterface *vmi)
Base class for all Route entries in agent.
void set_ip_fabric_interface_mac(const MacAddress &mac)
DBTableBase::ListenerId interface_listener_id_
Icmpv6VrfState * vrf_state()
LifetimeRef< Icmpv6VrfState > evpn_table_delete_ref_
uint32_t ip_fabric_interface_index_
static const uint32_t kMaxRetry
bool IntfPresentInIpMap(uint32_t id)
const Icmpv6Stats & GetStats() const
void IncrementStatsDrop()
void IncrementStatsRouterSolicit(VmInterface *vmi)
void IncrementStatsPingResponse(VmInterface *vmi)
std::map< uint32_t, InterfaceNdpInfo > InterfaceNdpMap
std::set< uint32_t > NDTransmittedIntfMap
static const uint32_t kRouterAdvertTimeout
static void WalkDone(DBTableBase *partition, Icmpv6VrfState *state)
void IncrementStatsNeighborSolicited(VmInterface *vmi)
void HandleNA(uint32_t itf)
uint32_t icmpv6_router_advert_
NdpEntry * UnsolNaEntry(const NdpKey &key, const Interface *intf)
void IncrementStatsNeighborAdvertSolicited(VmInterface *vmi)
bool ValidateAndClearVrfState(VrfEntry *vrf, Icmpv6VrfState *state)
void IncrementStatsRouterAdvert(VmInterface *vmi)
AgentRouteTable * evpn_rt_table_
std::size_t GetNdpCacheSize()
uint32_t icmpv6_ping_response_
DISALLOW_COPY_AND_ASSIGN(Icmpv6Proto)
boost::asio::ip::address_v6 Ip6Address
void set_ip_fabric_interface_index(uint32_t ind)
uint32_t icmpv6_neighbor_advert_unsolicited_
Icmpv6PathPreferenceState(Icmpv6VrfState *vrf_state, uint32_t vrf_id, IpAddress vm_ip_addr, uint8_t plen)
void set_ip_fabric_interface(Interface *itf)
void NexthopNotify(DBEntryBase *entry)
DBTableBase::ListenerId vn_table_listener_id_
void Erase(const IpAddress &ip)
boost::intrusive_ptr< const Interface > InterfaceConstRef
bool default_routes_added_
void SendNeighborSolicitForAllIntf(const AgentRoute *route)
static const uint32_t kRetryTimeout
DBTable::DBTableWalkRef managed_delete_walk_ref_
uint32_t icmpv6_router_solicit_
std::set< NdpEntry * > NdpEntrySet
void AddUnsolNaEntry(NdpKey &key)
uint32_t IntfRetryCountInIpMap(uint32_t id)
uint32_t IntfRetryCountInEvpnMap(uint32_t id)
void DeleteUnsolNaEntry(NdpEntry *entry)
MacAddress ip_fabric_interface_mac_
Icmpv6Proto::UnsolNaIterator UnsolNaEntryIterator(const NdpKey &key, bool *key_valid)
std::pair< NdpKey, NdpEntry * > NdpCachePair
boost::scoped_ptr< Icmpv6Handler > icmpv6_handler_
void EvpnRouteUpdate(DBTablePartBase *part, DBEntryBase *entry)
std::pair< uint32_t, InterfaceNdpInfo > InterfaceNdpPair
void RouteUpdate(DBTablePartBase *part, DBEntryBase *entry)
MacAddress mac(void) const
bool SendNeighborSolicit()
std::map< NdpKey, NdpEntry * > NdpCache
static const uint32_t kTimeout
bool DeleteEvpnRouteState(DBTablePartBase *part, DBEntryBase *entry)
std::set< NdpKey > NdpKeySet
boost::intrusive_ptr< Icmpv6PathPreferenceState > Icmpv6PathPreferenceStatePtr
NdpEntry * FindUnsolNaEntry(NdpKey &key)
Icmpv6PathPreferenceState * Get(const IpAddress ip)
VmInterfaceMap vm_interfaces_
Icmpv6PathPreferenceStateMap icmpv6_path_preference_map_
std::pair< NdpKey, NdpEntrySet > UnsolNaCachePair
Icmpv6Ipc(Icmpv6Proto::Icmpv6MsgType msg, Ip6Address ip, const VrfEntry *vrf, InterfaceConstRef itf)
std::map< uint32_t, InterfaceIcmpv6PathPreferenceInfo > WaitForTrafficIntfMap
LifetimeRef< Icmpv6VrfState > table_delete_ref_
const VmInterfaceMap & vm_interfaces()
void intrusive_ptr_release(const AsPath *cpath)
bool AddNdpEntry(NdpEntry *entry)
const MacAddress & ip_fabric_interface_mac() const
void set_default_routes_added(bool value)
DBTable::DBTableWalkRef evpn_walk_ref_
const IpAddress & ip() const
InterfaceNdpMap interface_ndp_map_
DBTableBase::ListenerId nexthop_listener_id_
void VnNotify(DBEntryBase *entry)
bool DeleteRouteState(DBTablePartBase *part, DBEntryBase *entry)
InterfaceConstRef interface_
uint32_t icmpv6_neighbor_solicited_
void IncrementStatsPingRequest(VmInterface *vmi)
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
friend void intrusive_ptr_release(Icmpv6PathPreferenceState *ps)
const UnsolNaCache & unsol_na_cache()
bool evpn_walk_completed_
Icmpv6VrfState * CreateAndSetVrfState(VrfEntry *vrf)
~Icmpv6PathPreferenceState()
Icmpv6Proto(Agent *agent, boost::asio::io_context &io)
static const uint32_t kAgingTimeout
Interface * ip_fabric_interface() const
Icmpv6Ipc(Icmpv6Proto::Icmpv6MsgType msg, NdpKey &akey, InterfaceConstRef itf)
std::pair< const IpAddress, Icmpv6PathPreferenceState * > Icmpv6PathPreferenceStatePair
DBTableBase::ListenerId route_table_listener_id_
std::map< NdpKey, NdpEntry * >::iterator NdpIterator
void InterfaceNotify(DBEntryBase *entry)
WaitForTrafficIntfMap evpn_wait_for_traffic_map_
bool evpn_walk_completed() const