[ONOS-3948] Seperate mgmt and data network in OpenstackSwitching/RoutingService
- Supports the seperation of management and data network
Change-Id: I178dbe2af241123c5181f94a7b46fc15b4cb37c7
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 52a74c5..891b622 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
@@ -62,6 +62,8 @@
import java.util.Collection;
import java.util.List;
+import java.util.Map;
+import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
@@ -108,6 +110,7 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected StorageService storageService;
+
private ApplicationId appId;
private ConsistentMap<Integer, String> tpPortNumMap; // Map<PortNum, allocated VM`s Mac & destionation Ip address>
private ConsistentMap<String, OpenstackFloatingIP> floatingIpMap; // Map<FloatingIp`s Id, FloatingIp object>
@@ -117,6 +120,7 @@
private static final String DEVICE_OWNER_ROUTER_INTERFACE = "network:router_interface";
private static final String FLOATING_IP_MAP_NAME = "openstackrouting-floatingip";
private static final String TP_PORT_MAP_NAME = "openstackrouting-portnum";
+ private static final String COLON = ":";
private static final int PNAT_PORT_EXPIRE_TIME = 1200 * 1000;
private static final int TP_PORT_MINIMUM_NUM = 1024;
private static final int TP_PORT_MAXIMUM_NUM = 65535;
@@ -154,6 +158,7 @@
private OpenstackIcmpHandler openstackIcmpHandler;
private OpenstackRoutingArpHandler openstackArpHandler;
private OpenstackRoutingRulePopulator rulePopulator;
+ private Map<DeviceId, Ip4Address> computeNodeMap;
@Activate
protected void activate() {
@@ -314,7 +319,7 @@
}
private void reloadInitL3Rules() {
- l3EventExecutorService.submit(() ->
+ l3EventExecutorService.execute(() ->
openstackService.ports()
.stream()
.filter(p -> p.deviceOwner().equals(DEVICE_OWNER_ROUTER_INTERFACE))
@@ -359,7 +364,7 @@
switch (iPacket.getProtocol()) {
case IPv4.PROTOCOL_ICMP:
- icmpEventExecutorService.submit(() ->
+ icmpEventExecutorService.execute(() ->
openstackIcmpHandler.processIcmpPacket(context, ethernet));
break;
case IPv4.PROTOCOL_UDP:
@@ -371,20 +376,21 @@
}
default:
int portNum = getPortNum(ethernet.getSourceMAC(), iPacket.getDestinationAddress());
- Port port =
+ Optional<Port> port =
getExternalPort(pkt.receivedFrom().deviceId(), config.gatewayExternalInterfaceName());
- if (port == null) {
+
+ if (!port.isPresent()) {
log.warn("There`s no external interface");
- break;
+ } else {
+ OpenstackPort openstackPort = getOpenstackPort(ethernet.getSourceMAC(),
+ Ip4Address.valueOf(iPacket.getSourceAddress()));
+ l3EventExecutorService.execute(new OpenstackPnatHandler(rulePopulator, context,
+ portNum, openstackPort, port.get(), config));
}
- OpenstackPort openstackPort = getOpenstackPort(ethernet.getSourceMAC(),
- Ip4Address.valueOf(iPacket.getSourceAddress()));
- l3EventExecutorService.execute(new OpenstackPnatHandler(rulePopulator, context,
- portNum, openstackPort, port, config));
break;
}
} else if (ethernet.getEtherType() == Ethernet.TYPE_ARP) {
- arpEventExecutorService.submit(() ->
+ arpEventExecutorService.execute(() ->
openstackArpHandler.processArpPacketFromRouter(context, ethernet));
}
}
@@ -395,7 +401,7 @@
clearPortNumMap();
portNum = findUnusedPortNum();
}
- tpPortNumMap.put(portNum, sourceMac.toString().concat(":").concat(String.valueOf(destinationAddress)));
+ tpPortNumMap.put(portNum, sourceMac.toString().concat(COLON).concat(String.valueOf(destinationAddress)));
return portNum;
}
@@ -418,12 +424,11 @@
});
}
- private Port getExternalPort(DeviceId deviceId, String interfaceName) {
+ private Optional<Port> getExternalPort(DeviceId deviceId, String interfaceName) {
return deviceService.getPorts(deviceId)
.stream()
.filter(p -> p.annotations().value(PORT_NAME).equals(interfaceName))
- .findAny()
- .orElse(null);
+ .findAny();
}
private void checkExternalConnection(OpenstackRouter router,
@@ -436,33 +441,26 @@
log.debug("Not satisfied to set pnat configuration");
return;
}
- if (router.id() == null) {
- interfaces.forEach(i -> initiateL3Rule(getRouterfromExternalIp(externalIp), i));
- } else {
- interfaces.forEach(i -> initiateL3Rule(router, i));
- }
-
+ interfaces.forEach(this::initiateL3Rule);
}
- private OpenstackRouter getRouterfromExternalIp(Ip4Address externalIp) {
- OpenstackRouter router = getExternalRouter(true)
+ private Optional<OpenstackRouter> getRouterfromExternalIp(Ip4Address externalIp) {
+ return getExternalRouter(true)
.stream()
.filter(r -> r.gatewayExternalInfo()
.externalFixedIps()
.values()
.stream()
- .findFirst()
- .orElse(null)
+ .findAny()
+ .get()
.equals(externalIp))
- .findAny()
- .orElse(null);
- return checkNotNull(router);
+ .findAny();
}
- private void initiateL3Rule(OpenstackRouter router, OpenstackRouterInterface routerInterface) {
+ private void initiateL3Rule(OpenstackRouterInterface routerInterface) {
long vni = Long.parseLong(openstackService.network(openstackService
.port(routerInterface.portId()).networkId()).segmentId());
- rulePopulator.populateExternalRules(vni, router, routerInterface);
+ rulePopulator.populateExternalRules(vni);
}
private Collection<OpenstackRouterInterface> getOpenstackRouterInterface(OpenstackRouter router) {
@@ -472,8 +470,7 @@
.filter(p -> p.deviceOwner().equals(DEVICE_OWNER_ROUTER_INTERFACE))
.filter(p -> p.deviceId().equals(router.id()))
.forEach(p -> {
- OpenstackRouterInterface routerInterface = portToRouterInterface(p);
- interfaces.add(routerInterface);
+ interfaces.add(portToRouterInterface(p));
});
return interfaces;
}
@@ -529,9 +526,6 @@
if (event.type().equals(NetworkConfigEvent.Type.CONFIG_ADDED) ||
event.type().equals(NetworkConfigEvent.Type.CONFIG_UPDATED)) {
l3EventExecutorService.execute(OpenstackRoutingManager.this::readConfiguration);
- rulePopulator = new OpenstackRoutingRulePopulator(appId,
- openstackService, flowObjectiveService, deviceService, driverService, config);
-
}
}
}