4 #ifndef __ROUTE_PREFERENCE_H__
5 #define __ROUTE_PREFERENCE_H__
7 #include <boost/statechart/custom_reaction.hpp>
8 #include <boost/statechart/event.hpp>
9 #include <boost/statechart/simple_state.hpp>
10 #include <boost/statechart/state.hpp>
11 #include <boost/statechart/state_machine.hpp>
13 namespace sc = boost::statechart;
20 #define PATH_PREFERENCE_TRACE(...) \
22 PathPreferenceTrace::TraceMsg(PathPreferenceTraceBuf, __FILE__, __LINE__,\
29 public sc::state_machine<PathPreferenceSM, Init> {
104 void Log(std::string state);
140 void Process(
bool &should_resolve);
159 uint32_t plen,
const std::string &vrf);
220 boost::intrusive_ptr<const sc::event_base>
event;
228 uint32_t interface_index, uint32_t vrf_index,
void set_sequence(uint32_t sequence)
static const uint32_t kMinInterval
RouteAddrList instance_ip_
void DecreaseRetryTimeout()
DependencyList< PathPreferenceSM, PathPreferenceSM > PathDependencyList
static const uint32_t kMaxInterval
DependencyRef< PathPreferenceSM, PathPreferenceSM > dependent_rt_
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 preference() const
boost::asio::ip::address IpAddress
void Notify(DBTablePartBase *partition, DBEntryBase *e)
static const uint32_t kMaxFlapCount
DBTableBase::ListenerId uc6_rt_id_
boost::intrusive_ptr< const sc::event_base > event
void set_last_stable_high_priority_change_at(uint64_t timestamp)
DBTableBase::ListenerId evpn_rt_id_
void Log(std::string state)
void VrfNotify(DBTablePartBase *partition, DBEntryBase *e)
bool IsPathStable() const
PathPreferenceSM * GetDependentPath(const AgentPath *path) const
DBTableBase::ListenerId mpls_rt_id_
DBTableBase::ListenerId uc_rt_id_
bool GetRouteListenerId(const VrfEntry *vrf, const Agent::RouteTableType &table, DBTableBase::ListenerId &rt_id) const
uint32_t DependentRouteListSize() const
PathPreferenceModule(Agent *agent)
Base class for all Route entries in agent.
WorkQueue< PathPreferenceEventContainer > work_queue_
std::set< RouteAddrList > dependent_rt_
uint32_t flap_count() const
void set_timeout(uint32_t timeout)
void set_is_dependent_rt(bool dependent_path)
void UpdateDependentRoute()
DBTableBase::ListenerId vrf_id_
PeerPathPreferenceMap path_preference_peer_map_
bool operator==(const RouteAddrList &rhs) const
std::map< const Peer *, PathPreferenceSM * > PeerPathPreferenceMap
uint64_t last_stable_high_priority_change_at() const
DBTableBase::ListenerId id() const
DBTableBase::ListenerId vrf_id() const
void set_dependent_ip(const IpAddress &ip)
uint32_t interface_index_
void set_dependent_ip(const IpAddress &ip)
DBTableBase::ListenerId intf_id() const
void set_preference(uint32_t preference)
PathPreferenceIntfState(const VmInterface *intf)
PathPreference path_preference_
void set_wait_for_traffic(bool wait_for_traffic)
void set_preference(uint32_t preference)
void EnqueueTrafficSeen(IpAddress ip, uint32_t plen, uint32_t interface_index, uint32_t vrf_index, const MacAddress &mac)
void set_sequence(uint32_t seq_no)
bool DequeueEvent(PathPreferenceEventContainer e)
void AddUnresolvedPath(PathPreferenceState *sm)
bool IsPathFlapping() const
PathPreferenceSM(Agent *agent, const Peer *peer, AgentRoute *rt, bool dependent_rt, const PathPreference &pref)
uint32_t max_sequence() const
PathPreferenceVrfState(DBTableBase::ListenerId uc_rt_id, DBTableBase::ListenerId evpn_rt_id, DBTableBase::ListenerId uc6_rt_id, DBTableBase::ListenerId mpls_rt_id)
void IncreaseRetryTimeout()
void set_max_sequence(uint32_t seq)
uint32_t preference() const
LifetimeRef< PathPreferenceRouteListener > table_delete_ref_
std::set< PathPreferenceState * > unresolved_paths_
bool DeleteState(DBTablePartBase *partition, DBEntryBase *e)
void Walkdone(DBTable::DBTableWalkRef walk_ref, DBTableBase *partition, PathPreferenceRouteListener *state)
uint32_t sequence() const
const VmInterface * intf_
uint64_t backoff_timer_fired_time_
void DeleteUnresolvedPath(PathPreferenceState *sm)
DBTable::DBTableWalkRef managed_delete_walk_ref_
PathPreferenceSM * GetSM(const Peer *)
DBTableBase::ListenerId id_
DEPENDENCY_LIST(PathPreferenceSM, PathPreferenceSM, dependent_routes_)
AgentRouteTable * rt_table_
bool wait_for_traffic() const
void Process(bool &should_resolve)
const IpAddress & dependent_ip() const
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
DBTableBase::ListenerId intf_id_
void set_dependent_rt(PathPreferenceSM *sm)
void reset(ObjectType *ptr)
bool wait_for_traffic() const
bool is_dependent_rt() const
uint64_t last_stable_high_priority_change_at_
PathPreferenceState(Agent *agent, AgentRoute *rt_)
uint32_t sequence() const
void set_wait_for_traffic(bool wait_for_traffic)
PathPreferenceRouteListener(Agent *agent, AgentRouteTable *table)
bool operator<(const RouteAddrList &rhs) const