From 8e365bdab1d2ac6b059baa854aa2e7d75b45cd52 Mon Sep 17 00:00:00 2001 From: Jian Li Date: Fri, 12 Oct 2018 22:09:03 +0900 Subject: [PATCH] Fix: allow to specify duplicated gateways for different subnets Change-Id: I846b045c346ca328744803c2e72a5a549a95f860 --- .../impl/OpenstackSwitchingArpHandler.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java index f64adc0482..2c18f03da1 100644 --- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java +++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java @@ -277,6 +277,21 @@ public final class OpenstackSwitchingArpHandler { private void setFakeGatewayArpRule(Subnet osSubnet, boolean install, OpenstackNode osNode) { if (ARP_BROADCAST_MODE.equals(getArpMode())) { + + // do not remove fake gateway ARP rules, if there is another gateway + // which has the same subnet that to be removed + // this only occurs if we have duplicated subnets associated with + // different networks + if (!install) { + long numOfDupGws = osNetworkService.subnets().stream() + .filter(s -> !s.getId().equals(osSubnet.getId())) + .filter(s -> s.getGateway().equals(osSubnet.getGateway())) + .count(); + if (numOfDupGws > 0) { + return; + } + } + String gateway = osSubnet.getGateway(); TrafficSelector selector = DefaultTrafficSelector.builder()