lishuai

[ONOS-3640] Update VTN's bug which is caused by onos restart when doing

APEX installer: it should not create the external port which name is
default external port name.

Change-Id: If69b60bdd6d16f203a94db14e7d29d7a8f270fc2
...@@ -19,6 +19,7 @@ import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.Exten ...@@ -19,6 +19,7 @@ import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.Exten
19 import static org.slf4j.LoggerFactory.getLogger; 19 import static org.slf4j.LoggerFactory.getLogger;
20 20
21 import java.util.ArrayList; 21 import java.util.ArrayList;
22 +import java.util.Arrays;
22 import java.util.Collection; 23 import java.util.Collection;
23 import java.util.HashMap; 24 import java.util.HashMap;
24 import java.util.HashSet; 25 import java.util.HashSet;
...@@ -75,9 +76,12 @@ import org.onosproject.net.host.HostEvent; ...@@ -75,9 +76,12 @@ import org.onosproject.net.host.HostEvent;
75 import org.onosproject.net.host.HostListener; 76 import org.onosproject.net.host.HostListener;
76 import org.onosproject.net.host.HostService; 77 import org.onosproject.net.host.HostService;
77 import org.onosproject.store.serializers.KryoNamespaces; 78 import org.onosproject.store.serializers.KryoNamespaces;
79 +import org.onosproject.store.service.ConsistentMap;
78 import org.onosproject.store.service.EventuallyConsistentMap; 80 import org.onosproject.store.service.EventuallyConsistentMap;
79 import org.onosproject.store.service.LogicalClockService; 81 import org.onosproject.store.service.LogicalClockService;
82 +import org.onosproject.store.service.Serializer;
80 import org.onosproject.store.service.StorageService; 83 import org.onosproject.store.service.StorageService;
84 +import org.onosproject.store.service.Versioned;
81 import org.onosproject.vtn.manager.VTNService; 85 import org.onosproject.vtn.manager.VTNService;
82 import org.onosproject.vtn.table.ArpService; 86 import org.onosproject.vtn.table.ArpService;
83 import org.onosproject.vtn.table.ClassifierService; 87 import org.onosproject.vtn.table.ClassifierService;
...@@ -188,7 +192,7 @@ public class VTNManager implements VTNService { ...@@ -188,7 +192,7 @@ public class VTNManager implements VTNService {
188 private final DeviceListener deviceListener = new InnerDeviceListener(); 192 private final DeviceListener deviceListener = new InnerDeviceListener();
189 private final VtnRscListener l3EventListener = new VtnL3EventListener(); 193 private final VtnRscListener l3EventListener = new VtnL3EventListener();
190 194
191 - private static String exPortName = "eth0"; 195 + private static final String EX_PORT_KEY = "exPortKey";
192 private static final String IFACEID = "ifaceid"; 196 private static final String IFACEID = "ifaceid";
193 private static final String CONTROLLER_IP_KEY = "ipaddress"; 197 private static final String CONTROLLER_IP_KEY = "ipaddress";
194 public static final String DRIVER_NAME = "onosfw"; 198 public static final String DRIVER_NAME = "onosfw";
...@@ -198,6 +202,7 @@ public class VTNManager implements VTNService { ...@@ -198,6 +202,7 @@ public class VTNManager implements VTNService {
198 private static final String ROUTERINF_FLAG_OF_TENANT = "routerInfFlagOfTenant"; 202 private static final String ROUTERINF_FLAG_OF_TENANT = "routerInfFlagOfTenant";
199 private static final String HOSTS_OF_SUBNET = "hostsOfSubnet"; 203 private static final String HOSTS_OF_SUBNET = "hostsOfSubnet";
200 private static final String EX_PORT_OF_DEVICE = "exPortOfDevice"; 204 private static final String EX_PORT_OF_DEVICE = "exPortOfDevice";
205 + private static final String EX_PORT_MAP = "exPortMap";
201 private static final String DEFAULT_IP = "0.0.0.0"; 206 private static final String DEFAULT_IP = "0.0.0.0";
202 private static final int SUBNET_NUM = 2; 207 private static final int SUBNET_NUM = 2;
203 208
...@@ -207,6 +212,7 @@ public class VTNManager implements VTNService { ...@@ -207,6 +212,7 @@ public class VTNManager implements VTNService {
207 private EventuallyConsistentMap<SubnetId, Map<HostId, Host>> hostsOfSubnet; 212 private EventuallyConsistentMap<SubnetId, Map<HostId, Host>> hostsOfSubnet;
208 private EventuallyConsistentMap<TenantId, Boolean> routerInfFlagOfTenant; 213 private EventuallyConsistentMap<TenantId, Boolean> routerInfFlagOfTenant;
209 private EventuallyConsistentMap<DeviceId, Port> exPortOfDevice; 214 private EventuallyConsistentMap<DeviceId, Port> exPortOfDevice;
215 + private static ConsistentMap<String, String> exPortMap;
210 216
211 @Activate 217 @Activate
212 public void activate() { 218 public void activate() {
...@@ -275,6 +281,14 @@ public class VTNManager implements VTNService { ...@@ -275,6 +281,14 @@ public class VTNManager implements VTNService {
275 .withTimestampProvider((k, v) -> clockService.getTimestamp()) 281 .withTimestampProvider((k, v) -> clockService.getTimestamp())
276 .build(); 282 .build();
277 283
284 + exPortMap = storageService
285 + .<String, String>consistentMapBuilder()
286 + .withName(EX_PORT_MAP)
287 + .withApplicationId(appId)
288 + .withPurgeOnUninstall()
289 + .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API)))
290 + .build();
291 +
278 log.info("Started"); 292 log.info("Started");
279 } 293 }
280 294
...@@ -310,8 +324,11 @@ public class VTNManager implements VTNService { ...@@ -310,8 +324,11 @@ public class VTNManager implements VTNService {
310 config.driver(DRIVER_NAME); 324 config.driver(DRIVER_NAME);
311 configService.applyConfig(deviceId, BasicDeviceConfig.class, config.node()); 325 configService.applyConfig(deviceId, BasicDeviceConfig.class, config.node());
312 // Add Bridge 326 // Add Bridge
313 - VtnConfig.applyBridgeConfig(handler, dpid, exPortName); 327 + Versioned<String> exPortVersioned = exPortMap.get(EX_PORT_KEY);
314 - log.info("A new ovs is created in node {}", localIp.toString()); 328 + if (exPortVersioned != null) {
329 + VtnConfig.applyBridgeConfig(handler, dpid, exPortVersioned.value());
330 + log.info("A new ovs is created in node {}", localIp.toString());
331 + }
315 switchesOfController.put(localIp, true); 332 switchesOfController.put(localIp, true);
316 } 333 }
317 // Create tunnel in br-int on all controllers 334 // Create tunnel in br-int on all controllers
...@@ -330,8 +347,6 @@ public class VTNManager implements VTNService { ...@@ -330,8 +347,6 @@ public class VTNManager implements VTNService {
330 if (mastershipService.isLocalMaster(controllerDeviceId)) { 347 if (mastershipService.isLocalMaster(controllerDeviceId)) {
331 switchesOfController.remove(dstIpAddress); 348 switchesOfController.remove(dstIpAddress);
332 } 349 }
333 - // remove tunnel in br-int on other controllers
334 - programTunnelConfig(controllerDeviceId, dstIpAddress, null);
335 } 350 }
336 351
337 @Override 352 @Override
...@@ -971,7 +986,9 @@ public class VTNManager implements VTNService { ...@@ -971,7 +986,9 @@ public class VTNManager implements VTNService {
971 Port exPort = null; 986 Port exPort = null;
972 for (Port port : ports) { 987 for (Port port : ports) {
973 String portName = port.annotations().value(AnnotationKeys.PORT_NAME); 988 String portName = port.annotations().value(AnnotationKeys.PORT_NAME);
974 - if (portName != null && portName.equals(exPortName)) { 989 + Versioned<String> exPortVersioned = exPortMap.get(EX_PORT_KEY);
990 + if (portName != null && exPortVersioned != null && portName.
991 + equals(exPortVersioned.value())) {
975 exPort = port; 992 exPort = port;
976 break; 993 break;
977 } 994 }
...@@ -1071,6 +1088,6 @@ public class VTNManager implements VTNService { ...@@ -1071,6 +1088,6 @@ public class VTNManager implements VTNService {
1071 } 1088 }
1072 1089
1073 public static void setExPortName(String name) { 1090 public static void setExPortName(String name) {
1074 - exPortName = name; 1091 + exPortMap.put(EX_PORT_KEY, name);
1075 } 1092 }
1076 } 1093 }
......