5 #ifndef __CONTROLLER_PEER_H__
6 #define __CONTROLLER_PEER_H__
11 #include <boost/function.hpp>
12 #include <boost/system/error_code.hpp>
13 #include <boost/scoped_ptr.hpp>
14 #include <boost/shared_ptr.hpp>
17 #include <pugixml/pugixml.hpp>
18 #include <xmpp_enet_types.h>
19 #include <xmpp_unicast_types.h>
39 virtual void write(
const void *data,
size_t size) {
40 repr_->append(static_cast<const char*>(data), size);
49 const std::string &xmpp_server,
50 const std::string &label_range, uint8_t xs_idx);
53 virtual std::string
ToString()
const;
54 virtual bool SendUpdate(
const uint8_t *msg,
size_t msgsize);
93 uint32_t native_vrf_id);
103 const std::string &destination,
104 const std::string &source,
113 uint32_t tunnel_bmap,
123 const std::string &destination,
124 const std::string &source,
125 uint32_t tunnel_bmap);
169 uint32_t tunnel_bmap,
170 const std::string &destination,
171 const std::string &source,
179 std::stringstream &node_id,
182 const std::string &vn,
187 uint32_t tunnel_bmap,
190 bool assisted_replication);
194 autogen::EnetItemType *item);
195 void AddEvpnRoute(
const std::string &vrf_name, std::string mac_addr,
197 autogen::EnetItemType *item);
200 autogen::EnetItemType *item,
202 template <
typename TYPE>
213 virtual void WriteReadyCb(
const boost::system::error_code &ec);
229 autogen::ItemType *item);
231 autogen::ItemType *item);
234 autogen::EnetItemType *item);
236 autogen::ItemType *item,
239 uint32_t prefix_len, autogen::ItemType *item,
242 autogen::ItemType *item,
245 autogen::ItemType *item,
247 template <
typename TYPE>
252 const std::string &prefix_str);
260 uint32_t tunnel_bmap,
265 uint32_t native_vrf_id);
267 std::stringstream &node_id,
270 const std::string &vn,
275 uint32_t tunnel_bmap,
276 const std::string &destination,
277 const std::string &source,
280 std::stringstream &node_id,
283 const std::string &vn,
288 uint32_t tunnel_bmap,
292 std::stringstream &ss_node,
295 template <
typename TYPE>
bool IsEcmp(
const TYPE &nexthops);
296 template <
typename TYPE>
void GetVnList(
const TYPE &nexthops,
312 #endif // __CONTROLLER_PEER_H__
XmppChannel * GetXmppChannel()
bool BuildAndSendEvpnDom(autogen::EnetItemType &item, std::stringstream &ss_node, const AgentRoute *route, bool associate)
virtual std::string ToString() const
void AddRoute(std::string vrf_name, IpAddress ip, uint32_t plen, autogen::ItemType *item)
uint64_t route_published_time() const
std::string GetMcastLabelRange()
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.
virtual void ReceiveInet4MplsUpdate(XmlPugi *pugi)
void GetVnList(const TYPE &nexthops, VnListType *vn_list)
bool IsEcmp(const TYPE &nexthops)
void ReceiveInternal(const XmppStanza::XmppMessage *msg)
boost::asio::ip::address IpAddress
static bool ControllerSendRouteAdd(AgentXmppChannel *peer, AgentRoute *route, const Ip4Address *nexthop_ip, const VnListType &vn_list, uint32_t label, uint32_t tunnel_bmap, const SecurityGroupList *sg_list, const TagList *tag_list, const CommunityList *communities, Agent::RouteTableType type, const PathPreference &path_preference, const EcmpLoadBalance &ecmp_load_balance, uint32_t native_vrf_id)
EndOfRibTxTimer * end_of_rib_tx_timer()
InetUnicastAgentRouteTable * PrefixToRouteMplsTable(const std::string &vrf_name, const IpAddress &prefix_addr)
void AddMplsRoute(std::string vrf_name, IpAddress ip, uint32_t plen, autogen::ItemType *item)
std::vector< int > SecurityGroupList
EndOfRibRxTimer * end_of_rib_rx_timer()
void AddRemoteMplsRoute(std::string vrf_name, IpAddress ip, uint32_t plen, autogen::ItemType *item, const VnListType &vn_list)
void StartEndOfRibTxWalker()
boost::intrusive_ptr< Peer > PeerPtr
void UpdateConnectionInfo(xmps::PeerState state)
boost::scoped_ptr< EndOfRibRxTimer > end_of_rib_rx_timer_
bool ControllerSendMvpnRouteCommon(AgentRoute *route, bool associate)
boost::scoped_ptr< LlgrStaleTimer > llgr_stale_timer_
virtual void write(const void *data, size_t size)
static bool ControllerSendVmCfgSubscribe(AgentXmppChannel *peer, const boost::uuids::uuid &vm_id, bool subscribe)
static void SetMulticastPeer(AgentXmppChannel *old_peer, AgentXmppChannel *new_peer)
Base class for all Route entries in agent.
static bool ControllerSendMcastRouteAdd(AgentXmppChannel *peer, AgentRoute *route)
static void HandleAgentXmppClientChannelEvent(AgentXmppChannel *peer, xmps::PeerState state)
void StopEndOfRibTxWalker()
void ReceiveBgpMessage(std::unique_ptr< XmlBase > impl)
ControllerEcmpRoute * BuildEcmpData(TYPE *item, const VnListType &vn_list, const EcmpLoadBalance &ecmp_load_balance, const AgentRouteTable *rt_table, const std::string &prefix_str)
virtual void ReceiveV4V6Update(XmlPugi *pugi)
bool ControllerSendV4V6UnicastRouteCommon(AgentRoute *route, const VnListType &vn_list, const SecurityGroupList *sg_list, const TagList *tag_list, const CommunityList *communities, uint32_t mpls_label, uint32_t tunnel_bmap, const PathPreference &path_preference, bool associate, Agent::RouteTableType type, const EcmpLoadBalance &ecmp_load_balance, uint32_t native_vrf_id)
void AddInetEcmpRoute(std::string vrf_name, IpAddress ip, uint32_t plen, autogen::ItemType *item, const VnListType &vn_list)
static bool IsXmppChannelActive(const Agent *agent, AgentXmppChannel *peer)
LlgrStaleTimer * llgr_stale_timer()
uint64_t sequence_number() const
bool ControllerSendMcastRouteCommon(AgentRoute *route, bool associate)
virtual void ReceiveMvpnUpdate(XmlPugi *pugi)
uint64_t route_published_time_
AgentXmppChannel(Agent *agent, const std::string &xmpp_server, const std::string &label_range, uint8_t xs_idx)
static void CleanConfigStale(AgentXmppChannel *agent_xmpp_channel)
XmlWriter(std::string *repr)
PeerPtr bgp_peer_id_ref()
std::vector< std::string > CommunityList
uint8_t GetXmppServerIdx()
static void XmppClientChannelEvent(AgentXmppChannel *peer, xmps::PeerState state)
InetUnicastAgentRouteTable * PrefixToRouteTable(const std::string &vrf_name, const IpAddress &prefix_addr)
bool ControllerSendIPMcastRouteCommon(AgentRoute *route, bool associate)
static bool ControllerSendCfgSubscribe(AgentXmppChannel *peer)
std::set< std::string > VnListType
virtual void ReceiveUpdate(const XmppStanza::XmppMessage *msg)
boost::asio::ip::address_v4 Ip4Address
std::string GetXmppServer()
virtual ~AgentXmppChannel()
void AddFabricVrfRoute(const Ip4Address &prefix_addr, uint32_t prefix_len, const Ip4Address &addr, const VnListType &vn_list, const SecurityGroupList &sg_list, const TagList &tag_list)
void AddEvpnRoute(const std::string &vrf_name, std::string mac_addr, const IpAddress &ip, uint32_t plen, autogen::EnetItemType *item)
bool BuildEvpnUnicastMessage(autogen::EnetItemType &item, std::stringstream &node_id, AgentRoute *route, const Ip4Address *nh_ip, const std::string &vn, const SecurityGroupList *sg_list, const TagList *tag_list, const CommunityList *communities, uint32_t label, uint32_t tunnel_bmap, const PathPreference &path_prefernce, bool associate)
boost::scoped_ptr< EndOfRibTxTimer > end_of_rib_tx_timer_
void AddEvpnEcmpRoute(std::string vrf_name, const MacAddress &mac, const IpAddress &ip, uint32_t plen, autogen::EnetItemType *item, const VnListType &vn_list)
void AddMulticastEvpnRoute(const std::string &vrf_name, const IpAddress &source, const IpAddress &group, autogen::EnetItemType *item)
bool BuildTorMulticastMessage(autogen::EnetItemType &item, std::stringstream &node_id, AgentRoute *route, const Ip4Address *nh_ip, const std::string &vn, const SecurityGroupList *sg_list, const TagList *tag_list, const CommunityList *communities, uint32_t label, uint32_t tunnel_bmap, const std::string &destination, const std::string &source, bool associate)
static bool ControllerSendRouteDelete(AgentXmppChannel *peer, AgentRoute *route, const VnListType &vn_list, uint32_t label, uint32_t tunnel_bmap, const SecurityGroupList *sg_list, const TagList *tag_list, const CommunityList *communities, Agent::RouteTableType type, const PathPreference &path_preference)
void RegisterXmppChannel(XmppChannel *channel)
void BuildTagList(const TYPE *item, TagList *tag_list)
static bool ControllerSendMcastRouteDelete(AgentXmppChannel *peer, AgentRoute *route)
virtual void ReceiveMulticastUpdate(XmlPugi *pugi)
static bool SetConfigPeer(AgentXmppChannel *peer)
static bool ControllerSendEvpnRouteAdd(AgentXmppChannel *peer, AgentRoute *route, const Ip4Address *nexthop_ip, std::string vn, uint32_t mpls_label, uint32_t tunnel_bmap, const SecurityGroupList *sg_list, const TagList *tag_list, const CommunityList *communities, const std::string &destination, const std::string &source, const PathPreference &path_preference)
bool BuildEvpnMulticastMessage(autogen::EnetItemType &item, std::stringstream &node_id, AgentRoute *route, const Ip4Address *nh_ip, const std::string &vn, const SecurityGroupList *sg_list, const TagList *tag_list, const CommunityList *communities, uint32_t label, uint32_t tunnel_bmap, bool associate, const AgentPath *path, bool assisted_replication)
virtual void ReceiveEvpnUpdate(XmlPugi *pugi)
void AddInetMplsEcmpRoute(std::string vrf_name, IpAddress ip, uint32_t plen, autogen::ItemType *item, const VnListType &vn_list)
virtual void WriteReadyCb(const boost::system::error_code &ec)
static bool ControllerSendSubscribe(AgentXmppChannel *peer, VrfEntry *vrf, bool subscribe)
virtual bool SendUpdate(const uint8_t *msg, size_t msgsize)
static bool ControllerSendEvpnRouteDelete(AgentXmppChannel *peer, AgentRoute *route, std::string vn, uint32_t mpls_label, const std::string &destination, const std::string &source, uint32_t tunnel_bmap)
bool ControllerSendEvpnRouteCommon(AgentRoute *route, const Ip4Address *nexthop_ip, std::string vn, const SecurityGroupList *sg_list, const TagList *tag_list, const CommunityList *communities, uint32_t mpls_label, uint32_t tunnel_bmap, const std::string &destination, const std::string &source, const PathPreference &path_preference, bool associate)
static bool IsBgpPeerActive(const Agent *agent, AgentXmppChannel *peer)
std::vector< int > TagList
std::string GetBgpPeerName() const
void AddRemoteRoute(std::string vrf_name, IpAddress prefix_addr, uint32_t prefix_len, autogen::ItemType *item, const VnListType &vn_list)