Removed Floodlight devicemanager, topology, routing and forwarding modules

Change-Id: Icbdecb2f7c84bcb450ee95177d82ae9c82a3f163
diff --git a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
index 49be7d9..a1da185 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
@@ -6,7 +6,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -28,13 +27,9 @@
 import net.floodlightcontroller.packet.Ethernet;
 import net.floodlightcontroller.packet.IPv4;
 import net.floodlightcontroller.restserver.IRestApiService;
-import net.floodlightcontroller.routing.Link;
-import net.floodlightcontroller.topology.ITopologyListener;
-import net.floodlightcontroller.topology.ITopologyService;
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.ofcontroller.bgproute.RibUpdate.Operation;
 import net.onrc.onos.ofcontroller.core.config.IConfigInfoService;
-import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscovery;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscovery.LDUpdate;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryService;
 import net.onrc.onos.ofcontroller.proxyarp.IArpRequester;
@@ -78,13 +73,12 @@
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 
 public class BgpRoute implements IFloodlightModule, IBgpRouteService,
-									ITopologyListener, IArpRequester,
+									IArpRequester,
 									IOFSwitchListener, IConfigInfoService {
 
 	private final static Logger log = LoggerFactory.getLogger(BgpRoute.class);
 
 	private IFloodlightProviderService floodlightProvider;
-	private ITopologyService topologyService;
 	private ILinkDiscoveryService linkDiscoveryService;
 	private IRestApiService restApi;
 	private IProxyArpService proxyArp;
@@ -252,7 +246,6 @@
 		Collection<Class<? extends IFloodlightService>> l
 			= new ArrayList<Class<? extends IFloodlightService>>();
 		l.add(IFloodlightProviderService.class);
-		l.add(ITopologyService.class);
 		l.add(IRestApiService.class);
 		return l;
 	}
@@ -268,7 +261,6 @@
 
 		// Register floodlight provider and REST handler.
 		floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class);
-		topologyService = context.getServiceImpl(ITopologyService.class);
 		linkDiscoveryService = context.getServiceImpl(ILinkDiscoveryService.class);
 		restApi = context.getServiceImpl(IRestApiService.class);
 		proxyArp = context.getServiceImpl(IProxyArpService.class);
@@ -322,7 +314,6 @@
 	@Override
 	public void startUp(FloodlightModuleContext context) {
 		restApi.addRestletRoutable(new BgpRouteWebRoutable());
-		topologyService.addListener(this);
 		floodlightProvider.addOFSwitchListener(this);
 
 		//Retrieve the RIB from BGPd during startup
@@ -1298,6 +1289,10 @@
 		}
 	}
 
+	// The code below should be reimplemented after removal of Floodlight's 
+	// ITopologyService API. It should be implemented on top of network graph
+	// notifications. (It was pretty hacky anyway...)
+	/*
 	@Override
 	public void topologyChanged() {
 		if (topologyReady) {
@@ -1325,6 +1320,7 @@
 			topologyChangeDetectorTask.reschedule(TOPO_DETECTION_WAIT, TimeUnit.SECONDS);
 		}
 	}
+	*/
 
 	@Override
 	public void addedSwitch(IOFSwitch sw) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/devicemanager/OnosDevice.java b/src/main/java/net/onrc/onos/ofcontroller/devicemanager/OnosDevice.java
index 4b47501..ed4dd7d 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/devicemanager/OnosDevice.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/devicemanager/OnosDevice.java
@@ -20,7 +20,6 @@
 import java.io.Serializable;
 import java.util.Date;
 
-import net.floodlightcontroller.devicemanager.internal.Entity;
 import net.floodlightcontroller.packet.IPv4;
 import net.floodlightcontroller.util.MACAddress;
 
@@ -78,14 +77,6 @@
      */
     private Date lastSeenTimestamp;
 
-    /**
-     * The time between {@link Entity#activeSince} and 
-     * {@link Entity#lastSeenTimestamp} is a period of activity for this
-     * entity where it was observed repeatedly.  If, when the entity is
-     * observed, the  is longer ago than the activity timeout, 
-     * {@link Entity#lastSeenTimestamp} and {@link Entity#activeSince} will 
-     * be set to the current time.
-     */
     private Date activeSince;
     
     private int hashCode = 0;
@@ -156,12 +147,7 @@
         return lastSeenTimestamp;
     }
 
-    /**
-     * Set the last seen timestamp and also update {@link Entity#activeSince}
-     * if appropriate
-     * @param lastSeenTimestamp the new last seen timestamp
-     * @see {@link Entity#activeSince}
-     */
+    
     public void setLastSeenTimestamp(Date lastSeenTimestamp) {
         if (activeSince == null ||
             (activeSince.getTime() +  ACTIVITY_TIMEOUT) <
diff --git a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/OldNetworkGraphPublisher.java b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/OldNetworkGraphPublisher.java
index f664dfd..7c05467 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/OldNetworkGraphPublisher.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/OldNetworkGraphPublisher.java
@@ -2,10 +2,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import net.floodlightcontroller.core.IFloodlightProviderService;
@@ -16,30 +13,20 @@
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.floodlightcontroller.core.util.SingletonTask;
-import net.floodlightcontroller.devicemanager.IDevice;
-import net.floodlightcontroller.devicemanager.IDeviceListener;
-import net.floodlightcontroller.routing.Link;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
-import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.datagrid.IDatagridService;
 import net.onrc.onos.ofcontroller.core.IOFSwitchPortListener;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryListener;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryService;
-import net.onrc.onos.ofcontroller.linkdiscovery.LinkInfo;
-import net.onrc.onos.ofcontroller.proxyarp.ArpReplyNotification;
-import net.onrc.onos.ofcontroller.util.PerformanceMonitor;
+import net.onrc.onos.ofcontroller.linkdiscovery.Link;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
 import net.onrc.onos.registry.controller.IControllerRegistryService.ControlChangeCallback;
-import net.onrc.onos.registry.controller.RegistryException;
 
 import org.openflow.protocol.OFPhysicalPort;
-import org.openflow.util.HexString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.net.InetAddresses;
-
-public class OldNetworkGraphPublisher implements IDeviceListener,
+public class OldNetworkGraphPublisher implements
 					      IOFSwitchListener,
 					      IOFSwitchPortListener,
 					      ILinkDiscoveryListener,
@@ -391,41 +378,6 @@
 	}
 
 	@Override
-	public void deviceAdded(IDevice device) {
-		log.debug("{}:deviceAdded(): Adding device {}",this.getClass(),device.getMACAddressString());
-		/*
-		devStore.addDevice(device);
-		for (int intIpv4Address : device.getIPv4Addresses()) {
-			datagridService.sendArpReplyNotification(new ArpReplyNotification(
-					InetAddresses.fromInteger(intIpv4Address), 
-					MACAddress.valueOf(device.getMACAddress())));
-		}
-		*/
-	}
-
-	@Override
-	public void deviceRemoved(IDevice device) {
-		// TODO Auto-generated method stub
-		// devStore.removeDevice(device);
-	}
-
-	@Override
-	public void deviceMoved(IDevice device) {
-		// devStore.changeDeviceAttachments(device);
-	}
-
-	@Override
-	public void deviceIPV4AddrChanged(IDevice device) {
-		// devStore.changeDeviceIPv4Address(device);
-	}
-
-	@Override
-	public void deviceVlanChanged(IDevice device) {
-		// TODO Auto-generated method stub
-	}
-
-
-	@Override
 	public Collection<Class<? extends IFloodlightService>> getModuleServices() {
 		return null;
 	}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/ILinkDiscoveryService.java b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/ILinkDiscoveryService.java
index 99438ab..2b45200 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/ILinkDiscoveryService.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/ILinkDiscoveryService.java
@@ -21,8 +21,6 @@
 import java.util.Set;
 
 import net.floodlightcontroller.core.module.IFloodlightService;
-import net.floodlightcontroller.routing.Link;
-import net.floodlightcontroller.topology.NodePortTuple;
 
 
 public interface ILinkDiscoveryService extends IFloodlightService {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/Link.java b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/Link.java
new file mode 100755
index 0000000..38fc3d9
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/Link.java
@@ -0,0 +1,122 @@
+/**
+*    Copyright 2011, Big Switch Networks, Inc. 
+*    Originally created by David Erickson, Stanford University
+* 
+*    Licensed under the Apache License, Version 2.0 (the "License"); you may
+*    not use this file except in compliance with the License. You may obtain
+*    a copy of the License at
+*
+*         http://www.apache.org/licenses/LICENSE-2.0
+*
+*    Unless required by applicable law or agreed to in writing, software
+*    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+*    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+*    License for the specific language governing permissions and limitations
+*    under the License.
+**/
+
+package net.onrc.onos.ofcontroller.linkdiscovery;
+
+import net.floodlightcontroller.core.web.serializers.DPIDSerializer;
+import net.floodlightcontroller.core.web.serializers.UShortSerializer;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+import org.openflow.util.HexString;
+
+public class Link {
+    private long src;
+    private short srcPort;
+    private long dst;
+    private short dstPort;
+
+
+    public Link(long srcId, short srcPort, long dstId, short dstPort) {
+        this.src = srcId;
+        this.srcPort = srcPort;
+        this.dst = dstId;
+        this.dstPort = dstPort;
+    }
+
+    // Convenience method
+    public Link(long srcId, int srcPort, long dstId, int dstPort) {
+        this.src = srcId;
+        this.srcPort = (short) srcPort;
+        this.dst = dstId;
+        this.dstPort = (short) dstPort;
+    }
+
+    @JsonProperty("src-switch")
+    @JsonSerialize(using=DPIDSerializer.class)
+    public long getSrc() {
+        return src;
+    }
+
+    @JsonProperty("src-port")
+    @JsonSerialize(using=UShortSerializer.class)
+    public short getSrcPort() {
+        return srcPort;
+    }
+
+    @JsonProperty("dst-switch")
+    @JsonSerialize(using=DPIDSerializer.class)
+    public long getDst() {
+        return dst;
+    }
+    @JsonProperty("dst-port")
+    @JsonSerialize(using=UShortSerializer.class)
+    public short getDstPort() {
+        return dstPort;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (int) (dst ^ (dst >>> 32));
+        result = prime * result + dstPort;
+        result = prime * result + (int) (src ^ (src >>> 32));
+        result = prime * result + srcPort;
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        Link other = (Link) obj;
+        if (dst != other.dst)
+            return false;
+        if (dstPort != other.dstPort)
+            return false;
+        if (src != other.src)
+            return false;
+        if (srcPort != other.srcPort)
+            return false;
+        return true;
+    }
+
+
+    @Override
+    public String toString() {
+        return "Link [src=" + HexString.toHexString(this.src) 
+                + " outPort="
+                + (srcPort & 0xffff)
+                + ", dst=" + HexString.toHexString(this.dst)
+                + ", inPort="
+                + (dstPort & 0xffff)
+                + "]";
+    }
+    
+    public String toKeyString() {
+    	return (HexString.toHexString(this.src) + "|" +
+    			(this.srcPort & 0xffff) + "|" +
+    			HexString.toHexString(this.dst) + "|" +
+    		    (this.dstPort & 0xffff) );
+    }
+}
+
diff --git a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/NodePortTuple.java b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/NodePortTuple.java
new file mode 100644
index 0000000..646386c
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/NodePortTuple.java
@@ -0,0 +1,90 @@
+package net.onrc.onos.ofcontroller.linkdiscovery;
+
+import net.floodlightcontroller.core.web.serializers.DPIDSerializer;
+import net.floodlightcontroller.core.web.serializers.UShortSerializer;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+import org.openflow.util.HexString;
+
+/**
+ * A NodePortTuple is similar to a SwitchPortTuple
+ * but it only stores IDs instead of references
+ * to the actual objects.
+ * @author srini
+ */
+public class NodePortTuple {
+    protected long nodeId; // switch DPID
+    protected short portId; // switch port id
+
+    /**
+     * Creates a NodePortTuple
+     * @param nodeId The DPID of the switch
+     * @param portId The port of the switch
+     */
+    public NodePortTuple(long nodeId, short portId) {
+        this.nodeId = nodeId;
+        this.portId = portId;
+    }
+
+    public NodePortTuple(long nodeId, int portId) {
+        this.nodeId = nodeId;
+        this.portId = (short) portId;
+    }
+
+    @JsonProperty("switch")
+    @JsonSerialize(using=DPIDSerializer.class)
+    public long getNodeId() {
+        return nodeId;
+    }
+    public void setNodeId(long nodeId) {
+        this.nodeId = nodeId;
+    }
+    @JsonProperty("port")
+    @JsonSerialize(using=UShortSerializer.class)
+    public short getPortId() {
+        return portId;
+    }
+    public void setPortId(short portId) {
+        this.portId = portId;
+    }
+    
+    public String toString() {
+        return "[id=" + HexString.toHexString(nodeId) + ", port=" + new Short(portId) + "]";
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (int) (nodeId ^ (nodeId >>> 32));
+        result = prime * result + portId;
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        NodePortTuple other = (NodePortTuple) obj;
+        if (nodeId != other.nodeId)
+            return false;
+        if (portId != other.portId)
+            return false;
+        return true;
+    }
+    
+    /**
+     * API to return a String value formed wtih NodeID and PortID
+     * The portID is a 16-bit field, so mask it as an integer to get full
+     * positive value
+     * @return
+     */
+    public String toKeyString() {
+        return (HexString.toHexString(nodeId)+ "|" + (portId & 0xffff));
+    }
+}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index 3bb2878..a035867 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -58,9 +58,7 @@
 import net.floodlightcontroller.packet.LLDP;
 import net.floodlightcontroller.packet.LLDPTLV;
 import net.floodlightcontroller.restserver.IRestApiService;
-import net.floodlightcontroller.routing.Link;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
-import net.floodlightcontroller.topology.NodePortTuple;
 import net.floodlightcontroller.util.EventHistory;
 import net.floodlightcontroller.util.EventHistory.EvAction;
 import net.onrc.onos.ofcontroller.core.IOnosRemoteSwitch;
@@ -69,7 +67,9 @@
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscovery.UpdateOperation;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryListener;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryService;
+import net.onrc.onos.ofcontroller.linkdiscovery.Link;
 import net.onrc.onos.ofcontroller.linkdiscovery.LinkInfo;
+import net.onrc.onos.ofcontroller.linkdiscovery.NodePortTuple;
 import net.onrc.onos.ofcontroller.linkdiscovery.web.LinkDiscoveryWebRoutable;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
 
diff --git a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/web/LinkWithType.java b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/web/LinkWithType.java
index 3e5a5e7..6fa430e 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/web/LinkWithType.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/web/LinkWithType.java
@@ -9,7 +9,7 @@
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 import org.openflow.util.HexString;
 
-import net.floodlightcontroller.routing.Link;
+import net.onrc.onos.ofcontroller.linkdiscovery.Link;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscovery.LinkType;
 
 /**
diff --git a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/web/LinksResource.java b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/web/LinksResource.java
index 3c97e6a..ce6b2fa 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/web/LinksResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/web/LinksResource.java
@@ -6,8 +6,8 @@
 import java.util.Map.Entry;
 import java.util.Set;
 
-import net.floodlightcontroller.routing.Link;
 import net.onrc.onos.ofcontroller.linkdiscovery.ILinkDiscoveryService;
+import net.onrc.onos.ofcontroller.linkdiscovery.Link;
 import net.onrc.onos.ofcontroller.linkdiscovery.LinkInfo;
 
 import org.restlet.resource.Get;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/proxyarp/ProxyArpManager.java b/src/main/java/net/onrc/onos/ofcontroller/proxyarp/ProxyArpManager.java
index 1593369..9e2ae4c 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/proxyarp/ProxyArpManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/proxyarp/ProxyArpManager.java
@@ -1,12 +1,10 @@
 package net.onrc.onos.ofcontroller.proxyarp;
 
-import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -25,14 +23,11 @@
 import net.floodlightcontroller.packet.Ethernet;
 import net.floodlightcontroller.packet.IPv4;
 import net.floodlightcontroller.restserver.IRestApiService;
-import net.floodlightcontroller.topology.ITopologyService;
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.datagrid.IDatagridService;
 import net.onrc.onos.ofcontroller.bgproute.Interface;
 import net.onrc.onos.ofcontroller.core.config.IConfigInfoService;
 import net.onrc.onos.ofcontroller.flowprogrammer.IFlowPusherService;
-import net.onrc.onos.ofcontroller.util.Dpid;
-import net.onrc.onos.ofcontroller.util.Port;
 import net.onrc.onos.ofcontroller.util.SwitchPort;
 
 import org.openflow.protocol.OFMessage;
@@ -49,7 +44,6 @@
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.SetMultimap;
-import com.google.common.net.InetAddresses;
 
 public class ProxyArpManager implements IProxyArpService, IOFMessageListener,
 										IPacketOutEventHandler, IArpReplyEventHandler, 
@@ -61,7 +55,6 @@
 	private static final int ARP_REQUEST_TIMEOUT = 2000; //ms
 			
 	private IFloodlightProviderService floodlightProvider;
-	private ITopologyService topology;
 	private IDatagridService datagrid;
 	private IConfigInfoService configService;
 	private IRestApiService restApi;
@@ -146,7 +139,6 @@
 		Collection<Class<? extends IFloodlightService>> dependencies 
 			= new ArrayList<Class<? extends IFloodlightService>>();
 		dependencies.add(IFloodlightProviderService.class);
-		dependencies.add(ITopologyService.class);
 		dependencies.add(IRestApiService.class);
 		dependencies.add(IDatagridService.class);
 		dependencies.add(IConfigInfoService.class);
@@ -158,7 +150,6 @@
 	public void init(FloodlightModuleContext context){
 		this.floodlightProvider = 
 				context.getServiceImpl(IFloodlightProviderService.class);
-		this.topology = context.getServiceImpl(ITopologyService.class);
 		this.datagrid = context.getServiceImpl(IDatagridService.class);
 		this.configService = context.getServiceImpl(IConfigInfoService.class);
 		this.restApi = context.getServiceImpl(IRestApiService.class);
@@ -556,58 +547,6 @@
 		datagrid.sendArpReplyNotification(new ArpReplyNotification(targetAddress, mac));
 	}
 	
-	// This remains from the older single-instance ARP code. It used Floodlight
-	// APIs to find the edge of the network, but only worked on a single instance.
-	// We now do this using ONOS network graph APIs.
-	@Deprecated
-	private void broadcastArpRequestOutEdge(byte[] arpRequest, long inSwitch, short inPort) {
-		for (IOFSwitch sw : floodlightProvider.getSwitches().values()){
-			Collection<Short> enabledPorts = sw.getEnabledPortNumbers();
-			Set<Short> linkPorts = topology.getPortsWithLinks(sw.getId());
-			
-			if (linkPorts == null){
-				//I think this means the switch doesn't have any links.
-				//continue;
-				linkPorts = new HashSet<Short>();
-			}
-			
-			
-			OFPacketOut po = new OFPacketOut();
-			po.setInPort(OFPort.OFPP_NONE)
-				.setBufferId(-1)
-				.setPacketData(arpRequest);
-				
-			List<OFAction> actions = new ArrayList<OFAction>();
-			
-			for (short portNum : enabledPorts){
-				if (linkPorts.contains(portNum) || 
-						(sw.getId() == inSwitch && portNum == inPort)){
-					//If this port isn't an edge port or is the ingress port
-					//for the ARP, don't broadcast out it
-					continue;
-				}
-				
-				actions.add(new OFActionOutput(portNum));
-			}
-			
-			po.setActions(actions);
-			short actionsLength = (short) (actions.size() * OFActionOutput.MINIMUM_LENGTH);
-			po.setActionsLength(actionsLength);
-			po.setLengthU(OFPacketOut.MINIMUM_LENGTH + actionsLength 
-					+ arpRequest.length);
-			
-			List<OFMessage> msgList = new ArrayList<OFMessage>();
-			msgList.add(po);
-			
-			try {
-				sw.write(msgList, null);
-				sw.flush();
-			} catch (IOException e) {
-				log.error("Failure writing packet out to switch", e);
-			}
-		}
-	}
-	
 	private void broadcastArpRequestOutMyEdge(byte[] arpRequest,
 			long inSwitch, short inPort) {
 		List<SwitchPort> switchPorts = new ArrayList<SwitchPort>();