diff --git a/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoPipelineProgrammable.java b/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoPipelineProgrammable.java
index 2dd3dd2..b6fb853 100644
--- a/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoPipelineProgrammable.java
+++ b/drivers/barefoot/src/main/java/org/onosproject/drivers/barefoot/TofinoPipelineProgrammable.java
@@ -29,6 +29,7 @@
 import org.onosproject.p4runtime.api.P4RuntimeController;
 import org.slf4j.Logger;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.Buffer;
@@ -72,7 +73,6 @@
         if (!controller.hasClient(deviceId)) {
             log.warn("Unable to find client for {}, aborting pipeconf deploy", deviceId);
             return false;
-
         }
 
         P4RuntimeClient client = controller.getClient(deviceId);
@@ -94,6 +94,9 @@
                 return false;
             }
 
+            //FIXME this hack calls the shell command to set up the ports
+            SharedExecutors.getPoolThreadExecutor().submit(() -> runPortCommand(deviceId));
+
         } catch (InterruptedException | ExecutionException e) {
             throw new RuntimeException(e);
         }
@@ -101,6 +104,48 @@
         return true;
     }
 
+    // FIXME This is a hack to enable port until we either implement Thrift or gNMI
+    private void runPortCommand(DeviceId deviceId) {
+        // TODO we should have a more intelligent way of building the command
+        final String command;
+        if ("device:tofino:11".equals(deviceId.toString())) {
+            command = "./pm.py 10.254.1.38 38-port-config.txt";
+        } else if ("device:tofino:12".equals(deviceId.toString())) {
+            command = "./pm.py 10.254.1.37 37-port-config.txt";
+        } else if ("device:tofino:21".equals(deviceId.toString())) {
+            command = "./pm.py 10.254.1.40 40-port-config.txt";
+        } else if ("device:tofino:22".equals(deviceId.toString())) {
+            command = "./pm.py 10.254.1.39 39-port-config.txt";
+        } else {
+            log.error("Device port config not found: {}", deviceId);
+            return;
+        }
+        try {
+            // Give the switch 2 seconds to get settled with the new config
+            Thread.sleep(3000);
+
+            String rootDir = System.getenv("ONOS_ROOT");
+            if (rootDir == null) {
+                log.error("ONOS_ROOT is not set");
+                return;
+            }
+            File workingDirectory = new File(rootDir, "tools/test/tofino-port-auto-setup-tool");
+            if (!workingDirectory.isDirectory()) {
+                log.error("{} does not exist", workingDirectory);
+                return;
+            }
+            Process process = Runtime.getRuntime().exec(command, null, workingDirectory);
+            int exit = process.waitFor();
+            if (exit != 0) {
+                log.error("port command returned non-zero status {} for device {}", exit, deviceId);
+                return;
+            }
+            log.info("Successfully executed port enable on {}", deviceId);
+        } catch (Exception e) {
+            log.error("Failed to run port command on {}", deviceId, e);
+        }
+    }
+
     private ByteBuffer createPipelineBuffer(PiPipeconf pipeconf, List<ExtensionType> targetConfigExtTypes) {
         if (targetConfigExtTypes == null || targetConfigExtTypes.isEmpty() || isNullOrEmpty(pipeconf.id().toString())) {
 
