[ONOS-4481] Integrate scalable gateway to openstackRouting
- Modified openstack_routing to use scalable gateway application
- Add GatewayNode Builder method
Change-Id: Ib12d52009eeb89ab59f01cafe794894aac80985e
diff --git a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
index 406179a..6da1523 100644
--- a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
+++ b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
@@ -56,6 +56,7 @@
import org.onosproject.openstacknetworking.OpenstackRoutingService;
import org.onosproject.openstacknetworking.OpenstackSubjectFactories;
import org.onosproject.openstacknetworking.OpenstackSwitchingService;
+import org.onosproject.scalablegateway.api.ScalableGatewayService;
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.ConsistentMap;
import org.onosproject.store.service.Serializer;
@@ -113,6 +114,8 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected StorageService storageService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected ScalableGatewayService gatewayService;
private ApplicationId appId;
private ConsistentMap<Integer, String> tpPortNumMap; // Map<PortNum, allocated VM`s Mac & destionation Ip address>
@@ -444,8 +447,7 @@
if (context.isHandled()) {
return;
- } else if (!context.inPacket().receivedFrom().deviceId().toString()
- .equals(config.gatewayBridgeId())) {
+ } else if (!checkGatewayNode(context.inPacket().receivedFrom().deviceId())) {
return;
}
@@ -472,16 +474,19 @@
}
default:
int portNum = getPortNum(ethernet.getSourceMAC(), iPacket.getDestinationAddress());
- Optional<Port> port =
- getExternalPort(pkt.receivedFrom().deviceId(), config.gatewayExternalInterfaceName());
- if (port.isPresent()) {
+ DeviceId deviceId = pkt.receivedFrom().deviceId();
+ Port port = null;
+ port = deviceService.getPort(deviceId,
+ gatewayService.getGatewayExternalPorts(deviceId).get(0));
+ if (port != null) {
OpenstackPort openstackPort = getOpenstackPort(ethernet.getSourceMAC(),
Ip4Address.valueOf(iPacket.getSourceAddress()));
l3EventExecutorService.execute(new OpenstackPnatHandler(rulePopulator, context,
- portNum, openstackPort, port.get(), config));
+ portNum, openstackPort, port, config));
} else {
log.warn("There`s no external interface");
}
+
break;
}
} else if (ethernet.getEtherType() == Ethernet.TYPE_ARP) {
@@ -511,6 +516,10 @@
}
+ private boolean checkGatewayNode(DeviceId deviceId) {
+ return gatewayService.getGatewayDeviceIds().contains(deviceId);
+ }
+
private void clearPortNumMap() {
tpPortNumMap.entrySet().forEach(e -> {
if (System.currentTimeMillis() - e.getValue().creationTime() > PNAT_PORT_EXPIRE_TIME) {
@@ -600,21 +609,12 @@
return;
}
- checkNotNull(config.physicalRouterMac());
- checkNotNull(config.gatewayBridgeId());
- checkNotNull(config.gatewayExternalInterfaceMac());
- checkNotNull(config.gatewayExternalInterfaceName());
-
- log.warn("Configured info: {}, {}, {}, {}", config.physicalRouterMac(), config.gatewayBridgeId(),
- config.gatewayExternalInterfaceMac(), config.gatewayExternalInterfaceName());
-
- rulePopulator = new OpenstackRoutingRulePopulator(appId,
- openstackService, flowObjectiveService, deviceService, driverService, config);
-
+ rulePopulator = new OpenstackRoutingRulePopulator(appId, openstackService, flowObjectiveService,
+ deviceService, driverService, config, gatewayService);
openstackIcmpHandler = new OpenstackIcmpHandler(packetService, deviceService,
- openstackService, config, openstackSwitchingService);
- openstackArpHandler = new OpenstackRoutingArpHandler(packetService, openstackService, config);
-
+ openstackService, config, openstackSwitchingService, gatewayService);
+ openstackArpHandler = new OpenstackRoutingArpHandler(packetService, openstackService,
+ config, gatewayService);
openstackIcmpHandler.requestPacket(appId);
openstackArpHandler.requestPacket(appId);