pkt glitch FIXED... ovs was not sending a bufferid

Change-Id: Id6fedf7c6ed8fbcfefb7308b0ee442e614e5e3af
diff --git a/providers/openflow/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java b/providers/openflow/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
index 78c2e41..cb37b1c 100644
--- a/providers/openflow/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
+++ b/providers/openflow/host/src/test/java/org/onlab/onos/provider/of/host/impl/OpenFlowHostProviderTest.java
@@ -225,5 +225,10 @@
             return false;
         }
 
+        @Override
+        public boolean isBuffered() {
+            return false;
+        }
+
     }
 }
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);
         }