[ONOS-5911] Port removal after receiving OFPR_DELETE port status reason.

Change-Id: I1f3f6c752da5f989a2d727f378e9f04fbbb71341
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
index 4e6c05d..95db702 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
@@ -736,6 +736,7 @@
     private DeviceEvent updatePort(Device device, Port oldPort,
                                    Port newPort,
                                    Map<PortNumber, Port> ports) {
+
         if (oldPort.isEnabled() != newPort.isEnabled() ||
                 oldPort.type() != newPort.type() ||
                 oldPort.portSpeed() != newPort.portSpeed() ||
@@ -746,6 +747,14 @@
         return null;
     }
 
+    private DeviceEvent removePort(DeviceId deviceId, PortNumber portNumber) {
+
+        log.info("Deleted port: " + deviceId.toString() + "/" + portNumber.toString());
+        Port deletedPort = devicePorts.get(deviceId).remove(portNumber);
+
+        return new DeviceEvent(PORT_REMOVED, getDevice(deviceId), deletedPort);
+    }
+
     // Prunes the specified list of ports based on which ports are in the
     // processed list and returns list of corresponding events.
     // Guarded by deviceDescs value (=Device lock)
@@ -857,14 +866,16 @@
             final PortNumber number = deltaDesc.value().portNumber();
             final Port oldPort = ports.get(number);
             final Port newPort;
-
             final Timestamped<PortDescription> existingPortDesc = descs.getPortDesc(number);
+            boolean toDelete = false;
+
             if (existingPortDesc == null ||
                     deltaDesc.isNewer(existingPortDesc)) {
                 // on new port or valid update
                 // update description
                 descs.putPortDesc(deltaDesc);
                 newPort = composePort(device, number, descsMap);
+                toDelete = deltaDesc.value().isRemoved();
             } else {
                 // same or outdated event, ignored.
                 log.trace("ignore same or outdated {} >= {}", existingPortDesc, deltaDesc);
@@ -874,7 +885,7 @@
             if (oldPort == null) {
                 return createPort(device, newPort, ports);
             } else {
-                return updatePort(device, oldPort, newPort, ports);
+                return toDelete ? removePort(deviceId, number) : updatePort(device, oldPort, newPort, ports);
             }
         }
     }