[ONOS-3659] Submit the modified content of onos-1.4 to onos-master.
Change-Id: Ibdb9897cde6bc7622276178a6087f02c49da2a48
diff --git a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VTNManager.java b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VTNManager.java
index ac898d1..023bd05 100644
--- a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VTNManager.java
+++ b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VTNManager.java
@@ -19,6 +19,7 @@
import static org.slf4j.LoggerFactory.getLogger;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -75,9 +76,12 @@
import org.onosproject.net.host.HostListener;
import org.onosproject.net.host.HostService;
import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.ConsistentMap;
import org.onosproject.store.service.EventuallyConsistentMap;
import org.onosproject.store.service.LogicalClockService;
+import org.onosproject.store.service.Serializer;
import org.onosproject.store.service.StorageService;
+import org.onosproject.store.service.Versioned;
import org.onosproject.vtn.manager.VTNService;
import org.onosproject.vtn.table.ArpService;
import org.onosproject.vtn.table.ClassifierService;
@@ -188,7 +192,7 @@
private final DeviceListener deviceListener = new InnerDeviceListener();
private final VtnRscListener l3EventListener = new VtnL3EventListener();
- private static String exPortName = "eth0";
+ private static final String EX_PORT_KEY = "exPortKey";
private static final String IFACEID = "ifaceid";
private static final String CONTROLLER_IP_KEY = "ipaddress";
public static final String DRIVER_NAME = "onosfw";
@@ -198,6 +202,7 @@
private static final String ROUTERINF_FLAG_OF_TENANT = "routerInfFlagOfTenant";
private static final String HOSTS_OF_SUBNET = "hostsOfSubnet";
private static final String EX_PORT_OF_DEVICE = "exPortOfDevice";
+ private static final String EX_PORT_MAP = "exPortMap";
private static final String DEFAULT_IP = "0.0.0.0";
private static final int SUBNET_NUM = 2;
@@ -207,6 +212,7 @@
private EventuallyConsistentMap<SubnetId, Map<HostId, Host>> hostsOfSubnet;
private EventuallyConsistentMap<TenantId, Boolean> routerInfFlagOfTenant;
private EventuallyConsistentMap<DeviceId, Port> exPortOfDevice;
+ private static ConsistentMap<String, String> exPortMap;
@Activate
public void activate() {
@@ -275,6 +281,14 @@
.withTimestampProvider((k, v) -> clockService.getTimestamp())
.build();
+ exPortMap = storageService
+ .<String, String>consistentMapBuilder()
+ .withName(EX_PORT_MAP)
+ .withApplicationId(appId)
+ .withPurgeOnUninstall()
+ .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API)))
+ .build();
+
log.info("Started");
}
@@ -310,8 +324,11 @@
config.driver(DRIVER_NAME);
configService.applyConfig(deviceId, BasicDeviceConfig.class, config.node());
// Add Bridge
- VtnConfig.applyBridgeConfig(handler, dpid, exPortName);
- log.info("A new ovs is created in node {}", localIp.toString());
+ Versioned<String> exPortVersioned = exPortMap.get(EX_PORT_KEY);
+ if (exPortVersioned != null) {
+ VtnConfig.applyBridgeConfig(handler, dpid, exPortVersioned.value());
+ log.info("A new ovs is created in node {}", localIp.toString());
+ }
switchesOfController.put(localIp, true);
}
// Create tunnel in br-int on all controllers
@@ -330,8 +347,6 @@
if (mastershipService.isLocalMaster(controllerDeviceId)) {
switchesOfController.remove(dstIpAddress);
}
- // remove tunnel in br-int on other controllers
- programTunnelConfig(controllerDeviceId, dstIpAddress, null);
}
@Override
@@ -357,6 +372,7 @@
log.error("The ifaceId of Host is null");
return;
}
+ programSffAndClassifierHost(host, Objective.Operation.ADD);
// apply L2 openflow rules
applyHostMonitoredL2Rules(host, Objective.Operation.ADD);
// apply L3 openflow rules
@@ -374,6 +390,7 @@
log.error("The ifaceId of Host is null");
return;
}
+ programSffAndClassifierHost(host, Objective.Operation.REMOVE);
// apply L2 openflow rules
applyHostMonitoredL2Rules(host, Objective.Operation.REMOVE);
// apply L3 openflow rules
@@ -463,6 +480,22 @@
}
}
+ private void programSffAndClassifierHost(Host host, Objective.Operation type) {
+ DeviceId deviceId = host.location().deviceId();
+ String ifaceId = host.annotations().value(IFACEID);
+ VirtualPortId virtualPortId = VirtualPortId.portId(ifaceId);
+ VirtualPort virtualPort = virtualPortService.getPort(virtualPortId);
+ if (virtualPort == null) {
+ virtualPort = VtnData.getPort(vPortStore, virtualPortId);
+ }
+ TenantId tenantId = virtualPort.tenantId();
+ if (Objective.Operation.ADD == type) {
+ vtnRscService.addDeviceIdOfOvsMap(virtualPortId, tenantId, deviceId);
+ } else if (Objective.Operation.REMOVE == type) {
+ vtnRscService.removeDeviceIdOfOvsMap(host, tenantId, deviceId);
+ }
+ }
+
private void applyHostMonitoredL2Rules(Host host, Objective.Operation type) {
DeviceId deviceId = host.location().deviceId();
if (!mastershipService.isLocalMaster(deviceId)) {
@@ -971,7 +1004,9 @@
Port exPort = null;
for (Port port : ports) {
String portName = port.annotations().value(AnnotationKeys.PORT_NAME);
- if (portName != null && portName.equals(exPortName)) {
+ Versioned<String> exPortVersioned = exPortMap.get(EX_PORT_KEY);
+ if (portName != null && exPortVersioned != null && portName.
+ equals(exPortVersioned.value())) {
exPort = port;
break;
}
@@ -1071,6 +1106,6 @@
}
public static void setExPortName(String name) {
- exPortName = name;
+ exPortMap.put(EX_PORT_KEY, name);
}
}