Fixes OpenstackRoutingFloatingIpHandler don't create illegal rules in case of multiple gateway nodes.
Change-Id: I7dd8f3e117b53a8318882ab89a0923964306c9c2
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 bd38cd3..4c4e599 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
@@ -274,26 +274,25 @@
}
IpAddress floating = IpAddress.valueOf(floatingIp.getFloatingIpAddress());
- TrafficSelector.Builder externalSelectorBuilder = DefaultTrafficSelector.builder()
- .matchEthType(Ethernet.TYPE_IPV4)
- .matchIPDst(floating.toIpPrefix());
-
- TrafficTreatment.Builder externalBuilder = DefaultTrafficTreatment.builder()
- .setEthSrc(Constants.DEFAULT_GATEWAY_MAC)
- .setEthDst(instPort.macAddress())
- .setIpDst(instPort.ipAddress().getIp4Address());
-
- if (!externalPeerRouter.externalPeerRouterVlanId().equals(VlanId.NONE)) {
- externalSelectorBuilder.matchVlanId(externalPeerRouter.externalPeerRouterVlanId()).build();
- externalBuilder.popVlan();
- }
osNodeService.completeNodes(GATEWAY).forEach(gNode -> {
+ TrafficSelector.Builder externalSelectorBuilder = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV4)
+ .matchIPDst(floating.toIpPrefix());
+ TrafficTreatment.Builder externalTreatmentBuilder = DefaultTrafficTreatment.builder()
+ .setEthSrc(Constants.DEFAULT_GATEWAY_MAC)
+ .setEthDst(instPort.macAddress())
+ .setIpDst(instPort.ipAddress().getIp4Address());
+
+ if (!externalPeerRouter.externalPeerRouterVlanId().equals(VlanId.NONE)) {
+ externalSelectorBuilder.matchVlanId(externalPeerRouter.externalPeerRouterVlanId()).build();
+ externalTreatmentBuilder.popVlan();
+ }
switch (osNet.getNetworkType()) {
case VXLAN:
- externalBuilder.setTunnelId(Long.valueOf(osNet.getProviderSegID()))
+ externalTreatmentBuilder.setTunnelId(Long.valueOf(osNet.getProviderSegID()))
.extension(buildExtension(
deviceService,
gNode.intgBridge(),
@@ -302,7 +301,7 @@
.setOutput(gNode.tunnelPortNum());
break;
case VLAN:
- externalBuilder.pushVlan()
+ externalTreatmentBuilder.pushVlan()
.setVlanId(VlanId.vlanId(osNet.getProviderSegID()))
.setOutput(gNode.vlanPortNum());
break;
@@ -316,7 +315,7 @@
appId,
gNode.intgBridge(),
externalSelectorBuilder.build(),
- externalBuilder.build(),
+ externalTreatmentBuilder.build(),
PRIORITY_FLOATING_EXTERNAL,
GW_COMMON_TABLE,
install);