pkt glitch FIXED... ovs was not sending a bufferid
Change-Id: Id6fedf7c6ed8fbcfefb7308b0ee442e614e5e3af
diff --git a/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java b/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
index 248e17d..e7c4443 100644
--- a/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
+++ b/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowCorePacketContext.java
@@ -32,18 +32,19 @@
public void send() {
if (!this.block()) {
if (outPacket() == null) {
- sendBufferedPacket();
+ sendPacket(null);
} else {
Ethernet eth = new Ethernet();
eth.deserialize(outPacket().data().array(), 0,
outPacket().data().array().length);
- ofPktCtx.build(eth, OFPort.FLOOD);
+ sendPacket(eth);
+
}
}
}
- private void sendBufferedPacket() {
+ private void sendPacket(Ethernet eth) {
List<Instruction> ins = treatmentBuilder().build().instructions();
OFPort p = null;
//TODO: support arbitrary list of treatments must be supported in ofPacketContext
@@ -53,10 +54,13 @@
break; //for now...
}
}
- ofPktCtx.build(p);
+ if (eth == null) {
+ ofPktCtx.build(p);
+ } else {
+ ofPktCtx.build(eth, p);
+ }
ofPktCtx.send();
}
-
private OFPort buildPort(PortNumber port) {
return OFPort.of((int) port.toLong());
}
diff --git a/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java b/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
index 8ce94b5..feedd88 100644
--- a/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
+++ b/providers/openflow/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java
@@ -1,5 +1,6 @@
package org.onlab.onos.provider.of.packet.impl;
+import static org.onlab.onos.openflow.controller.RoleState.SLAVE;
import static org.slf4j.LoggerFactory.getLogger;
import java.nio.ByteBuffer;
@@ -16,6 +17,7 @@
import org.onlab.onos.net.flow.instructions.Instruction;
import org.onlab.onos.net.flow.instructions.Instructions.OutputInstruction;
import org.onlab.onos.net.packet.DefaultInboundPacket;
+import org.onlab.onos.net.packet.DefaultOutboundPacket;
import org.onlab.onos.net.packet.OutboundPacket;
import org.onlab.onos.net.packet.PacketProvider;
import org.onlab.onos.net.packet.PacketProviderRegistry;
@@ -36,8 +38,6 @@
import org.projectfloodlight.openflow.types.OFPort;
import org.slf4j.Logger;
-import static org.onlab.onos.openflow.controller.RoleState.*;
-
/**
* Provider which uses an OpenFlow controller to detect network
@@ -152,9 +152,15 @@
new ConnectPoint(id, PortNumber.portNumber(pktCtx.inPort())),
pktCtx.parsed(), ByteBuffer.wrap(pktCtx.unparsed()));
+ DefaultOutboundPacket outPkt = null;
+ if (!pktCtx.isBuffered()) {
+ outPkt = new DefaultOutboundPacket(id, null,
+ ByteBuffer.wrap(pktCtx.unparsed()));
+ }
+
OpenFlowCorePacketContext corePktCtx =
new OpenFlowCorePacketContext(System.currentTimeMillis(),
- inPkt, null, pktCtx.isHandled(), pktCtx);
+ inPkt, outPkt, pktCtx.isHandled(), pktCtx);
providerService.processPacket(corePktCtx);
}