diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipeliner.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipeliner.java
index d37402d..dfd8d85 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipeliner.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipeliner.java
@@ -29,6 +29,7 @@
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flow.criteria.Criterion;
 import org.onosproject.net.flow.criteria.EthCriterion;
+import org.onosproject.net.flow.criteria.IPCriterion;
 import org.onosproject.net.flow.criteria.VlanIdCriterion;
 import org.onosproject.net.flowobjective.ForwardingObjective;
 import org.onosproject.net.flowobjective.ObjectiveError;
@@ -95,6 +96,7 @@
 
         VlanIdCriterion vlanIdCriterion = null;
         EthCriterion ethDstCriterion = null;
+        IPCriterion ipDstCriterion = null;
 
         for (Criterion criterion : criteria) {
             switch (criterion.type()) {
@@ -104,6 +106,9 @@
                 case VLAN_VID:
                     vlanIdCriterion = (VlanIdCriterion) criterion;
                     break;
+                case IPV4_DST:
+                    ipDstCriterion = (IPCriterion) criterion;
+                    break;
                 default:
                     log.warn("Unsupported criterion {}", criterion);
                     break;
@@ -120,6 +125,8 @@
                 processL2BroadcastRule(vlanIdCriterion, fwd, resultBuilder);
                 break;
             case IPV4_UNICAST:
+                processIpv4UnicastRule(ipDstCriterion, fwd, resultBuilder);
+                break;
             case IPV4_MULTICAST:
             case IPV6_UNICAST:
             case IPV6_MULTICAST:
@@ -195,6 +202,32 @@
         resultBuilder.addFlowRule(flowRule);
     }
 
+    private void processIpv4UnicastRule(IPCriterion ipDstCriterion, ForwardingObjective fwd,
+                                        PipelinerTranslationResult.Builder resultBuilder) {
+        checkNotNull(ipDstCriterion, "IP dst criterion should not be null");
+        if (fwd.nextId() == null) {
+            log.warn("Forwarding objective for IPv4 unicast should contains next id");
+            resultBuilder.setError(ObjectiveError.BADPARAMS);
+            return;
+        }
+        TrafficSelector selector = DefaultTrafficSelector.builder()
+                .matchIPDst(ipDstCriterion.ip())
+                .build();
+
+        TrafficTreatment treatment = buildSetNextIdTreatment(fwd.nextId());
+        FlowRule flowRule = DefaultFlowRule.builder()
+                .withSelector(selector)
+                .withTreatment(treatment)
+                .fromApp(fwd.appId())
+                .withPriority(fwd.priority())
+                .makePermanent()
+                .forDevice(deviceId)
+                .forTable(FabricConstants.TBL_UNICAST_V4_ID)
+                .build();
+
+        resultBuilder.addFlowRule(flowRule);
+    }
+
     private static TrafficTreatment buildSetNextIdTreatment(Integer nextId) {
         PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
                                                       ImmutableByteSequence.copyFrom(nextId.byteValue()));
