Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next

Conflicts:
	providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java
diff --git a/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java b/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java
index a2bf045..218145d 100644
--- a/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java
+++ b/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/OpenFlowLinkProvider.java
@@ -1,18 +1,11 @@
 package org.onlab.onos.provider.of.link.impl;
 
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 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.DeviceId;
-import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.link.LinkProvider;
 import org.onlab.onos.net.link.LinkProviderRegistry;
 import org.onlab.onos.net.link.LinkProviderService;
@@ -20,16 +13,21 @@
 import org.onlab.onos.net.provider.ProviderId;
 import org.onlab.onos.of.controller.Dpid;
 import org.onlab.onos.of.controller.OpenFlowController;
+import org.onlab.onos.of.controller.OpenFlowSwitch;
 import org.onlab.onos.of.controller.OpenFlowSwitchListener;
 import org.onlab.onos.of.controller.PacketContext;
 import org.onlab.onos.of.controller.PacketListener;
-import org.onlab.util.Timer;
 import org.projectfloodlight.openflow.protocol.OFPortConfig;
 import org.projectfloodlight.openflow.protocol.OFPortDesc;
 import org.projectfloodlight.openflow.protocol.OFPortState;
 import org.projectfloodlight.openflow.protocol.OFPortStatus;
 import org.slf4j.Logger;
 
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
 /**
  * Provider which uses an OpenFlow controller to detect network
  * infrastructure links.
@@ -51,6 +49,8 @@
 
     private final InternalLinkProvider listener = new InternalLinkProvider();
 
+    private final Map<Dpid, LinkDiscovery> discoverers = new ConcurrentHashMap<>();
+
     /**
      * Creates an OpenFlow link provider.
      */
@@ -63,23 +63,28 @@
         providerService = providerRegistry.register(this);
         controller.addListener(listener);
         controller.addPacketListener(0, listener);
+        for (OpenFlowSwitch sw : controller.getSwitches()) {
+            listener.switchAdded(new Dpid(sw.getId()));
+        }
         log.info("Started");
     }
 
     @Deactivate
     public void deactivate() {
+        for (LinkDiscovery ld : discoverers.values()) {
+            ld.stop();
+        }
         providerRegistry.unregister(this);
         controller.removeListener(listener);
         controller.removePacketListener(listener);
         providerService = null;
-        Timer.getTimer().stop();
+
         log.info("Stopped");
     }
 
 
     private class InternalLinkProvider implements PacketListener, OpenFlowSwitchListener {
 
-        private final Map<Dpid, LinkDiscovery> discoverers = new ConcurrentHashMap<>();
 
         @Override
         public void handlePacket(PacketContext pktCtx) {
@@ -96,13 +101,13 @@
         @Override
         public void switchAdded(Dpid dpid) {
             discoverers.put(dpid, new LinkDiscovery(controller.getSwitch(dpid),
-                    controller, providerService, useBDDP));
+                                                    controller, providerService, useBDDP));
 
         }
 
         @Override
         public void switchRemoved(Dpid dpid) {
-            LinkDiscovery ld = this.discoverers.remove(dpid);
+            LinkDiscovery ld = discoverers.remove(dpid);
             if (ld != null) {
                 ld.removeAllPorts();
             }
@@ -122,10 +127,9 @@
             if (enabled) {
                 ld.addPort(port);
             } else {
-                ConnectPoint cp = new ConnectPoint(
-                        DeviceId.deviceId("of:" + Long.toHexString(dpid.value())),
-                        PortNumber.portNumber(port.getPortNo().getPortNumber()));
-                providerService.linksVanished(cp);
+                /*
+                 * remove port calls linkVanished
+                 */
                 ld.removePort(port);
             }