Fixing an issue with OpticalLinkProvider and reverting some topo changes.

Change-Id: If57d529127323d0d2b0f8778ce68527de6284c77
diff --git a/apps/optical/src/main/java/org/onlab/onos/optical/OpticalLinkProvider.java b/apps/optical/src/main/java/org/onlab/onos/optical/OpticalLinkProvider.java
index 0f5236d..88e68b4 100644
--- a/apps/optical/src/main/java/org/onlab/onos/optical/OpticalLinkProvider.java
+++ b/apps/optical/src/main/java/org/onlab/onos/optical/OpticalLinkProvider.java
@@ -20,8 +20,11 @@
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onlab.onos.net.ConnectPoint;
 import org.onlab.onos.net.Device;
+import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.Link;
+import org.onlab.onos.net.Port;
 import org.onlab.onos.net.device.DeviceEvent;
 import org.onlab.onos.net.device.DeviceListener;
 import org.onlab.onos.net.device.DeviceService;
@@ -91,7 +94,9 @@
             if (type == DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED ||
                     type == DeviceEvent.Type.DEVICE_ADDED ||
                     type == DeviceEvent.Type.DEVICE_UPDATED) {
-                processLinks(device);
+                processDeviceLinks(device);
+            } else if (type == DeviceEvent.Type.PORT_UPDATED) {
+                processPortLinks(device, event.port());
             }
         }
     }
@@ -109,7 +114,7 @@
         }
     }
 
-    private void processLinks(Device device) {
+    private void processDeviceLinks(Device device) {
         for (Link link : linkService.getDeviceLinks(device.id())) {
             if (link.isDurable() && link.type() == OPTICAL) {
                 processLink(link);
@@ -117,9 +122,25 @@
         }
     }
 
+    private void processPortLinks(Device device, Port port) {
+        ConnectPoint connectPoint = new ConnectPoint(device.id(), port.number());
+        for (Link link : linkService.getLinks(connectPoint)) {
+            if (link.isDurable() && link.type() == OPTICAL) {
+                processLink(link);
+            }
+        }
+    }
+
     private void processLink(Link link) {
-        boolean active = deviceService.isAvailable(link.src().deviceId()) &&
-                deviceService.isAvailable(link.dst().deviceId());
+        DeviceId srcId = link.src().deviceId();
+        DeviceId dstId = link.dst().deviceId();
+        Port srcPort = deviceService.getPort(srcId, link.src().port());
+        Port dstPort = deviceService.getPort(dstId, link.dst().port());
+
+        boolean active = deviceService.isAvailable(srcId) &&
+                deviceService.isAvailable(dstId) &&
+                srcPort.isEnabled() && dstPort.isEnabled();
+
         LinkDescription desc = new DefaultLinkDescription(link.src(), link.dst(), OPTICAL);
         if (active) {
             providerService.linkDetected(desc);