diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManager.java
index 1858ab9..5608bce 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManager.java
@@ -16,12 +16,15 @@
 
 package org.onosproject.openstacknetworking.impl;
 
+import org.onlab.packet.Ethernet;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.LeadershipService;
 import org.onosproject.cluster.NodeId;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.Port;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.DefaultFlowRule;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
@@ -42,14 +45,20 @@
 import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.onosproject.openstacknode.api.OpenstackPhyInterface;
 import org.slf4j.Logger;
 
 import java.util.Objects;
+import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.net.AnnotationKeys.PORT_NAME;
+import static org.onosproject.openstacknetworking.api.Constants.DHCP_TABLE;
 import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID;
+import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_FLAT_JUMP_UPSTREAM_RULE;
+import static org.onosproject.openstacknetworking.api.Constants.STAT_FLAT_OUTBOUND_TABLE;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -80,6 +89,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected OpenstackNodeService osNodeService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    protected DeviceService deviceService;
+
     private final ExecutorService deviceEventExecutor =
             Executors.newSingleThreadExecutor(groupedThreads(
                     getClass().getSimpleName(), "device-event"));
@@ -229,6 +241,65 @@
                                 Constants.VTAP_FLAT_OUTBOUND_TABLE);
         connectTables(deviceId, Constants.VTAP_FLAT_OUTBOUND_TABLE,
                                 Constants.FLAT_TABLE);
+
+        // for FLAT table drop
+        setUpTableMissEntry(deviceId, Constants.FLAT_TABLE);
+
+        // for FLAT jump rules
+        if (!osNodeService.node(deviceId).phyIntfs().isEmpty()) {
+            setFlatJumpRules(deviceId);
+        }
+    }
+
+    private void setFlatJumpRules(DeviceId deviceId) {
+        osNodeService.node(deviceId)
+                     .phyIntfs()
+                     .forEach(phyInterface ->
+                             setFlatJumpRulesForPhyIntf(deviceId, phyInterface));
+    }
+
+    private void setFlatJumpRulesForPhyIntf(DeviceId deviceId,
+                                            OpenstackPhyInterface phyInterface) {
+        Optional<Port> phyPort = deviceService.getPorts(deviceId).stream()
+                .filter(port ->
+                        Objects.equals(port.annotations().value(PORT_NAME), phyInterface.intf()))
+                .findAny();
+
+        phyPort.ifPresent(port -> {
+            TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
+            selector.matchInPort(port.number())
+                    .matchEthType(Ethernet.TYPE_IPV4);
+
+            TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
+            treatment.transition(STAT_FLAT_OUTBOUND_TABLE);
+            FlowRule flowRuleForIp = DefaultFlowRule.builder()
+                    .forDevice(deviceId)
+                    .withSelector(selector.build())
+                    .withTreatment(treatment.build())
+                    .withPriority(PRIORITY_FLAT_JUMP_UPSTREAM_RULE)
+                    .fromApp(appId)
+                    .makePermanent()
+                    .forTable(DHCP_TABLE)
+                    .build();
+
+            applyRule(flowRuleForIp, true);
+
+            selector = DefaultTrafficSelector.builder();
+            selector.matchInPort(port.number())
+                    .matchEthType(Ethernet.TYPE_ARP);
+
+            FlowRule flowRuleForArp = DefaultFlowRule.builder()
+                    .forDevice(deviceId)
+                    .withSelector(selector.build())
+                    .withTreatment(treatment.build())
+                    .withPriority(PRIORITY_FLAT_JUMP_UPSTREAM_RULE)
+                    .fromApp(appId)
+                    .makePermanent()
+                    .forTable(DHCP_TABLE)
+                    .build();
+
+            applyRule(flowRuleForArp, true);
+        });
     }
 
     private void setupJumpTable(DeviceId deviceId) {
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
index 0fab37e..71dbe5a 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
@@ -69,7 +69,6 @@
 import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID;
 import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_ADMIN_RULE;
 import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_FLAT_DOWNSTREAM_RULE;
-import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_FLAT_JUMP_DOWNSTREAM_RULE;
 import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_FLAT_JUMP_UPSTREAM_RULE;
 import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_FLAT_UPSTREAM_RULE;
 import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_SWITCHING_RULE;
@@ -189,34 +188,6 @@
             log.warn("The port number does not exist");
             return;
         }
-
-        selector = DefaultTrafficSelector.builder();
-        selector.matchInPort(portNumber)
-                .matchEthType(Ethernet.TYPE_IPV4)
-                .matchIPDst(port.ipAddress().toIpPrefix());
-
-        osFlowRuleService.setRule(
-                appId,
-                port.deviceId(),
-                selector.build(),
-                treatment.build(),
-                PRIORITY_FLAT_JUMP_DOWNSTREAM_RULE,
-                DHCP_TABLE,
-                install);
-
-        selector = DefaultTrafficSelector.builder();
-        selector.matchInPort(portNumber)
-                .matchEthType(Ethernet.TYPE_ARP)
-                .matchArpTpa(port.ipAddress().getIp4Address());
-
-        osFlowRuleService.setRule(
-                appId,
-                port.deviceId(),
-                selector.build(),
-                treatment.build(),
-                PRIORITY_FLAT_JUMP_DOWNSTREAM_RULE,
-                DHCP_TABLE,
-                install);
     }
 
     private void setDownstreamRulesForFlat(InstancePort instPort, boolean install) {
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManagerTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManagerTest.java
index ed73636..bd982f2 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManagerTest.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManagerTest.java
@@ -23,6 +23,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
+import org.onlab.packet.IpAddress;
 import org.onosproject.cluster.ClusterServiceAdapter;
 import org.onosproject.cluster.LeadershipServiceAdapter;
 import org.onosproject.core.ApplicationId;
@@ -38,6 +39,9 @@
 import org.onosproject.net.flow.FlowRuleServiceAdapter;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
+import org.onosproject.openstacknode.api.NodeState;
+import org.onosproject.openstacknode.api.OpenstackNode;
 
 import java.util.List;
 import java.util.Map;
@@ -189,7 +193,7 @@
         fros = Sets.newConcurrentHashSet();
 
         target.initializePipeline(DEVICE_ID);
-        assertEquals("Flow Rule size was not match", 12, fros.size());
+        assertEquals("Flow Rule size was not match", 13, fros.size());
 
         Map<Integer, Integer> fromToTableMap = Maps.newConcurrentMap();
         fromToTableMap.put(STAT_INBOUND_TABLE, VTAP_INBOUND_TABLE);
@@ -204,7 +208,7 @@
         fromToTableMap.put(VTAP_FLAT_OUTBOUND_TABLE, FLAT_TABLE);
 
         fros.stream().map(FlowRuleOperation::rule).forEach(fr -> {
-            if (fr.tableId() != JUMP_TABLE) {
+            if (fr.tableId() != JUMP_TABLE && fr.tableId() != FLAT_TABLE) {
                 assertEquals("To Table did not match,",
                         fromToTableMap.get(fr.tableId()),
                         fr.treatment().tableTransition().tableId());
@@ -229,6 +233,16 @@
     }
 
     private class TestOpenstackNodeService extends OpenstackNodeServiceAdapter {
+        @Override
+        public OpenstackNode node(DeviceId deviceId) {
+            return DefaultOpenstackNode.builder()
+                    .hostname("host")
+                    .type(OpenstackNode.NodeType.COMPUTE)
+                    .state(NodeState.COMPLETE)
+                    .managementIp(IpAddress.valueOf("1.1.1.1"))
+                    .dataIp(IpAddress.valueOf("1.1.1.1"))
+                    .build();
+        }
     }
 
     private class TestFlowRuleService extends FlowRuleServiceAdapter {
