Skip to content

Commit

Permalink
Merge "* Ignore broadcast route change when p-VRF is absent"
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Feb 23, 2017
2 parents 764f137 + dcee54c commit c9c7e7f
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/vnsw/agent/oper/agent_sandesh.cc
Expand Up @@ -1222,7 +1222,7 @@ bool QosQueueSandesh::FilterToArgs(AgentSandeshArguments *args) {
BridgeDomainSandesh::BridgeDomainSandesh(const std::string &context,
const std::string &u,
const std::string &name) :
AgentSandesh(context, ""), name_(name) {
AgentSandesh(context, ""), uuid_str_(u), name_(name) {
boost::system::error_code ec;
uuid_ = StringToUuid(u);
}
Expand Down
9 changes: 5 additions & 4 deletions src/vnsw/agent/oper/multicast.cc
Expand Up @@ -900,11 +900,12 @@ void MulticastHandler::ModifyEvpnMembers(const Peer *peer,
MulticastGroupObject *obj = FindActiveGroupObject(vrf_name, grp);
std::string derived_vrf_name = vrf_name;

if (ethernet_tag) {
if (ethernet_tag && obj) {
MulticastGroupObject *dependent_mg =
obj->GetDependentMG(ethernet_tag);
if (dependent_mg) {
obj = dependent_mg;
derived_vrf_name = obj->vrf_name();
}
}

Expand All @@ -921,7 +922,7 @@ void MulticastHandler::ModifyEvpnMembers(const Peer *peer,
TriggerRemoteRouteChange(obj, peer, derived_vrf_name, olist,
peer_identifier, delete_op, Composite::EVPN,
MplsTable::kInvalidLabel, false, ethernet_tag);
MCTRACE(Log, "Add EVPN TOR Olist ", vrf_name, grp.to_string(), 0);
MCTRACE(Log, "Add EVPN TOR Olist ", derived_vrf_name, grp.to_string(), 0);
}

void MulticastHandler::ModifyTorMembers(const Peer *peer,
Expand Down Expand Up @@ -959,9 +960,9 @@ void MulticastGroupObject::FlushAllPeerInfo(const Agent *agent,
(peer_identifier == INVALID_PEER_IDENTIFIER)) {
agent->oper_db()->multicast()->DeleteBroadcast(peer, vrf_name_, 0,
Composite::FABRIC);
MCTRACE(Log, "Delete broadcast route", vrf_name_,
grp_address_.to_string(), 0);
}
MCTRACE(Log, "Delete broadcast route", vrf_name_,
grp_address_.to_string(), 0);
}

MulticastHandler::MulticastHandler(Agent *agent)
Expand Down
52 changes: 52 additions & 0 deletions src/vnsw/agent/oper/test/test_bridge_domain_mg.cc
Expand Up @@ -414,6 +414,58 @@ TEST_F(BridgeDomainMGTest, Test8) {
EXPECT_TRUE(l2_rt->GetActivePath()->vxlan_id() == 2);
}

//Verify that MPLS label points to
//multicast NH upon EVPN bgp peer path delete and readd
TEST_F(BridgeDomainMGTest, Test9) {
std::stringstream str;
//Add a peer and enqueue path add in multicast route.
BgpPeer *bgp_peer_ptr = CreateBgpPeer(Ip4Address(1), "BGP Peer1");
agent->mpls_table()->ReserveMulticastLabel(4000, 5000, 0);
MulticastHandler *mc_handler = static_cast<MulticastHandler *>(agent->
oper_db()->multicast());

CreateBridgeDomain(input[0].name, 1);
client->WaitForIdle();

//Modify olist for pbb VRF and B component VRF
//and verify it gets updated for cmac vrf
TunnelOlist olist;
olist.push_back(OlistTunnelEntry(nil_uuid(), 10,
IpAddress::from_string("8.8.8.8").to_v4(),
TunnelType::MplsType()));
mc_handler->ModifyEvpnMembers(bgp_peer_ptr,
"vrf1", olist, 1, 1);
mc_handler->ModifyEvpnMembers(bgp_peer_ptr, "vrf1",
olist, 0, 1);
client->WaitForIdle();

BridgeRouteEntry *l2_rt =
L2RouteGet("vrf1:00000000-0000-0000-0000-000000000001",
MacAddress("FF:FF:FF:FF:FF:FF"));
NextHop *l2_nh = const_cast<NextHop *>(l2_rt->GetActiveNextHop());
const CompositeNH *cnh = dynamic_cast<const CompositeNH *>(l2_nh);

uint32_t label = l2_rt->FindPath(agent->local_vm_peer())->label();
EXPECT_TRUE(MplsToNextHop(label) == cnh);

//Flush the BGP path
mc_handler->ModifyEvpnMembers(bgp_peer_ptr,
"vrf1", olist, 1,
ControllerPeerPath::kInvalidPeerIdentifier);
client->WaitForIdle();

l2_nh = const_cast<NextHop *>(l2_rt->GetActiveNextHop());
cnh = dynamic_cast<const CompositeNH *>(l2_nh);
EXPECT_TRUE(MplsToNextHop(label) == cnh);

l2_rt = L2RouteGet("vrf1", MacAddress("FF:FF:FF:FF:FF:FF"));
EXPECT_TRUE(l2_rt->FindPath(bgp_peer_ptr));

DeleteBridgeDomain(input[0].name);
DeleteBgpPeer(bgp_peer_ptr);
client->WaitForIdle();
}

int main(int argc, char **argv) {
GETUSERARGS();

Expand Down

0 comments on commit c9c7e7f

Please sign in to comment.