5 #ifndef vnsw_agent_path_hpp
6 #define vnsw_agent_path_hpp
72 const std::string&
vrf()
const {
325 virtual std::string
ToString()
const {
return "AgentPath"; }
339 bool &comp_nh_policy,
554 const std::string &
parent);
591 virtual std::string
ToString()
const {
return "EvpnDerivedPathData";}
629 virtual std::string
ToString()
const {
return "Resolve";}
653 bool is_learnt_route =
false):
672 virtual std::string
ToString()
const {
return "local VM";}
732 virtual std::string
ToString()
const {
return "PBB route";}
752 int tunnel_bmap,
const VnListType &dest_vn_list,
761 virtual std::string
ToString()
const {
return "host";}
786 virtual std::string
ToString()
const {
return "host";}
809 virtual std::string
ToString()
const {
return "l2-receive";}
834 virtual std::string
ToString()
const {
return "vlannh";}
879 bool ha_stale =
false):
890 virtual std::string
ToString()
const {
return "multicast";}
895 const std::string &dest_vn_name,
899 uint32_t tunnel_type,
902 bool ha_stale =
false);
920 virtual string ToString()
const {
return "subnet route";}
934 uint32_t tunnel_bmap,
bool policy,
const std::string &vn) :
947 virtual std::string
ToString()
const {
return "receive";}
951 boost::scoped_ptr<InterfaceKey>
intf_;
977 virtual std::string
ToString()
const {
return "arp";}
1016 const std::string &vrf_name,
1030 virtual std::string
ToString()
const {
return "gateway";}
1061 const std::string &vn_name);
1066 virtual std::string
ToString()
const {
return "Interface";}
1118 virtual std::string
ToString()
const {
return "MacVmBindingPathData";}
1141 const std::string &parent,
1144 virtual std::string
ToString()
const {
return "InetEvpnRoutePath"; }
1171 virtual std::string
ToString()
const {
return "Derived Inet route from Evpn";}
1199 const std::string& origin_vn =
"");
1204 virtual std::string
ToString()
const {
return "Evpn routing data";}
boost::asio::ip::address IpAddress
boost::asio::ip::address_v4 Ip4Address
boost::intrusive_ptr< const Interface > InterfaceConstRef
std::vector< int > TagList
boost::intrusive_ptr< NextHop > NextHopRef
std::vector< int > SecurityGroupList
std::vector< Ip4Address > AddressList
std::set< std::string > VnListType
boost::shared_ptr< AgentPathEcmpComponent > AgentPathEcmpComponentPtr
std::vector< AgentPathEcmpComponentPtr > AgentPathEcmpComponentPtrList
std::vector< std::string > CommunityList
DISALLOW_COPY_AND_ASSIGN(AgentPathEcmpComponent)
bool operator==(const AgentPathEcmpComponent &rhs) const
virtual ~AgentPathEcmpComponent()
void SetUnresolved(bool flag)
void UpdateDependentRoute(AgentRoute *rt)
DependencyRef< AgentRoute, AgentRoute > dependent_rt_
AgentPathEcmpComponent(IpAddress addr, uint32_t label, AgentRoute *rt)
TunnelType::Type tunnel_type() const
bool is_health_check_service() const
uint32_t GetTunnelBmap() const
TunnelType::Type tunnel_type_
uint64_t peer_sequence_number() const
uint64_t peer_sequence_number_
void UpdateEcmpHashFields(const Agent *agent, const EcmpLoadBalance &ecmp_load_balance, DBRequest &nh_req)
void set_label(uint32_t label)
PathPreference & path_preference_non_const()
bool is_health_check_service_
void set_path_preference(const PathPreference &rp)
const Interface * arp_interface() const
DISALLOW_COPY_AND_ASSIGN(AgentPath)
bool ecmp_suppressed() const
void set_tunnel_bmap(TunnelType::TypeBmap bmap)
void ResetDependantRoute(AgentRoute *rt)
DependencyRef< AgentRoute, MplsLabel > local_ecmp_mpls_label_
void CopyLocalPath(CompositeNHKey *composite_nh_key, const AgentPath *local_path)
void ResetEcmpHashFields()
void set_dest_vn_list(const VnListType &dest_vn_list)
uint32_t sequence() const
virtual bool Sync(AgentRoute *sync_route)
AgentRouteTable * dependent_table_
void set_etree_leaf(bool leaf)
void set_is_subnet_discard(bool discard)
bool UpdateNHPolicy(Agent *agent)
IpAddress subnet_service_ip_
const Ip4Address * NexthopIp(Agent *agent) const
void set_communities(const CommunityList &communities)
const VnListType & dest_vn_list() const
void set_origin_vn(const std::string &origin_vn)
void set_arp_valid(bool valid)
void set_ecmp_load_balance(const EcmpLoadBalance &ecmp_load_balance)
uint32_t native_vrf_id() const
void set_inactive(bool inactive)
void ImportPrevActiveNH(Agent *agent, NextHop *nh)
InterfaceConstRef arp_interface_
bool ReorderCompositeNH(Agent *agent, CompositeNHKey *nh, bool &comp_nh_policy, const AgentPath *local_path)
void set_local_ecmp_mpls_label(MplsLabel *mpls)
void set_native_vrf_id(uint32_t vrf_id)
NextHop * nexthop() const
bool is_subnet_discard() const
TunnelType::TypeBmap tunnel_bmap_
void set_sg_list(const SecurityGroupList &sg)
void set_force_policy(bool force_policy)
void set_copy_local_path(bool copy_local_path)
AgentRouteTable * GetDependentTable() const
void set_arp_interface(const Interface *intf)
void set_subnet_service_ip(const IpAddress &ip)
EcmpHashFields ecmp_hash_fields_
virtual bool IsLess(const AgentPath &right) const
const EcmpLoadBalance & ecmp_load_balance() const
void set_peer_sequence_number(uint64_t sequence_number)
bool IsDynamicLearntRoute()
void SyncRoute(bool sync)
const std::string & vrf_name() const
void set_vxlan_id(uint32_t vxlan_id)
virtual bool PostChangeNH(Agent *agent, NextHop *nh)
void GetDestinationVnList(std::vector< std::string > *vn_list) const
CommunityList communities_
MacAddress arp_mac() const
void set_is_health_check_service(bool val)
uint32_t GetActiveLabel() const
void SetDependentTable(AgentRouteTable *table)
void set_nexthop(NextHop *nh)
const PathPreference & path_preference() const
const IpAddress & GetFixedIp() const
void SetSandeshData(PathSandeshData &data) const
const AgentRoute * dependant_rt() const
void set_tunnel_dest(const Ip4Address &tunnel_dest)
const SecurityGroupList & sg_list() const
const std::string & origin_vn() const
SecurityGroupList sg_list_
AgentRoute * GetParentRoute()
PathPreference path_preference_
bool RebakeAllTunnelNHinCompositeNH(const AgentRoute *sync_route)
void set_tag_list(const TagList &tag)
bool UpdateTunnelType(Agent *agent, const AgentRoute *sync_route)
const MplsLabel * local_ecmp_mpls_label() const
const IpAddress & gw_ip() const
uint32_t tunnel_bmap() const
bool layer2_control_word_
virtual const AgentPath * UsablePath() const
uint32_t vxlan_id() const
void set_layer2_control_word(bool layer2_control_word)
void set_gw_ip(const IpAddress &addr)
void set_ecmp_suppressed(bool suppresed)
EcmpLoadBalance ecmp_load_balance_
void set_unresolved(bool unresolved)
DependencyRef< AgentRoute, AgentRoute > dependant_rt_
const Peer * peer() const
const Ip4Address & tunnel_dest() const
bool force_policy() const
bool ChangeCompositeNH(Agent *agent, CompositeNHKey *nh)
bool dest_vn_match(const std::string &vn) const
TunnelType::Type GetTunnelType() const
const bool unresolved() const
const TagList & tag_list() const
CompositeNHKey * composite_nh_key()
AgentPathEcmpComponentPtrList ecmp_member_list_
bool ChangeNH(Agent *agent, NextHop *nh)
const IpAddress subnet_service_ip() const
void set_composite_nh_key(CompositeNHKey *key)
bool ResolveGwNextHops(Agent *agent, const AgentRoute *sync_route)
void SetDynamicLearntRouteFlag(bool is_learnt_route)
uint32_t preference() const
bool ResyncControlWord(const AgentRoute *rt)
const std::string & dest_vn_name() const
void ResetEcmpMemberList(AgentPathEcmpComponentPtrList list)
void set_is_local(bool is_local)
void set_vrf_name(const std::string &vrf_name)
const CommunityList & communities() const
bool layer2_control_word() const
AgentPath(const Peer *peer, AgentRoute *rt)
void set_tunnel_type(TunnelType::Type type)
void ClearDependantRoute()
void set_arp_mac(const MacAddress &mac)
boost::scoped_ptr< CompositeNHKey > composite_nh_key_
virtual std::string ToString() const
virtual const NextHop * ComputeNextHop(Agent *agent) const
Agent supports multiple route tables - Inet-unicast (IPv4/IPv6), Inet-multicast, bridge,...
Base class for all Route entries in agent.
static const std::string & NullString()
void reset(ObjectType *ptr)
virtual std::string ToString() const
DISALLOW_COPY_AND_ASSIGN(DropRoute)
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
DropRoute(const string &vn_name)
EvpnDerivedPathData(const EvpnRouteEntry *evpn_rt)
const IpAddress & ip_addr() const
virtual std::string ToString() const
const AgentPath * reference_path_
EvpnPeer * evpn_peer() const
uint32_t ethernet_tag() const
virtual AgentPath * CreateAgentPath(const Peer *peer, AgentRoute *rt) const
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
void set_parent(const std::string &parent)
const std::string & parent() const
virtual bool CanDeletePath(Agent *agent, AgentPath *path, const AgentRoute *rt) const
DISALLOW_COPY_AND_ASSIGN(EvpnDerivedPathData)
virtual ~EvpnDerivedPathData()
const AgentPath * reference_path() const
void set_ethernet_tag(uint32_t ethernet_tag)
void CopyData(const AgentPath *path)
virtual ~EvpnDerivedPath()
DISALLOW_COPY_AND_ASSIGN(EvpnDerivedPath)
void set_parent(const std::string &parent)
virtual const NextHop * ComputeNextHop(Agent *agent) const
EvpnDerivedPath(const EvpnPeer *evpn_peer, const IpAddress &ip_addr, uint32_t ethernet_tag, const std::string &parent)
const IpAddress & ip_addr() const
void set_ip_addr(const IpAddress &ip_addr)
void set_ethernet_tag(uint32_t ethernet_tag)
const std::string & parent() const
uint32_t ethernet_tag() const
virtual bool IsLess(const AgentPath &right) const
virtual bool UpdateRoute(AgentRoute *rt)
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
EvpnRoutingData(DBRequest &nh_req, const SecurityGroupList &sg_list, const CommunityList &communities, const PathPreference &path_preference, const EcmpLoadBalance &ecmp_load_balance, const TagList &tag_list, VrfEntryConstRef vrf_entry, uint32_t vxlan_id, const VnListType &vn_list, const std::string &origin_vn="")
virtual bool CanDeletePath(Agent *agent, AgentPath *path, const AgentRoute *rt) const
const SecurityGroupList sg_list_
const std::string origin_vn_
const EcmpLoadBalance ecmp_load_balance_
const CommunityList communities_
VrfEntryConstRef routing_vrf_
virtual ~EvpnRoutingData()
virtual std::string ToString() const
const VnListType dest_vn_list_
virtual AgentPath * CreateAgentPath(const Peer *peer, AgentRoute *rt) const
DISALLOW_COPY_AND_ASSIGN(EvpnRoutingData)
const PathPreference path_preference_
virtual ~EvpnRoutingPath()
void DeleteEvpnType5Route(Agent *agent, const AgentRoute *rt) const
DISALLOW_COPY_AND_ASSIGN(EvpnRoutingPath)
const VrfEntry * routing_vrf() const
VrfEntryConstRef routing_vrf_
EvpnRoutingPath(const Peer *peer, AgentRoute *rt, VrfEntryConstRef routing_vrf)
uint32_t l3_vrf_vxlan_id_
void set_routing_vrf(const VrfEntry *vrf)
DISALLOW_COPY_AND_ASSIGN(HostRoute)
virtual bool UpdateRoute(AgentRoute *rt)
void set_policy(bool policy)
std::string dest_vn_name_
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
HostRoute(const PacketInterfaceKey &intf, const std::string &dest_vn_name)
virtual std::string ToString() const
virtual ~Inet4UnicastArpRoute()
virtual std::string ToString() const
Inet4UnicastArpRoute(const std::string &vrf_name, const Ip4Address &addr, bool policy, const VnListType &vn_list, const SecurityGroupList &sg, const TagList &tag)
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
SecurityGroupList sg_list_
DISALLOW_COPY_AND_ASSIGN(Inet4UnicastArpRoute)
virtual std::string ToString() const
Inet4UnicastGatewayRoute(const AddressList &gw_list, const std::string &vrf_name, const VnListType &vn_list, uint32_t label, const SecurityGroupList &sg, const TagList &tag, const CommunityList &communities, bool native_encap)
virtual ~Inet4UnicastGatewayRoute()
const SecurityGroupList sg_list_
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
const CommunityList communities_
DISALLOW_COPY_AND_ASSIGN(Inet4UnicastGatewayRoute)
virtual std::string ToString() const
DISALLOW_COPY_AND_ASSIGN(Inet4UnicastInterfaceRoute)
std::unique_ptr< InterfaceKey > interface_key_
Inet4UnicastInterfaceRoute(const PhysicalInterface *intrface, const std::string &vn_name)
virtual ~Inet4UnicastInterfaceRoute()
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
const MacAddress & MacAddr() const
const std::string & parent() const
virtual std::string ToString() const
InetEvpnRouteData(const EvpnRouteEntry *evpn_rt)
virtual bool CanDeletePath(Agent *agent, AgentPath *path, const AgentRoute *rt) const
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
virtual ~InetEvpnRouteData()
DISALLOW_COPY_AND_ASSIGN(InetEvpnRouteData)
virtual AgentPath * CreateAgentPath(const Peer *peer, AgentRoute *rt) const
virtual const NextHop * ComputeNextHop(Agent *agent) const
virtual bool Sync(AgentRoute *sync_route)
const MacAddress & MacAddr() const
virtual ~InetEvpnRoutePath()
virtual const AgentPath * UsablePath() const
DISALLOW_COPY_AND_ASSIGN(InetEvpnRoutePath)
bool SyncDependantRoute(const AgentRoute *sync_route)
void SetMacAddr(const MacAddress &mac)
virtual std::string ToString() const
const std::string & Parent() const
virtual bool IsLess(const AgentPath &rhs) const
InetEvpnRoutePath(const Peer *peer, const MacAddress &mac, const std::string &parent, AgentRoute *rt)
void SetParent(const std::string &parent)
virtual ~InetInterfaceRoute()
DISALLOW_COPY_AND_ASSIGN(InetInterfaceRoute)
virtual bool UpdateRoute(AgentRoute *rt)
virtual std::string ToString() const
InetInterfaceRoute(const InetInterfaceKey &intf, uint32_t label, int tunnel_bmap, const VnListType &dest_vn_list, uint64_t sequence_number)
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
SecurityGroupList sg_list_
DISALLOW_COPY_AND_ASSIGN(InetUnicastNdpRoute)
virtual std::string ToString() const
virtual ~InetUnicastNdpRoute()
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
InetUnicastNdpRoute(const std::string &vrf_name, const IpAddress &addr, bool policy, const VnListType &vn_list, const SecurityGroupList &sg, const TagList &tag)
DISALLOW_COPY_AND_ASSIGN(IpamSubnetRoute)
virtual bool UpdateRoute(AgentRoute *rt)
virtual ~IpamSubnetRoute()
IpamSubnetRoute(DBRequest &nh_req, const std::string &dest_vn_name)
virtual string ToString() const
std::string dest_vn_name_
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
const PathPreference path_preference_
std::string dest_vn_name_
virtual ~L2ReceiveRoute()
virtual bool UpdateRoute(AgentRoute *rt)
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
DISALLOW_COPY_AND_ASSIGN(L2ReceiveRoute)
virtual std::string ToString() const
L2ReceiveRoute(const std::string &dest_vn_name, uint32_t vxlan_id, uint32_t mpls_label, const PathPreference &pref, uint64_t sequence_number)
virtual bool UpdateRoute(AgentRoute *rt)
PathPreference path_preference_
const CommunityList & communities() const
const std::string & intf_route_type() const
bool is_health_check_service_
void set_tunnel_bmap(TunnelType::TypeBmap bmap)
std::string intf_route_type_
EcmpLoadBalance ecmp_load_balance_
uint32_t vxlan_id() const
const TagList & tag_list() const
LocalVmRoute(const VmInterfaceKey &intf, uint32_t mpls_label, uint32_t vxlan_id, bool force_policy, const VnListType &vn_list, uint8_t flags, const SecurityGroupList &sg_list, const TagList &tag_list, const CommunityList &communities, const PathPreference &path_preference, const IpAddress &subnet_service_ip, const EcmpLoadBalance &ecmp_load_balance, bool is_local, bool is_health_check_service, uint64_t sequence_number, bool etree_leaf, bool native_encap, const std::string &intf_route_type="", bool is_learnt_route=false)
TunnelType::TypeBmap tunnel_bmap_
DISALLOW_COPY_AND_ASSIGN(LocalVmRoute)
const PathPreference & path_preference() const
uint32_t native_vrf_id() const
CommunityList communities_
const SecurityGroupList & sg_list() const
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
IpAddress subnet_service_ip_
virtual std::string ToString() const
void set_native_vrf_id(uint32_t vrf_id)
uint32_t tunnel_bmap() const
SecurityGroupList sg_list_
void set_path_preference(const PathPreference &path_preference)
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
virtual std::string ToString() const
virtual ~MacVmBindingPathData()
const VmInterface * vm_intf_
virtual AgentPath * CreateAgentPath(const Peer *peer, AgentRoute *rt) const
MacVmBindingPathData(const VmInterface *vm_intf, bool flood_dhcp)
DISALLOW_COPY_AND_ASSIGN(MacVmBindingPathData)
virtual ~MacVmBindingPath()
virtual bool flood_dhcp() const
const VmInterface * vm_interface() const
DISALLOW_COPY_AND_ASSIGN(MacVmBindingPath)
MacVmBindingPath(const Peer *peer)
virtual const NextHop * ComputeNextHop(Agent *agent) const
virtual bool IsLess(const AgentPath &right) const
InterfaceConstRef vm_interface_
void set_flood_dhcp(bool flood_dhcp)
void set_vm_interface(const VmInterface *vm_interface)
virtual ~MulticastRoutePath()
MulticastRoutePath(const Peer *peer)
NextHopRef original_nh() const
NextHop * UpdateNH(Agent *agent, CompositeNH *cnh, const TsnElector *te)
void set_original_nh(NextHopRef nh)
virtual bool PostChangeNH(Agent *agent, NextHop *nh)
DISALLOW_COPY_AND_ASSIGN(MulticastRoutePath)
void UpdateLabels(uint32_t evpn_label, uint32_t fabric_label)
static bool CopyPathParameters(Agent *agent, AgentPath *path, const std::string &dest_vn_name, bool unresolved, uint32_t vxlan_id, uint32_t label, uint32_t tunnel_type, NextHop *nh, const AgentRoute *rt, bool ha_stale=false)
COMPOSITETYPE comp_nh_type_
MulticastRoute(const string &vn_name, uint32_t label, int vxlan_id, uint32_t tunnel_type, DBRequest &nh_req, COMPOSITETYPE comp_nh_type, uint64_t sequence_number, bool ha_stale=false)
uint32_t vxlan_id() const
DISALLOW_COPY_AND_ASSIGN(MulticastRoute)
COMPOSITETYPE comp_nh_type() const
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
virtual ~MulticastRoute()
virtual bool CanDeletePath(Agent *agent, AgentPath *path, const AgentRoute *rt) const
DBRequest composite_nh_req_
virtual std::string ToString() const
virtual AgentPath * CreateAgentPath(const Peer *peer, AgentRoute *rt) const
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
PathPreference path_preference_
SecurityGroupList sg_list_
const TagList & tag_list() const
PBBRoute(const VrfKey &vrf_key, const MacAddress &mac, uint32_t isid, const VnListType &vn_list, const SecurityGroupList &sg_list, const TagList &tag_list)
virtual std::string ToString() const
DISALLOW_COPY_AND_ASSIGN(PBBRoute)
const SecurityGroupList & sg_list() const
const IpAddress & dependent_ip() const
bool operator==(const PathPreference &rhs) const
bool ConfigChanged(const PathPreference &rhs) const
bool static_preference() const
void set_loc_sequence(uint32_t loc_sequence)
void set_wait_for_traffic(bool wait_for_traffic)
bool operator!=(const PathPreference &rhs) const
uint32_t loc_sequence() const
uint32_t preference() const
void set_static_preference(bool static_pref)
PathPreference(uint32_t sequence, uint32_t preference, bool wait_for_traffic, bool ecmp)
uint32_t sequence() const
bool IsDependentRt(void) const
void set_sequence(uint32_t sequence)
const std::string & vrf() const
void set_dependent_ip(const IpAddress &ip)
void set_preference(uint32_t preference)
bool wait_for_traffic() const
bool operator<(const PathPreference &rhs) const
void set_vrf(const std::string &vrf)
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
SecurityGroupList sg_list_
DISALLOW_COPY_AND_ASSIGN(ReceiveRoute)
virtual bool UpdateRoute(AgentRoute *rt)
void SetIpamHostRoute(bool ipam_host_route)
virtual std::string ToString() const
void SetProxyArp(bool proxy_arp)
boost::scoped_ptr< InterfaceKey > intf_
ReceiveRoute(const InterfaceKey &intf_key, uint32_t label, uint32_t tunnel_bmap, bool policy, const std::string &vn)
boost::scoped_ptr< const InterfaceKey > intf_key_
virtual std::string ToString() const
const SecurityGroupList path_sg_list_
const TagList path_tag_list_
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
const std::string dest_vn_name_
DISALLOW_COPY_AND_ASSIGN(ResolveRoute)
ResolveRoute(const InterfaceKey *key, bool policy, const uint32_t label, const std::string &vn_name, const SecurityGroupList &sg_list, const TagList &tag_list)
static Type ComputeType(TypeBmap bmap)
virtual std::string ToString() const
VlanNhRoute(const VmInterfaceKey &intf, uint16_t tag, uint32_t label, const VnListType &dest_vn_list, const SecurityGroupList &sg_list, const TagList &tag_list, const PathPreference &path_preference, uint64_t sequence_number)
virtual bool AddChangePathExtended(Agent *agent, AgentPath *path, const AgentRoute *rt)
TunnelType::TypeBmap tunnel_bmap_
PathPreference path_preference_
SecurityGroupList sg_list_
DISALLOW_COPY_AND_ASSIGN(VlanNhRoute)
boost::intrusive_ptr< const Peer > PeerConstPtr
uint64_t sequence_number() const
@ ROUTE_PREFERENCE_CHANGE
void Swap(DBRequest *rhs)
virtual InterfaceKey * Clone() const =0
virtual bool AddChangePathExtended(Agent *, AgentPath *, const AgentRoute *)
PathPreferenceData(const PathPreference &path_preference)
virtual std::string ToString() const
PathPreference path_preference_