diff --git a/src/vnsw/agent/services/arp_proto.cc b/src/vnsw/agent/services/arp_proto.cc index 9819b9ae63e..5d83cc98c44 100644 --- a/src/vnsw/agent/services/arp_proto.cc +++ b/src/vnsw/agent/services/arp_proto.cc @@ -140,10 +140,6 @@ bool ArpPathPreferenceState::SendArpRequest(WaitForTrafficIntfMap WaitForTrafficIntfMap::iterator it = wait_for_traffic_map.begin(); for (;it != wait_for_traffic_map.end(); it++) { - if (it->second >= kMaxRetry) { - continue; - } - const VmInterface *vm_intf = static_cast( vrf_state_->agent->interface_table()->FindInterface(it->first)); if (!vm_intf) { @@ -161,6 +157,12 @@ bool ArpPathPreferenceState::SendArpRequest(WaitForTrafficIntfMap MacAddress(), vm_ip_.to_v4().to_ulong(), it->first, vrf_id_); vrf_state_->arp_proto->IncrementStatsVmArpReq(); + + // reduce the frequency of ARP requests after some tries + if (it->second >= kMaxRetry) { + arp_req_timer_->Reschedule(kTimeout * 5); + } + ret = true; } return ret; @@ -222,17 +224,14 @@ void ArpPathPreferenceState::SendArpRequestForAllIntf(const AgentRoute *route) { gw_ip_ = path->subnet_service_ip(); } uint32_t intf_id = intf->id(); - bool wait_for_traffic = path->path_preference().wait_for_traffic(); //Build new list of interfaces in active state - if (wait_for_traffic == true) { - WaitForTrafficIntfMap::const_iterator wait_for_traffic_it = - wait_for_traffic_map.find(intf_id); - if (wait_for_traffic_it == wait_for_traffic_map.end()) { - new_wait_for_traffic_map.insert(std::make_pair(intf_id, 0)); - } else { - new_wait_for_traffic_map.insert(std::make_pair(intf_id, - wait_for_traffic_it->second)); - } + WaitForTrafficIntfMap::const_iterator wait_for_traffic_it = + wait_for_traffic_map.find(intf_id); + if (wait_for_traffic_it == wait_for_traffic_map.end()) { + new_wait_for_traffic_map.insert(std::make_pair(intf_id, 0)); + } else { + new_wait_for_traffic_map.insert(std::make_pair(intf_id, + wait_for_traffic_it->second)); } } } diff --git a/src/vnsw/agent/services/test/arp_path_preference_test.cc b/src/vnsw/agent/services/test/arp_path_preference_test.cc index 005a2c6a26e..b58d7208572 100644 --- a/src/vnsw/agent/services/test/arp_path_preference_test.cc +++ b/src/vnsw/agent/services/test/arp_path_preference_test.cc @@ -143,7 +143,7 @@ TEST_F(ArpPathPreferenceTest, Test3) { MacAddress::ZeroMac()); client->WaitForIdle(); - EXPECT_FALSE(CheckIpMap(vrf_id, intf_id, ip)); + EXPECT_TRUE(CheckIpMap(vrf_id, intf_id, ip)); EXPECT_TRUE(CheckEvpnMap(vrf_id, intf_id, ip)); EXPECT_TRUE(GetEvpnMapRetryCount(vrf_id, intf_id, ip) >= 2); }