diff --git a/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/FlowSample.java b/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/FlowSample.java
index fbce79c..73dff7b 100644
--- a/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/FlowSample.java
+++ b/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/FlowSample.java
@@ -15,10 +15,14 @@
  */
 package org.onosproject.sflow;
 
-import java.util.List;
-
 import org.onlab.packet.Deserializer;
 
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+
 /**
  * A sample involves either copying the packet's header, or
  * extracting features from the packet (see sFlow Datagram Format for a
@@ -90,4 +94,302 @@
         };
     }
 
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 59 * hash + Objects.hashCode(this.type);
+        hash = 59 * hash + this.length;
+        hash = 59 * hash + this.sequenceNumber;
+        hash = 59 * hash + this.sourceId;
+        hash = 59 * hash + this.numberOfRecords;
+        hash = 59 * hash + this.samplingRate;
+        hash = 59 * hash + this.samplePool;
+        hash = 59 * hash + this.inputInterfaceId;
+        hash = 59 * hash + this.outputInterfaceId;
+        hash = 59 * hash + Objects.hashCode(this.records);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final FlowSample other = (FlowSample) obj;
+        if (this.type != other.type) {
+            return false;
+        }
+        if (this.length != other.length) {
+            return false;
+        }
+        if (this.sequenceNumber != other.sequenceNumber) {
+            return false;
+        }
+        if (this.sourceId != other.sourceId) {
+            return false;
+        }
+        if (this.sourceIndex != other.sourceIndex) {
+            return false;
+        }
+        if (this.numberOfRecords != other.numberOfRecords) {
+            return false;
+        }
+        if (this.samplingRate != other.samplingRate) {
+            return false;
+        }
+        if (this.samplePool != other.samplePool) {
+            return false;
+        }
+        if (this.drops != other.drops) {
+            return false;
+        }
+        if (this.inputInterfaceId != other.inputInterfaceId) {
+            return false;
+        }
+        if (this.outputInterfaceId != other.outputInterfaceId) {
+            return false;
+        }
+        return Objects.equals(this.records, other.records);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("enterprise", enterprise)
+                .add("type", type)
+                .add("length", length)
+                .add("sequenceNumber", sequenceNumber)
+                .add("sourceId", sourceId)
+                .add("sourceIndex", sourceIndex)
+                .add("numberOfRecords", numberOfRecords)
+                .add("samplingRate", samplingRate)
+                .add("samplePool", samplePool)
+                .add("drops", drops)
+                .add("inputInterfaceId", inputInterfaceId)
+                .add("inputInterfaceValue", inputInterfaceValue)
+                .add("outputInterfaceId", outputInterfaceId)
+                .add("outputInterfaceValue", outputInterfaceValue)
+                .add("records", records)
+                .toString();
+    }
+
+    /**
+     * Builder for sFlow packet.
+     */
+    private static class Builder {
+
+        private int enterprise;
+
+        private SflowSample.Type type;
+
+        private int length;
+
+        private int sequenceNumber;
+
+        private int sourceId;
+
+        private int sourceIndex;
+
+        private int numberOfRecords;
+
+        private int samplingRate;
+
+        private int samplePool;
+
+        private int drops;
+
+        private int inputInterfaceId;
+
+        private int inputInterfaceValue;
+
+        private int outputInterfaceId;
+
+        private int outputInterfaceValue;
+
+        private List<Object> records = new LinkedList<>();
+
+        /**
+         * Setter sFlow packet sampling rate.
+         *
+         * @param samplingRate sampling rate.
+         * @return this class builder.
+         */
+        public Builder samplingRate(int samplingRate) {
+            this.samplingRate = samplingRate;
+            return this;
+        }
+
+        /**
+         * Setter sFlow packet sampling pool.
+         *
+         * @param samplePool sampling pool.
+         * @return this class builder.
+         */
+        public Builder samplePool(int samplePool) {
+            this.samplePool = samplePool;
+            return this;
+        }
+
+        /**
+         * Setter sFlow packet drops.
+         *
+         * @param drops packet drops.
+         * @return this class builder.
+         */
+        public Builder drops(int drops) {
+            this.drops = drops;
+            return this;
+        }
+
+        /**
+         * Setter sFlow packet ingress interface.
+         *
+         * @param inputInterfaceId ingress interface id.
+         * @return this class builder.
+         */
+        public Builder inputInterfaceId(int inputInterfaceId) {
+            this.inputInterfaceId = inputInterfaceId;
+            return this;
+        }
+
+        /**
+         * Setter sFlow packet ingress interface value.
+         *
+         * @param inputInterfaceValue ingress interface value.
+         * @return this class builder.
+         */
+        public Builder inputInterfaceValue(int inputInterfaceValue) {
+            this.inputInterfaceValue = inputInterfaceValue;
+            return this;
+        }
+
+        /**
+         * Setter sFlow packet egress interface.
+         *
+         * @param outputInterfaceId egress interface id.
+         * @return this class builder.
+         */
+        public Builder outputInterfaceId(int outputInterfaceId) {
+            this.outputInterfaceId = outputInterfaceId;
+            return this;
+        }
+
+        /**
+         * Setter sFlow packet egress interface value.
+         *
+         * @param outputInterfaceValue egress interface value.
+         * @return this class builder.
+         */
+        public Builder outputInterfaceValue(int outputInterfaceValue) {
+            this.outputInterfaceValue = outputInterfaceValue;
+            return this;
+        }
+
+        /**
+         * Setter sFlow flow packet record.
+         *
+         * @param records flow packet records.
+         * @return this class builder.
+         */
+        public Builder records(List<Object> records) {
+            this.records = records;
+            return this;
+        }
+
+        /**
+         * Setter sFlow flow packet record.
+         *
+         * @param record flow packet record.
+         * @return this class builder.
+         */
+        public Builder record(Object record) {
+            this.records.add(record);
+            return this;
+        }
+
+        /**
+         * Setter sFlow flow packet record count.
+         *
+         * @param numberOfRecords flow packet record count.
+         * @return this class builder.
+         */
+        public Builder numberOfRecords(int numberOfRecords) {
+            this.numberOfRecords = numberOfRecords;
+            return this;
+        }
+
+        /**
+         * Setter sFlow agent source index.
+         *
+         * @param sourceIndex agent source index.
+         * @return this class builder.
+         */
+        public Builder sourceIndex(int sourceIndex) {
+            this.sourceIndex = sourceIndex;
+            return this;
+        }
+
+        /**
+         * Setter sFlow agent source id.
+         *
+         * @param sourceId agent source id.
+         * @return this class builder.
+         */
+        public Builder sourceId(int sourceId) {
+            this.sourceId = sourceId;
+            return this;
+        }
+
+        /**
+         * Setter sFlow flow packet sequence number.
+         *
+         * @param sequenceNumber flow packet sequence number.
+         * @return this class builder.
+         */
+        public Builder sequenceNumber(int sequenceNumber) {
+            this.sequenceNumber = sequenceNumber;
+            return this;
+        }
+
+        /**
+         * Setter sFlow sample length.
+         *
+         * @param length sample length.
+         * @return this class builder.
+         */
+        public Builder length(int length) {
+            this.length = length;
+            return this;
+        }
+
+        /**
+         * Setter sFlow sample type.
+         *
+         * @param type sFlow sample type.
+         * @return this class builder.
+         */
+        public Builder type(SflowSample.Type type) {
+            this.type = type;
+            return this;
+        }
+
+        /**
+         * Setter sFlow enterprise id.
+         *
+         * @param enterprise sFlow enterprise id.
+         * @return this class builder.
+         */
+        public Builder enterprise(int enterprise) {
+            this.enterprise = enterprise;
+            return this;
+        }
+
+
+    }
 }
\ No newline at end of file
diff --git a/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/SflowSample.java b/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/SflowSample.java
index a05bb6b..d150739 100644
--- a/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/SflowSample.java
+++ b/apps/ipflow-monitor/sflow/api/src/main/java/org/onosproject/sflow/SflowSample.java
@@ -32,19 +32,19 @@
  */
 public abstract class SflowSample extends BasePacket {
 
-    private int enterprise;
+    int enterprise;
 
-    private Type type;
+    Type type;
 
-    private int length;
+    int length;
 
-    private int sequenceNumber;
+    int sequenceNumber;
 
-    private int sourceId;
+    int sourceId;
 
-    private int sourceIndex;
+    int sourceIndex;
 
-    private int numberOfRecords;
+    int numberOfRecords;
 
     /**
      * Get sFlow agent enterprise id.
