diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfProviderConfig.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfProviderConfig.java
new file mode 100644
index 0000000..7ae116e
--- /dev/null
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfProviderConfig.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2015 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.provider.netconf.device.impl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.annotations.Beta;
+import com.google.common.collect.Sets;
+import org.onlab.packet.IpAddress;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.incubator.net.config.basics.ConfigException;
+import org.onosproject.net.config.Config;
+
+import java.util.Set;
+
+/**
+ * Configuration for Netconf provider.
+ */
+@Beta
+public class NetconfProviderConfig extends Config<ApplicationId> {
+
+    public static final String CONFIG_VALUE_ERROR = "Error parsing config value";
+    private static final String IP = "ip";
+    private static final int DEFAULT_TCP_PORT = 830;
+    private static final String PORT = "port";
+    private static final String NAME = "name";
+    private static final String PASSWORD = "password";
+
+    public Set<NetconfDeviceAddress> getDevicesAddresses() throws ConfigException {
+        Set<NetconfDeviceAddress> devicesAddresses = Sets.newHashSet();
+
+        try {
+            for (JsonNode node : array) {
+                String ip = node.path(IP).asText();
+                IpAddress ipAddr = ip.isEmpty() ? null : IpAddress.valueOf(ip);
+                int port = node.path(PORT).asInt(DEFAULT_TCP_PORT);
+                String name = node.path(NAME).asText();
+                String password = node.path(PASSWORD).asText();
+                devicesAddresses.add(new NetconfDeviceAddress(ipAddr, port, name, password));
+
+            }
+        } catch (IllegalArgumentException e) {
+            throw new ConfigException(CONFIG_VALUE_ERROR, e);
+        }
+
+        return devicesAddresses;
+    }
+
+    public class NetconfDeviceAddress {
+        private final IpAddress ip;
+        private final int port;
+        private final String name;
+        private final String password;
+
+        public NetconfDeviceAddress(IpAddress ip, int port, String name, String password) {
+            this.ip = ip;
+            this.port = port;
+            this.name = name;
+            this.password = password;
+        }
+
+        public IpAddress ip() {
+            return ip;
+        }
+
+        public int port() {
+            return port;
+        }
+
+        public String name() {
+            return name;
+        }
+
+        public String password() {
+            return password;
+        }
+    }
+
+
+}
