From 895571e960a1f304ec9bbed14bcac855af2d1916 Mon Sep 17 00:00:00 2001 From: Flavio Fernandes Date: Thu, 10 Dec 2015 10:57:38 -0500 Subject: [PATCH] Bug 4752 - Distributed arp only needed on compute nodes that have tenant net Missing logic to avoid adding unnecessary rules for distributed arp in compute nodes that did not have any tenant vms for a particular segmentation id Patch set 2: Fix UT Change-Id: Ib9183be4bdc6a23e0b748acfff13992e6a36c684 Signed-off-by: Flavio Fernandes --- .../ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java | 5 ++++- .../ovsdb/openstack/netvirt/impl/NeutronL3AdapterTest.java | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java index 62a7987ae8..dfcfdaa8cc 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java @@ -817,7 +817,10 @@ public class NeutronL3Adapter implements ConfigInterface { // Configure distributed ARP responder if (flgDistributedARPEnabled) { - programStaticArpStage1(dpid, providerSegmentationId, tenantMac, tenantIpStr, action); + // Arp rule is only needed when segmentation exists in the given node (bug 4752). + boolean arpNeeded = tenantNetworkManager.isTenantNetworkPresentInNode(node, providerSegmentationId); + final Action actionForNode = arpNeeded ? action : Action.DELETE; + programStaticArpStage1(dpid, providerSegmentationId, tenantMac, tenantIpStr, actionForNode); } } } diff --git a/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3AdapterTest.java b/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3AdapterTest.java index c0d6a019f3..fc9a266f80 100644 --- a/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3AdapterTest.java +++ b/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3AdapterTest.java @@ -491,6 +491,9 @@ public class NeutronL3AdapterTest { when(neutronNetwork.getProviderSegmentationID()).thenReturn(ID); List nodes = new ArrayList<>(); nodes.add(mock(Node.class)); + TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class); + MemberModifier.field(NeutronL3Adapter.class, "tenantNetworkManager").set(neutronL3Adapter , tenantNetworkManager); + when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), eq(ID))).thenReturn(true); PowerMockito.doReturn(15L).when(neutronL3Adapter, "getDpidForIntegrationBridge", any(Node.class)); // init instance variables -- 2.36.6