5 #include <boost/uuid/uuid_io.hpp>
23 using namespace boost::asio;
42 const std::string &name) {
51 const string &vn_name,
55 &component_nh_key_list) {
63 nh_req.
key.reset(nh_key);
65 nh_req.
data.reset(nh_data);
77 req.
key.reset(rt_key);
84 const string &vrf_name,
87 uint32_t ethernet_tag,
93 grp_addr, src_addr, ethernet_tag);
94 req.
key.reset(rt_key);
101 const string &interface_name,
109 req.
key.reset(rt_key);
111 boost::uuids::nil_uuid(), interface_name);
117 req.
data.reset(data);
133 req.
key.reset(rt_key);
134 req.
data.reset(NULL);
140 const string &vrf_name,
143 uint32_t ethernet_tag,
148 grp_addr, src_addr, ethernet_tag);
149 req.
key.reset(rt_key);
170 req.
data.reset(NULL);
197 str << dip_.to_string();
199 str << sip_.to_string();
206 str << dst_addr_.to_string();
208 str << src_addr_.to_string();
244 set_dest_ip_addr(grp);
245 set_src_ip_addr(src);
249 return ReComputeMulticastPaths(path,
false);
253 return ReComputeMulticastPaths(path,
true);
257 Inet4McRouteResp *resp =
static_cast<Inet4McRouteResp *
>(sresp);
259 RouteMcSandeshData data;
260 data.set_src(src_ip_addr().to_string());
261 data.set_grp(dest_ip_addr().to_string());
263 FindGroupObject(vrf()->GetName(),
Ip4Address(), dest_ip_addr());
265 const NextHop *anh = GetActiveNextHop();
267 multicast_sequence_number()))) {
271 std::vector<RouteMcSandeshData> &list =
272 const_cast<std::vector<RouteMcSandeshData>&
>(resp->get_route_list());
273 list.push_back(data);
282 if (src_addr_ == src_addr && dst_addr_ == dst_addr) {
283 return DBEntrySandesh(sresp, stale);
289 void Inet4McRouteReq::HandleRequest()
const {
293 ErrorResp *resp =
new ErrorResp();
294 resp->set_context(context());
301 boost::system::error_code ec;
302 Ip4Address zero_addr = IpAddress::from_string(
"0.0.0.0", ec).to_v4();
304 if (get_src_ip().empty()) {
307 src_ip = Ip4Address::from_string(get_src_ip(), ec);
309 if (get_grp_ip().empty()) {
312 grp_ip = Ip4Address::from_string(get_grp_ip(), ec);
314 grp_ip, get_stale()));
316 sand->DoSandesh(sand);
virtual bool ReComputePathDeletion(AgentPath *path)
const Ip4Address & dest_ip_addr() const
static Agent * GetInstance()
virtual AgentRouteKey * Clone() const
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 AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
std::unique_ptr< DBRequestData > data
virtual KeyPtr GetDBRequestKey() const
bool Enqueue(DBRequest *req)
static void Delete(const string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
std::unique_ptr< DBRequestKey > KeyPtr
void SetNHSandeshData(NhSandeshData &data) const
Base class for all Route entries in agent.
std::vector< ComponentNHKeyPtr > ComponentNHKeyList
Inet4MulticastRouteEntry * FindRoute(const Ip4Address &grp_addr, const Ip4Address &src_addr)
void AddVHostRecvRoute(const string &vm_vrf, const string &interface_name, const Ip4Address &addr, bool policy)
static void MulticastTableProcess(Agent *agent, const string &vrf_name, DBRequest &req)
virtual string ToString() const
VrfEntry * FindVrfFromId(size_t index)
static const uint32_t kInvalidvxlan_id
virtual bool ReComputePathAdd(AgentPath *path)
VNController * controller() const
std::unique_ptr< DBRequestKey > key
static TypeBmap AllType()
uint64_t sequence_number() const
static void DeleteMulticastRoute(const string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr)
virtual bool DBEntrySandesh(Sandesh *sresp, bool stale) const
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
boost::asio::ip::address_v4 Ip4Address
virtual string ToString() const
static const uint32_t kInvalidLabel
VrfTable * vrf_table() const
virtual void SetKey(const DBRequestKey *key)
static void MulticastTableEnqueue(Agent *agent, DBRequest *req)
const Ip4Address & src_ip_addr() const
uint64_t peer_identifier()
AgentRouteTable * GetInet4MulticastRouteTable(const std::string &vrf_name)
const std::string & vrf_name() const
virtual int CompareTo(const Route &rhs) const
static DBTableBase * CreateTable(DB *db, const std::string &name)
void Process(DBRequest &req)
static void AddMulticastRoute(const string &vn_name, const string &vrf_name, const Ip4Address &src_addr, const Ip4Address &grp_addr, ComponentNHKeyList &component_nh_key_list)
static MulticastHandler * GetInstance()
Inet4MulticastAgentRouteTable * fabric_inet4_multicast_table() const
virtual AgentRoute * AllocRouteEntry(VrfEntry *vrf, bool is_multicast) const