Simplify packet i/o trace logging for P4Runtime

Change-Id: I3b45597fc68fefb485f860597bcc65d7c03e523a
(cherry picked from commit 080969a3c185dcac06e0f74a91c9f6e2455616bc)
diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimePacketProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimePacketProgrammable.java
index 8a182a7..700f6dd 100644
--- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimePacketProgrammable.java
+++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimePacketProgrammable.java
@@ -16,14 +16,17 @@
 
 package org.onosproject.drivers.p4runtime;
 
+import org.onlab.packet.EthType;
+import org.onosproject.net.flow.instructions.Instructions;
 import org.onosproject.net.packet.OutboundPacket;
 import org.onosproject.net.packet.PacketProgrammable;
 import org.onosproject.net.pi.model.PiPipelineInterpreter;
-import org.onosproject.net.pi.runtime.PiPacketOperation;
 
-import java.util.Collection;
+import java.nio.ByteBuffer;
+import java.util.stream.Collectors;
 
 import static org.onosproject.drivers.p4runtime.P4RuntimeDriverUtils.getInterpreter;
+import static org.onosproject.net.flow.instructions.Instruction.Type.OUTPUT;
 
 /**
  * Implementation of PacketProgrammable behaviour for P4Runtime.
@@ -45,15 +48,36 @@
             return;
         }
 
+        if (log.isTraceEnabled()) {
+            logPacketOut(packet);
+        }
+
         try {
-            Collection<PiPacketOperation> operations = interpreter.mapOutboundPacket(packet);
-            operations.forEach(piPacketOperation -> {
-                log.debug("Doing PiPacketOperation {}", piPacketOperation);
-                client.packetOut(p4DeviceId, piPacketOperation, pipeconf);
-            });
+            interpreter.mapOutboundPacket(packet).forEach(
+                    op -> client.packetOut(p4DeviceId, op, pipeconf));
         } catch (PiPipelineInterpreter.PiInterpreterException e) {
             log.error("Unable to translate outbound packet for {} with pipeconf {}: {}",
                       deviceId, pipeconf.id(), e.getMessage());
         }
     }
+
+    private void logPacketOut(OutboundPacket packet) {
+        final EthType.EtherType etherType = getEtherType(packet.data());
+        final String outPorts = packet.treatment().immediate().stream()
+                .filter(i -> i.type().equals(OUTPUT))
+                .map(i -> Long.toString(((Instructions.OutputInstruction) i).port().toLong()))
+                .collect(Collectors.joining(","));
+        final String desc = outPorts.isBlank()
+                ? "treatment=" + packet.treatment().toString()
+                : "egress_ports=" + outPorts;
+        log.trace("Sending PACKET-OUT >>> device={} {} eth_type={}",
+                  packet.sendThrough(), desc,
+                  etherType.ethType().toString());
+    }
+
+    private EthType.EtherType getEtherType(ByteBuffer data) {
+        final short shortEthType = data.getShort(12);
+        data.rewind();
+        return EthType.EtherType.lookup(shortEthType);
+    }
 }
diff --git a/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/P4RuntimePacketProvider.java b/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/P4RuntimePacketProvider.java
index 82e2979..2fa7493 100644
--- a/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/P4RuntimePacketProvider.java
+++ b/providers/p4runtime/packet/src/main/java/org/onosproject/provider/p4runtime/packet/impl/P4RuntimePacketProvider.java
@@ -17,6 +17,7 @@
 package org.onosproject.provider.p4runtime.packet.impl;
 
 
+import org.onlab.packet.EthType;
 import org.onosproject.mastership.MastershipService;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
@@ -111,6 +112,12 @@
         }
     }
 
+    private EthType.EtherType getEtherType(ByteBuffer data) {
+        final short shortEthType = data.getShort(12);
+        data.rewind();
+        return EthType.EtherType.lookup(shortEthType);
+    }
+
     /**
      * Internal packet context implementation.
      */
@@ -139,7 +146,6 @@
             }
 
             OutboundPacket outboundPacket = new DefaultOutboundPacket(deviceId, treatment, rawData);
-            log.debug("Processing outbound packet: {}", outboundPacket);
 
             emit(outboundPacket);
         }
@@ -155,7 +161,7 @@
             //Masterhip message is sent to everybody but picked up only by master.
             //FIXME we need the device ID into p4RuntimeEvnetSubject to check for mastsership
             if (!(event.subject() instanceof P4RuntimePacketIn) || event.type() != P4RuntimeEvent.Type.PACKET_IN) {
-                log.debug("Event type {}", event.type());
+                log.debug("Unrecognized event type {}, discarding", event.type());
                 // Not a packet-in event, ignore it.
                 return;
             }
@@ -183,13 +189,18 @@
                 return;
             }
 
+            if (log.isTraceEnabled()) {
+                final EthType.EtherType etherType = getEtherType(inPkt.unparsed());
+                log.trace("Received PACKET-IN <<< device={} ingress_port={} eth_type={}",
+                          inPkt.receivedFrom().deviceId(), inPkt.receivedFrom().port(),
+                          etherType.ethType().toString());
+            }
+
             if (inPkt == null) {
                 log.debug("Received null inbound packet. Ignoring.");
                 return;
             }
 
-            log.debug("Processing inbound packet: {}", inPkt.toString());
-
             OutboundPacket outPkt = new DefaultOutboundPacket(eventSubject.deviceId(), null,
                     operation.data().asReadOnlyBuffer());
             PacketContext pktCtx = new P4RuntimePacketContext(System.currentTimeMillis(), inPkt, outPkt, false);