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>();