Sketching out what link-state addition would look like; quite easy until we get to the distributed store.
Added unit tests to provide durable-nondurable transitions.
FIxed issue where link could be accidentally activated.
Renamed parameter.

Change-Id: I8aa19a6583ec50dbf28769995f0a8ea9be9a4daa
diff --git a/core/net/src/main/java/org/onlab/onos/net/link/impl/LinkManager.java b/core/net/src/main/java/org/onlab/onos/net/link/impl/LinkManager.java
index 23c7362..15fc4a1 100644
--- a/core/net/src/main/java/org/onlab/onos/net/link/impl/LinkManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/link/impl/LinkManager.java
@@ -158,7 +158,7 @@
         if (deviceService.getRole(connectPoint.deviceId()) != MastershipRole.MASTER) {
             return;
         }
-        removeLinks(getLinks(connectPoint));
+        removeLinks(getLinks(connectPoint), false);
     }
 
     @Override
@@ -166,7 +166,7 @@
         if (deviceService.getRole(deviceId) != MastershipRole.MASTER) {
             return;
         }
-        removeLinks(getDeviceLinks(deviceId));
+        removeLinks(getDeviceLinks(deviceId), false);
     }
 
     @Override
@@ -228,7 +228,7 @@
             ConnectPoint src = linkDescription.src();
             ConnectPoint dst = linkDescription.dst();
 
-            LinkEvent event = store.removeLink(src, dst);
+            LinkEvent event = store.removeOrDownLink(src, dst);
             if (event != null) {
                 log.info("Link {} vanished", linkDescription);
                 post(event);
@@ -242,7 +242,7 @@
 
             log.info("Links for connection point {} vanished", connectPoint);
             // FIXME: This will remove links registered by other providers
-            removeLinks(getLinks(connectPoint));
+            removeLinks(getLinks(connectPoint), true);
         }
 
         @Override
@@ -251,14 +251,16 @@
             checkValidity();
 
             log.info("Links for device {} vanished", deviceId);
-            removeLinks(getDeviceLinks(deviceId));
+            removeLinks(getDeviceLinks(deviceId), true);
         }
     }
 
     // Removes all links in the specified set and emits appropriate events.
-    private void removeLinks(Set<Link> links) {
+    private void removeLinks(Set<Link> links, boolean isSoftRemove) {
         for (Link link : links) {
-            LinkEvent event = store.removeLink(link.src(), link.dst());
+            LinkEvent event = isSoftRemove ?
+                    store.removeOrDownLink(link.src(), link.dst()) :
+                    store.removeLink(link.src(), link.dst());
             post(event);
         }
     }