diff --git a/drivers/cisco/BUCK b/drivers/cisco/netconf/BUCK
similarity index 76%
rename from drivers/cisco/BUCK
rename to drivers/cisco/netconf/BUCK
index 6f73cd1..b3b082a 100644
--- a/drivers/cisco/BUCK
+++ b/drivers/cisco/netconf/BUCK
@@ -10,7 +10,7 @@
 ]
 
 BUNDLES = [
-    ':onos-drivers-cisco',
+    ':onos-drivers-cisco-netconf',
     '//drivers/utilities:onos-drivers-utilities',
 ]
 
@@ -22,11 +22,11 @@
 )
 
 onos_app (
-    app_name = 'org.onosproject.drivers.cisco',
-    title = 'Cisco device drivers',
+    app_name = 'org.onosproject.drivers.cisco.netconf',
+    title = 'Cisco NETCONF device drivers',
     category = 'Drivers',
     url = 'http://onosproject.org',
-    description = 'ONOS Cisco device drivers application.',
+    description = 'ONOS Cisco NETCONF device drivers application.',
     included_bundles = BUNDLES,
     required_apps = [ 'org.onosproject.netconf', 'org.onosproject.drivers.netconf' ],
 )
diff --git a/drivers/cisco/features.xml b/drivers/cisco/netconf/features.xml
similarity index 100%
rename from drivers/cisco/features.xml
rename to drivers/cisco/netconf/features.xml
diff --git a/drivers/cisco/netconf/pom.xml b/drivers/cisco/netconf/pom.xml
new file mode 100644
index 0000000..ce4ee0a
--- /dev/null
+++ b/drivers/cisco/netconf/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present Open Networking Laboratory
+  ~
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>onos-drivers-cisco</artifactId>
+        <groupId>org.onosproject</groupId>
+        <version>1.11.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>onos-drivers-cisco-netconf</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>Cisco NETCONF device drivers</description>
+
+    <properties>
+        <onos.app.name>org.onosproject.drivers.cisco.netconf</onos.app.name>
+        <onos.app.origin>ON.Lab</onos.app.origin>
+        <onos.app.category>Drivers</onos.app.category>
+        <onos.app.title>Cisco NETCONF Device Drivers</onos.app.title>
+        <onos.app.url>http://onosproject.org</onos.app.url>
+        <onos.app.requires>
+            org.onosproject.netconf
+        </onos.app.requires>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-drivers-utilities</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-netconf-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/drivers/cisco/src/main/java/org/onosproject/drivers/cisco/CiscoDriversLoader.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/CiscoDriversLoader.java
similarity index 100%
rename from drivers/cisco/src/main/java/org/onosproject/drivers/cisco/CiscoDriversLoader.java
rename to drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/CiscoDriversLoader.java
diff --git a/drivers/cisco/src/main/java/org/onosproject/drivers/cisco/CiscoIosDeviceDescription.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/CiscoIosDeviceDescription.java
similarity index 100%
rename from drivers/cisco/src/main/java/org/onosproject/drivers/cisco/CiscoIosDeviceDescription.java
rename to drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/CiscoIosDeviceDescription.java
diff --git a/drivers/cisco/src/main/java/org/onosproject/drivers/cisco/InterfaceConfigCiscoIosImpl.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/InterfaceConfigCiscoIosImpl.java
similarity index 100%
rename from drivers/cisco/src/main/java/org/onosproject/drivers/cisco/InterfaceConfigCiscoIosImpl.java
rename to drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/InterfaceConfigCiscoIosImpl.java
diff --git a/drivers/cisco/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
similarity index 100%
rename from drivers/cisco/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
rename to drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
diff --git a/drivers/cisco/src/main/java/org/onosproject/drivers/cisco/XmlParserCisco.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/XmlParserCisco.java
similarity index 100%
rename from drivers/cisco/src/main/java/org/onosproject/drivers/cisco/XmlParserCisco.java
rename to drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/XmlParserCisco.java
diff --git a/drivers/cisco/src/main/java/org/onosproject/drivers/cisco/package-info.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/package-info.java
similarity index 100%
rename from drivers/cisco/src/main/java/org/onosproject/drivers/cisco/package-info.java
rename to drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/package-info.java
diff --git a/drivers/cisco/src/main/resources/cisco-drivers.xml b/drivers/cisco/netconf/src/main/resources/cisco-drivers.xml
similarity index 100%
rename from drivers/cisco/src/main/resources/cisco-drivers.xml
rename to drivers/cisco/netconf/src/main/resources/cisco-drivers.xml
diff --git a/drivers/cisco/src/test/java/org/onosproject/drivers/cisco/CiscoDriversLoaderTest.java b/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/CiscoDriversLoaderTest.java
similarity index 100%
rename from drivers/cisco/src/test/java/org/onosproject/drivers/cisco/CiscoDriversLoaderTest.java
rename to drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/CiscoDriversLoaderTest.java
diff --git a/drivers/cisco/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java b/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
similarity index 100%
rename from drivers/cisco/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
rename to drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
diff --git a/drivers/cisco/src/test/java/org/onosproject/drivers/cisco/XmlParserCiscoTest.java b/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/XmlParserCiscoTest.java
similarity index 100%
rename from drivers/cisco/src/test/java/org/onosproject/drivers/cisco/XmlParserCiscoTest.java
rename to drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/XmlParserCiscoTest.java
diff --git a/drivers/cisco/src/test/resources/CiscoIosInterfaces.xml b/drivers/cisco/netconf/src/test/resources/CiscoIosInterfaces.xml
similarity index 100%
rename from drivers/cisco/src/test/resources/CiscoIosInterfaces.xml
rename to drivers/cisco/netconf/src/test/resources/CiscoIosInterfaces.xml
diff --git a/drivers/cisco/src/test/resources/testGetConfig.xml b/drivers/cisco/netconf/src/test/resources/testGetConfig.xml
similarity index 100%
rename from drivers/cisco/src/test/resources/testGetConfig.xml
rename to drivers/cisco/netconf/src/test/resources/testGetConfig.xml
diff --git a/drivers/cisco/src/test/resources/testShowInterfaces.xml b/drivers/cisco/netconf/src/test/resources/testShowInterfaces.xml
similarity index 100%
rename from drivers/cisco/src/test/resources/testShowInterfaces.xml
rename to drivers/cisco/netconf/src/test/resources/testShowInterfaces.xml
diff --git a/drivers/cisco/src/test/resources/testShowVersion.xml b/drivers/cisco/netconf/src/test/resources/testShowVersion.xml
similarity index 100%
rename from drivers/cisco/src/test/resources/testShowVersion.xml
rename to drivers/cisco/netconf/src/test/resources/testShowVersion.xml
diff --git a/drivers/cisco/pom.xml b/drivers/cisco/pom.xml
index ab3203e..340f09b 100644
--- a/drivers/cisco/pom.xml
+++ b/drivers/cisco/pom.xml
@@ -26,32 +26,13 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>onos-drivers-cisco</artifactId>
-    <packaging>bundle</packaging>
+    <packaging>pom</packaging>
 
     <description>Cisco device drivers</description>
 
-    <properties>
-        <onos.app.name>org.onosproject.drivers.cisco</onos.app.name>
-        <onos.app.origin>ON.Lab</onos.app.origin>
-        <onos.app.category>Drivers</onos.app.category>
-        <onos.app.title>Cisco Device Drivers</onos.app.title>
-        <onos.app.url>http://onosproject.org</onos.app.url>
-        <onos.app.requires>
-            org.onosproject.netconf
-        </onos.app.requires>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-drivers-utilities</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-netconf-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
+    <modules>
+        <module>netconf</module>
+        <module>rest</module>
+    </modules>
 
 </project>
\ No newline at end of file
diff --git a/drivers/cisco/rest/BUCK b/drivers/cisco/rest/BUCK
new file mode 100644
index 0000000..b4c5b11
--- /dev/null
+++ b/drivers/cisco/rest/BUCK
@@ -0,0 +1,35 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//lib:javax.ws.rs-api',
+    '//incubator/api:onos-incubator-api',
+    '//utils/rest:onlab-rest',
+    '//drivers/utilities:onos-drivers-utilities',
+    '//protocols/rest/api:onos-protocols-rest-api',
+]
+
+TEST_DEPS = [
+    '//lib:TEST_ADAPTERS',
+    '//core/api:onos-api-tests',
+]
+
+BUNDLES = [
+    ':onos-drivers-cisco-rest',
+    '//drivers/utilities:onos-drivers-utilities',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+    test_deps = TEST_DEPS,
+    resources_root = 'src/main/resources',
+    resources = glob(['src/main/resources/**']),
+)
+
+onos_app (
+    app_name = 'org.onosproject.drivers.cisco.rest',
+    title = 'Cisco REST device drivers',
+    category = 'Drivers',
+    url = 'http://onosproject.org',
+    description = 'ONOS Cisco REST device drivers application.',
+    included_bundles = BUNDLES,
+    required_apps = [ 'org.onosproject.restsb' ],
+)
diff --git a/drivers/cisco/rest/features.xml b/drivers/cisco/rest/features.xml
new file mode 100644
index 0000000..bc52359
--- /dev/null
+++ b/drivers/cisco/rest/features.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+  ~ Copyright 2017-present Open Networking Laboratory
+  ~
+  ~ 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.
+  -->
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
+    <feature name="${project.artifactId}" version="${project.version}"
+             description="${project.description}">
+        <feature>onos-api</feature>
+        <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
+
+        <bundle>mvn:${project.groupId}/onos-drivers-utilities/${project.version}</bundle>
+        <bundle>mvn:${project.groupId}/onos-restsb-api/${project.version}</bundle>
+    </feature>
+</features>
diff --git a/drivers/cisco/rest/pom.xml b/drivers/cisco/rest/pom.xml
new file mode 100644
index 0000000..6fb2ebf
--- /dev/null
+++ b/drivers/cisco/rest/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present Open Networking Laboratory
+  ~
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>onos-drivers-cisco</artifactId>
+        <groupId>org.onosproject</groupId>
+        <version>1.11.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>onos-drivers-cisco-rest</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>Cisco REST device drivers</description>
+
+    <properties>
+        <onos.app.name>org.onosproject.drivers.cisco.rest</onos.app.name>
+        <onos.app.origin>ON.Lab</onos.app.origin>
+        <onos.app.category>Drivers</onos.app.category>
+        <onos.app.title>Cisco REST Device Drivers</onos.app.title>
+        <onos.app.url>http://onosproject.org</onos.app.url>
+        <onos.app.requires>
+            org.onosproject.restsb
+        </onos.app.requires>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-drivers-utilities</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-restsb-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java
new file mode 100644
index 0000000..92a9b7f
--- /dev/null
+++ b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.cisco.rest;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import org.onlab.packet.ChassisId;
+import org.onosproject.net.AnnotationKeys;
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.Device;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Port;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.SparseAnnotations;
+import org.onosproject.net.device.DefaultDeviceDescription;
+import org.onosproject.net.device.DefaultPortDescription;
+import org.onosproject.net.device.DeviceDescription;
+import org.onosproject.net.device.DeviceDescriptionDiscovery;
+import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.device.PortDescription;
+import org.onosproject.net.driver.AbstractHandlerBehaviour;
+import org.onosproject.net.driver.DriverHandler;
+import org.onosproject.protocol.rest.RestSBController;
+import org.slf4j.Logger;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Discovers device information from a Cisco NXOS device.
+ */
+public class CiscoNxosDeviceDescription extends AbstractHandlerBehaviour
+        implements DeviceDescriptionDiscovery {
+    private final Logger log = getLogger(getClass());
+
+    private static final String UNKNOWN = "unknown";
+
+    private static final String SHOW_INTERFACES_CMD = "show interface";
+    private static final String SHOW_VERSION_CMD = "show version";
+
+    private static final String MANUFACTURER = "manufacturer";
+    private static final String CHASSIS_ID = "chassis_id";
+    private static final String KICKSTART_VER = "kickstart_ver_str";
+    private static final String ROW_INTERFACE = "ROW_interface";
+    private static final String INTERFACE = "interface";
+    private static final String ETH = "Eth";
+    private static final String ETHERNET = "Ethernet";
+    private static final String STATE = "state";
+    private static final String UP = "up";
+    private static final String ETH_BW = "eth_bw";
+    private static final String SLASH = "/";
+    private static final String ZERO = "0";
+    private static final int ONE_THOUSAND = 1000;
+
+
+    @Override
+    public DeviceDescription discoverDeviceDetails() {
+        DriverHandler handler = handler();
+        RestSBController controller = checkNotNull(handler.get(RestSBController.class));
+        DeviceId deviceId = handler.data().deviceId();
+
+        ArrayList<String> cmd = new ArrayList<>();
+        cmd.add(SHOW_VERSION_CMD);
+
+        String req = NxApiRequest.generate(cmd, NxApiRequest.CommandType.CLI);
+
+        String response = NxApiRequest.post(controller, deviceId, req);
+
+        String mrf = UNKNOWN;
+        String hwVer = UNKNOWN;
+        String swVer = UNKNOWN;
+        String serialNum = UNKNOWN;
+
+        try {
+            ObjectMapper om = new ObjectMapper();
+            JsonNode json = om.readTree(response);
+
+            JsonNode body = json.findValue("body");
+            if (body != null) {
+                mrf = body.get(MANUFACTURER).asText();
+                hwVer = body.get(CHASSIS_ID).asText();
+                swVer = body.get(KICKSTART_VER).asText();
+            }
+        } catch (IOException e) {
+            log.error("Failed to to retrieve Device Information {}", e);
+        }
+
+        DeviceService deviceService = checkNotNull(handler().get(DeviceService.class));
+        Device device = deviceService.getDevice(deviceId);
+        return new DefaultDeviceDescription(device.id().uri(), Device.Type.SWITCH,
+                mrf, hwVer, swVer, serialNum,
+                new ChassisId(), (SparseAnnotations) device.annotations());
+    }
+
+    @Override
+    public List<PortDescription> discoverPortDetails() {
+        DriverHandler handler = handler();
+        RestSBController controller = checkNotNull(handler.get(RestSBController.class));
+        DeviceId deviceId = handler.data().deviceId();
+
+        ArrayList<String> cmd = new ArrayList<>();
+        cmd.add(SHOW_INTERFACES_CMD);
+
+        String req = NxApiRequest.generate(cmd, NxApiRequest.CommandType.CLI);
+
+        String response = NxApiRequest.post(controller, deviceId, req);
+
+        // parse interface information from response
+        List<PortDescription> ports = Lists.newArrayList();
+        try {
+            ObjectMapper om = new ObjectMapper();
+            JsonNode json = om.readTree(response);
+
+            JsonNode interfaces = json.findValue(ROW_INTERFACE);
+            if (interfaces != null) {
+                interfaces.forEach(itf -> {
+                    String ifName = itf.get(INTERFACE).asText();
+                    if (ifName.startsWith(ETH)) {
+                        String ifNum = ifName.substring(ETHERNET.length()).replace(SLASH, ZERO);
+                        boolean state = itf.get(STATE).asText().equals(UP);
+                        long portSpeed = itf.get(ETH_BW).asLong() / ONE_THOUSAND; //in Mbps
+                        DefaultAnnotations.Builder annotations = DefaultAnnotations.builder()
+                                .set(AnnotationKeys.PORT_NAME, ifName);
+                        PortDescription desc = new DefaultPortDescription(PortNumber.portNumber(ifNum), state,
+                                Port.Type.FIBER, portSpeed, annotations.build());
+                        ports.add(desc);
+                    }
+                });
+            }
+        } catch (IOException e) {
+            log.error("Failed to to retrieve Interfaces {}", e);
+        }
+
+        return ports;
+    }
+}
diff --git a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoader.java b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoader.java
new file mode 100644
index 0000000..7450a90
--- /dev/null
+++ b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoader.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.cisco.rest;
+
+import org.apache.felix.scr.annotations.Component;
+import org.onosproject.net.driver.AbstractDriverLoader;
+
+/**
+ * Loader for Cisco REST device drivers.
+ */
+@Component(immediate = true)
+public class CiscoRestDriversLoader extends AbstractDriverLoader {
+    public CiscoRestDriversLoader() {
+        super("/cisco-rest-drivers.xml");
+    }
+}
diff --git a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/NxApiRequest.java b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/NxApiRequest.java
new file mode 100644
index 0000000..79a1d58
--- /dev/null
+++ b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/NxApiRequest.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.cisco.rest;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.stream.IntStream;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.protocol.rest.RestSBController;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import javax.ws.rs.core.MediaType;
+
+/**
+ * Generate json-rpc request for Cisco NX-API.
+ */
+public final class NxApiRequest {
+    public enum CommandType {
+        /**
+         * Command outputs are in JSON format.
+         */
+        CLI,
+        /**
+         * Command outputs are in raw ASCII text.
+         */
+        CLI_ASCII,
+    }
+
+    private static final String CMD = "cmd";
+    private static final String VERSION = "version";
+    private static final String JSONRPC = "jsonrpc";
+    private static final String TWO_POINT_ZERO = "2.0";
+    private static final String METHOD = "method";
+    private static final String CLI = "cli";
+    private static final String CLI_ASCII = "cli_ascii";
+    private static final String PARAMS = "params";
+    private static final String ID = "id";
+    private static final int ONE = 1;
+
+    private static final String API_URI = "/ins";
+    private static final String APP_JSON_RPC = "application/json-rpc";
+
+    private NxApiRequest() {
+    }
+
+    /**
+     * Generates a NX-API request message to execute on the Cisco NXOS device.
+     * @param commands list of commands to execute
+     * @param type response message format
+     * @return the NX-API request string
+     */
+    public static String generate(List<String> commands, CommandType type) {
+        ObjectMapper om = new ObjectMapper();
+        ArrayNode aryNode = om.createArrayNode();
+
+        if (commands == null) {
+            return aryNode.toString();
+        }
+
+        IntStream.range(0, commands.size()).forEach(idx -> {
+            ObjectNode parm = om.createObjectNode();
+            parm.put(CMD, commands.get(idx));
+            parm.put(VERSION, ONE);
+
+            ObjectNode node = om.createObjectNode();
+            node.put(JSONRPC, TWO_POINT_ZERO);
+            switch (type) {
+                case CLI_ASCII:
+                    node.put(METHOD, CLI_ASCII);
+                    break;
+                case CLI:
+                default:
+                    node.put(METHOD, CLI);
+                    break;
+            }
+
+            node.set(PARAMS, parm);
+            node.put(ID, idx + 1);
+
+            aryNode.add(node);
+        });
+
+        return aryNode.toString();
+    }
+
+    /**
+     * Sends NX-API request message to the device.
+     * @param controller RestSBController for Cisco REST device
+     * @param deviceId DeviceId for Cisco REST device
+     * @param request NX-API request string
+     * @return the response string
+     */
+    public static String post(RestSBController controller, DeviceId deviceId, String request) {
+        InputStream stream = new ByteArrayInputStream(request.getBytes(StandardCharsets.UTF_8));
+        String response = controller.post(deviceId, API_URI, stream,
+                MediaType.valueOf(APP_JSON_RPC), String.class);
+
+        return response;
+    }
+}
diff --git a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/package-info.java b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/package-info.java
new file mode 100644
index 0000000..80840f4
--- /dev/null
+++ b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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 Cisco REST device drivers.
+ */
+package org.onosproject.drivers.cisco.rest;
\ No newline at end of file
diff --git a/drivers/cisco/rest/src/main/resources/cisco-rest-drivers.xml b/drivers/cisco/rest/src/main/resources/cisco-rest-drivers.xml
new file mode 100644
index 0000000..9b8abdf
--- /dev/null
+++ b/drivers/cisco/rest/src/main/resources/cisco-rest-drivers.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present Open Networking Laboratory
+  ~
+  ~ 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="cisco-rest" manufacturer="Cisco" hwVersion="" swVersion="NXOS">
+        <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
+                   impl="org.onosproject.drivers.cisco.rest.CiscoNxosDeviceDescription"/>
+    </driver>
+</drivers>
diff --git a/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoaderTest.java b/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoaderTest.java
new file mode 100644
index 0000000..838e437
--- /dev/null
+++ b/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoaderTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.cisco.rest;
+
+import org.junit.Before;
+import org.onosproject.net.driver.AbstractDriverLoaderTest;
+
+
+/**
+ * Cisco REST drivers loader test.
+ */
+public class CiscoRestDriversLoaderTest extends AbstractDriverLoaderTest {
+
+    @Before
+    public void setUp() {
+        loader = new CiscoRestDriversLoader();
+    }
+}
diff --git a/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/NxApiRequestTest.java b/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/NxApiRequestTest.java
new file mode 100644
index 0000000..4ef61da
--- /dev/null
+++ b/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/NxApiRequestTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.cisco.rest;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests Cisco NX-API request message generator for Cisco NXOS devices.
+ */
+public class NxApiRequestTest {
+    public static final String REQ_FILE1 = "/testNxApiRequest1.json";
+    public static final String REQ_FILE2 = "/testNxApiRequest2.json";
+
+    @Test
+    public void oneRequestTest() throws IOException {
+        InputStream streamOrig = getClass().getResourceAsStream(REQ_FILE1);
+        ObjectMapper om = new ObjectMapper();
+        JsonNode node1 = om.readTree(streamOrig);
+
+        ArrayList<String> cmds = new ArrayList<>();
+        cmds.add("show interface");
+
+        JsonNode node2 = om.readTree(NxApiRequest.generate(cmds, NxApiRequest.CommandType.CLI));
+
+        assertEquals(node1.toString(), node2.toString());
+    }
+
+    @Test
+    public void manyRequestsTest() throws IOException {
+        InputStream streamOrig = getClass().getResourceAsStream(REQ_FILE2);
+        ObjectMapper om = new ObjectMapper();
+        JsonNode node1 = om.readTree(streamOrig);
+
+        ArrayList<String> cmds = new ArrayList<>();
+        cmds.add("show interface");
+        cmds.add("show ver");
+
+        JsonNode node2 = om.readTree(NxApiRequest.generate(cmds, NxApiRequest.CommandType.CLI));
+
+        assertEquals(node1.toString(), node2.toString());
+    }
+}
diff --git a/drivers/cisco/rest/src/test/resources/testNxApiRequest1.json b/drivers/cisco/rest/src/test/resources/testNxApiRequest1.json
new file mode 100644
index 0000000..84335fe
--- /dev/null
+++ b/drivers/cisco/rest/src/test/resources/testNxApiRequest1.json
@@ -0,0 +1,11 @@
+[
+  {
+    "jsonrpc": "2.0",
+    "method": "cli",
+    "params": {
+      "cmd": "show interface",
+      "version": 1
+    },
+    "id": 1
+  }
+]
\ No newline at end of file
diff --git a/drivers/cisco/rest/src/test/resources/testNxApiRequest2.json b/drivers/cisco/rest/src/test/resources/testNxApiRequest2.json
new file mode 100644
index 0000000..687e4c6
--- /dev/null
+++ b/drivers/cisco/rest/src/test/resources/testNxApiRequest2.json
@@ -0,0 +1,20 @@
+[
+  {
+    "jsonrpc": "2.0",
+    "method": "cli",
+    "params": {
+      "cmd": "show interface",
+      "version": 1
+    },
+    "id": 1
+  },
+  {
+    "jsonrpc": "2.0",
+    "method": "cli",
+    "params": {
+      "cmd": "show ver",
+      "version": 1
+    },
+    "id": 2
+  }
+]
\ No newline at end of file
