diff --git a/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/InterfaceCounter.java b/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/InterfaceCounter.java
index c8a4651..51f705b 100644
--- a/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/InterfaceCounter.java
+++ b/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/InterfaceCounter.java
@@ -17,11 +17,14 @@
 
 import com.google.common.base.MoreObjects;
 import static com.google.common.base.Preconditions.checkState;
+import java.nio.ByteBuffer;
+import org.onlab.packet.BasePacket;
+import org.onlab.packet.Deserializer;
 
 /**
  * Represents interface counters for network interfaces.
  */
-public final class InterfaceCounter {
+public final class InterfaceCounter extends BasePacket {
     private int ifIndex;
     private int ifType;
     private long ifSpeed;
@@ -290,6 +293,42 @@
     }
 
     /**
+     * Deserializer function for sFlow packets.
+     *
+     * @return deserializer function
+     */
+    public static Deserializer<InterfaceCounter> deserializer() {
+        return (data, offset, length) -> {
+            ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+            Builder builder = new Builder();
+            return builder.ifIndex(bb.getShort())
+                    .ifType(bb.getShort())
+                    .ifSpeed(bb.getInt())
+                    .ifStatus(bb.getShort())
+                    .ifInOctets(bb.getLong())
+                    .ifInUcastPkts(bb.getInt())
+                    .ifInMulticastPkts(bb.getInt())
+                    .ifInBroadcastPkts(bb.getInt())
+                    .ifInDiscards(bb.getInt())
+                    .ifInErrors(bb.getInt())
+                    .ifInUnknownProtos(bb.getInt())
+                    .ifOutOctets(bb.getLong())
+                    .ifOutUcastPkts(bb.getInt())
+                    .ifOutMulticastPkts(bb.getInt())
+                    .ifOutBroadcastPkts(bb.getInt())
+                    .ifOutDiscards(bb.getInt())
+                    .ifOutErrors(bb.getInt())
+                    .ifPromiscuousMode(bb.getInt())
+                    .build();
+        };
+    }
+
+    @Override
+    public byte[] serialize() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    /**
      * Builder pattern to create an instance of InterfaceCounter.
      */
     private static class Builder {
