diff --git a/core/api/src/main/java/org/onosproject/net/PipelineTraceableInput.java b/core/api/src/main/java/org/onosproject/net/PipelineTraceableInput.java
new file mode 100644
index 0000000..2403c5e
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/PipelineTraceableInput.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.net;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.onosproject.core.GroupId;
+import org.onosproject.net.flow.FlowEntry;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.group.Group;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Represents the input of the pipeline traceable processing.
+ */
+public class PipelineTraceableInput {
+
+    // Input state for the traceable behavior
+    TrafficSelector ingressPacket;
+    ConnectPoint ingressPort;
+    // List here all possible device state using
+    // possibly an optimized reference
+    List<FlowEntry> flows = Lists.newArrayList();
+    Map<GroupId, Group> groups = Maps.newHashMap();
+
+    public PipelineTraceableInput(TrafficSelector ingressPacket, ConnectPoint ingressPort,
+                                  List<DataPlaneEntity> deviceState) {
+        this.ingressPacket = ingressPacket;
+        this.ingressPort = ingressPort;
+        processDeviceState(deviceState);
+    }
+
+    // Init internal device state (flows, groups, etc)
+    private void processDeviceState(List<DataPlaneEntity> deviceState) {
+        deviceState.forEach(entity -> {
+            if (entity.getType() == DataPlaneEntity.Type.FLOWRULE) {
+                flows.add(entity.getFlowEntry());
+            } else if (entity.getType() == DataPlaneEntity.Type.GROUP) {
+                groups.put(entity.getGroupEntry().id(), entity.getGroupEntry());
+            }
+        });
+    }
+
+    /**
+     * Getter for the ingress packet.
+     *
+     * @return the ingress packet
+     */
+    public TrafficSelector ingressPacket() {
+        return ingressPacket;
+    }
+
+    /**
+     * Getter for the ingress port.
+     *
+     * @return the ingress port
+     */
+    public ConnectPoint ingressPort() {
+        return ingressPort;
+    }
+
+    /**
+     * Getter for the flows.
+     *
+     * @return the flows
+     */
+    public List<FlowEntry> flows() {
+        return flows;
+    }
+
+    /**
+     * Getter for the groups.
+     *
+     * @return the groups
+     */
+    public Map<GroupId, Group> groups() {
+        return groups;
+    }
+
+    /**
+     * Returns the group associated with the given group id.
+     *
+     * @param groupId the group id
+     * @return the group, otherwise null.
+     */
+    public Group getGroup(GroupId groupId) {
+        return groups.get(groupId);
+    }
+
+}
