From bae44bc3ee95b8919b9a6a54d1f913cf0ff7b8a4 Mon Sep 17 00:00:00 2001 From: manishsingh Date: Mon, 15 Dec 2014 21:04:21 +0530 Subject: [PATCH] Fix the check for flood of arp. Add UT for same. Change-Id: Id2a003c815436cdb7df80820f0a6c8ad6ac6eeba Closes-bug: 1402627 --- src/vnsw/agent/oper/inet_unicast_route.cc | 13 +++++++------ src/vnsw/agent/test/test_route.cc | 2 ++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/vnsw/agent/oper/inet_unicast_route.cc b/src/vnsw/agent/oper/inet_unicast_route.cc index f897bc0e980..279e8b256a3 100644 --- a/src/vnsw/agent/oper/inet_unicast_route.cc +++ b/src/vnsw/agent/oper/inet_unicast_route.cc @@ -420,13 +420,14 @@ bool InetUnicastRouteEntry::FloodArp() const { Agent *agent = (static_cast (get_table()))->agent(); const AgentPath *local_path = FindPath(agent->local_peer()); - if (local_path && (local_path->is_subnet_discard() == false)) - return false; - - if (GetActiveNextHop()->GetType() == NextHop::RESOLVE) - return false; + //Only look for subnet route programmed via IPAM(i.e. will have local path + //as subnet discard) and active path of that subnet route should not be + //resolve. + if (local_path && (local_path->is_subnet_discard() == true) && + (GetActiveNextHop()->GetType() != NextHop::RESOLVE)) + return true; - return true; + return false; } // Handle add/update of a path in route. diff --git a/src/vnsw/agent/test/test_route.cc b/src/vnsw/agent/test/test_route.cc index 7bdeabb9b8c..f0d1dde7356 100644 --- a/src/vnsw/agent/test/test_route.cc +++ b/src/vnsw/agent/test/test_route.cc @@ -451,6 +451,7 @@ TEST_F(RouteTest, LocalVmRoute_1) { EXPECT_TRUE(rt->dest_vn_name() == "vn1"); EXPECT_TRUE(rt->GetActivePath()->vxlan_id() == VxLanTable::kInvalidvxlan_id); EXPECT_TRUE(rt->GetActivePath()->tunnel_bmap() == TunnelType::MplsType()); + EXPECT_FALSE(rt->FloodArp()); DeleteVmportEnv(input, 1, true); client->WaitForIdle(); @@ -469,6 +470,7 @@ TEST_F(RouteTest, RemoteVmRoute_1) { EXPECT_TRUE(rt->dest_vn_name() == vrf_name_); EXPECT_TRUE(rt->GetActiveLabel() == MplsTable::kStartLabel); EXPECT_TRUE(rt->GetActiveNextHop()->GetType() == NextHop::TUNNEL); + EXPECT_FALSE(rt->FloodArp()); DeleteRoute(NULL, vrf_name_, remote_vm_ip_, 32); EXPECT_FALSE(RouteFind(vrf_name_, remote_vm_ip_, 32));