Fix: differentiate gateway ARP rule and floating ARP rule
Change-Id: Ic4b2173f2e7b34abf090eae7333b70d9096f8352
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
index b49ec74..084e969 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
@@ -477,6 +477,7 @@
private void setArpRule(NetFloatingIP fip, MacAddress targetMac,
OpenstackNode gateway, boolean install) {
TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchInPort(gateway.uplinkPortNum())
.matchEthType(EthType.EtherType.ARP.ethType().toShort())
.matchArpOp(ARP.OP_REQUEST)
.matchArpTpa(Ip4Address.valueOf(fip.getFloatingIpAddress()))
@@ -584,7 +585,8 @@
// do not allow to proceed without leadership
NodeId leader = leadershipService.getLeader(appId.name());
return Objects.equals(localNodeId, leader) &&
- DEVICE_OWNER_ROUTER_GW.equals(osPort.getDeviceOwner());
+ DEVICE_OWNER_ROUTER_GW.equals(osPort.getDeviceOwner()) &&
+ ARP_BROADCAST_MODE.equals(getArpMode());
}
@Override
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
index beaa1f1..cbe22e0 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
@@ -894,8 +894,7 @@
if (fip != null) {
instancePortService.updateInstancePort(
instPort.updateState(REMOVE_PENDING));
- eventExecutor.execute(() ->
- updateFipStore(instancePortService.instancePort(event.port().getId())));
+ eventExecutor.execute(() -> updateFipStore(event.port().getId()));
} else {
// FIXME: we have dependency with security group, need to
// find a better way to remove this dependency
@@ -909,9 +908,9 @@
}
}
- private void updateFipStore(InstancePort port) {
+ private void updateFipStore(String portId) {
- if (port == null) {
+ if (portId == null) {
return;
}
@@ -923,7 +922,7 @@
if (Strings.isNullOrEmpty(fip.getFloatingIpAddress())) {
continue;
}
- if (fip.getFixedIpAddress().equals(port.ipAddress().toString())) {
+ if (fip.getPortId().equals(portId)) {
NeutronFloatingIP neutronFip = (NeutronFloatingIP) fip;
// invalidate bound fixed IP and port
neutronFip.setFixedIpAddress(null);