Fixes OpenstackRoutingFloatingIpHandler don't create illegal upstream rules in case of multiple gateway nodes.
Change-Id: Icf831e4d08873370ef2cba0a82c73941f5676731
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 4c4e599..42fd73d 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
@@ -386,30 +386,30 @@
throw new IllegalStateException(error);
}
- TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder()
- .setIpSrc(floating.getIp4Address())
- .setEthSrc(instPort.macAddress())
- .setEthDst(externalPeerRouter.externalPeerRouterMac());
-
- if (osNet.getNetworkType().equals(NetworkType.VLAN)) {
- tBuilder.popVlan();
- }
-
- if (!externalPeerRouter.externalPeerRouterVlanId().equals(VlanId.NONE)) {
- tBuilder.pushVlan().setVlanId(externalPeerRouter.externalPeerRouterVlanId());
- }
+ TrafficSelector selector = sBuilder.build();
osNodeService.completeNodes(GATEWAY).forEach(gNode -> {
+ TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder()
+ .setIpSrc(floating.getIp4Address())
+ .setEthSrc(instPort.macAddress())
+ .setEthDst(externalPeerRouter.externalPeerRouterMac());
+ if (osNet.getNetworkType().equals(NetworkType.VLAN)) {
+ tBuilder.popVlan();
+ }
+
+ if (!externalPeerRouter.externalPeerRouterVlanId().equals(VlanId.NONE)) {
+ tBuilder.pushVlan().setVlanId(externalPeerRouter.externalPeerRouterVlanId());
+ }
osFlowRuleService.setRule(
appId,
gNode.intgBridge(),
- sBuilder.build(),
+ selector,
tBuilder.setOutput(gNode.uplinkPortNum()).build(),
PRIORITY_FLOATING_EXTERNAL,
GW_COMMON_TABLE,
install);
- });
+ });
log.trace("Succeeded to set flow rules for upstream on gateway nodes");
}