diff --git a/drivers/mellanox/BUCK b/drivers/mellanox/BUCK
new file mode 100644
index 0000000..bb9bfbc
--- /dev/null
+++ b/drivers/mellanox/BUCK
@@ -0,0 +1,25 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//drivers/p4runtime:onos-drivers-p4runtime',
+]
+
+BUNDLES = [
+    ':onos-drivers-mellanox',
+]
+
+osgi_jar(
+    deps = COMPILE_DEPS,
+)
+
+onos_app(
+    app_name = 'org.onosproject.drivers.mellanox',
+    title = 'Mellanox Drivers',
+    category = 'Drivers',
+    url = 'https://wiki.onosproject.org/x/aAZkAQ',
+    description = 'Adds support for Mellanox Spectrum-based devices using P4Runtime',
+    included_bundles = BUNDLES,
+    required_apps = [
+        'org.onosproject.drivers.p4runtime',
+        'org.onosproject.pipelines.fabric',
+    ],
+)
diff --git a/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/MellanoxDriversLoader.java b/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/MellanoxDriversLoader.java
new file mode 100644
index 0000000..2b6ee26
--- /dev/null
+++ b/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/MellanoxDriversLoader.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2018-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.drivers.mellanox;
+
+import org.apache.felix.scr.annotations.Component;
+import org.onosproject.net.driver.AbstractDriverLoader;
+
+/**
+ * Loader for the Mellanox device drivers.
+ */
+@Component(immediate = true)
+public class MellanoxDriversLoader extends AbstractDriverLoader {
+
+    public MellanoxDriversLoader() {
+        super("/mellanox-drivers.xml");
+    }
+}
diff --git a/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/SpectrumPipelineProgrammable.java b/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/SpectrumPipelineProgrammable.java
new file mode 100644
index 0000000..c13ab77
--- /dev/null
+++ b/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/SpectrumPipelineProgrammable.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2018-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.drivers.mellanox;
+
+import org.onosproject.drivers.p4runtime.AbstractP4RuntimePipelineProgrammable;
+import org.onosproject.net.behaviour.PiPipelineProgrammable;
+import org.onosproject.net.pi.model.PiPipeconf;
+import org.onosproject.net.pi.model.PiPipeconfId;
+import org.onosproject.net.pi.service.PiPipeconfService;
+
+import java.nio.ByteBuffer;
+import java.util.Optional;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.lang.String.format;
+
+/**
+ * Implementation of the PiPipelineProgrammable behaviour for a Spectrum-based
+ * switch with P4Runtime support.
+ */
+public class SpectrumPipelineProgrammable
+        extends AbstractP4RuntimePipelineProgrammable
+        implements PiPipelineProgrammable {
+
+    private static final PiPipeconfId FABRIC_PIPECONF_ID =
+            new PiPipeconfId("org.onosproject.pipelines.fabric");
+
+    @Override
+    public ByteBuffer createDeviceDataBuffer(PiPipeconf pipeconf) {
+        checkArgument(pipeconf.id().equals(FABRIC_PIPECONF_ID),
+                      format("Cannot program Spectrum device with a pipeconf " +
+                                     "other than '%s' (found '%s')",
+                             FABRIC_PIPECONF_ID, pipeconf.id()));
+        // Dummy value.
+        // We assume switch to be already configured with fabric.p4 profile.
+        return ByteBuffer.allocate(1).put((byte) 1);
+    }
+
+    @Override
+    public Optional<PiPipeconf> getDefaultPipeconf() {
+        return handler().get(PiPipeconfService.class)
+                .getPipeconf(FABRIC_PIPECONF_ID);
+    }
+}
diff --git a/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/package-info.java b/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/package-info.java
new file mode 100644
index 0000000..4b1f03f
--- /dev/null
+++ b/drivers/mellanox/src/main/java/org/onosproject/drivers/mellanox/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2018-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 for Mellanox device drivers.
+ */
+package org.onosproject.drivers.mellanox;
diff --git a/drivers/mellanox/src/main/resources/mellanox-drivers.xml b/drivers/mellanox/src/main/resources/mellanox-drivers.xml
new file mode 100644
index 0000000..35fa93d
--- /dev/null
+++ b/drivers/mellanox/src/main/resources/mellanox-drivers.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2018-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.
+  -->
+<drivers>
+    <driver name="mellanox" manufacturer="Mellanox" hwVersion="1.0" swVersion="1.0" extends="p4runtime">
+        <behaviour api="org.onosproject.net.behaviour.PiPipelineProgrammable"
+                   impl="org.onosproject.drivers.mellanox.SpectrumPipelineProgrammable"/>
+        <property name="noHashedTable">true</property>
+    </driver>
+</drivers>
+
diff --git a/modules.defs b/modules.defs
index 13f485a..f574d9d 100644
--- a/modules.defs
+++ b/modules.defs
@@ -110,6 +110,7 @@
     '//drivers/oplink:onos-drivers-oplink-oar',
     '//drivers/bmv2:onos-drivers-bmv2-oar',
     '//drivers/barefoot:onos-drivers-barefoot-oar',
+    '//drivers/mellanox:onos-drivers-mellanox-oar',
     '//drivers/hp:onos-drivers-hp-oar',
     '//drivers/p4runtime:onos-drivers-p4runtime-oar',
     '//drivers/gnmi:onos-drivers-gnmi-oar',
