diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultDpdkConfig.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultDpdkConfig.java
new file mode 100644
index 0000000..afd2d22
--- /dev/null
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultDpdkConfig.java
@@ -0,0 +1,158 @@
+/*
+ * 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.openstacknode.impl;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import org.onosproject.openstacknode.api.DpdkConfig;
+import org.onosproject.openstacknode.api.DpdkInterface;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+/**
+ * Implementation of dpdk config.
+ */
+public final class DefaultDpdkConfig implements DpdkConfig {
+
+    private final DatapathType datapathType;
+    private final String socketDir;
+    private final Collection<DpdkInterface> dpdkIntfs;
+
+    private static final String NOT_NULL_MSG = "% cannot be null";
+
+    private DefaultDpdkConfig(DatapathType datapathType,
+                             String socketDir,
+                             Collection<DpdkInterface> dpdkIntfs) {
+        this.datapathType = datapathType;
+        this.socketDir = socketDir;
+        this.dpdkIntfs = dpdkIntfs;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof DefaultDpdkConfig)) {
+            return false;
+        }
+        DefaultDpdkConfig that = (DefaultDpdkConfig) o;
+        return datapathType == that.datapathType &&
+                Objects.equals(socketDir, that.socketDir) &&
+                Objects.equals(dpdkIntfs, that.dpdkIntfs);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(datapathType,
+                socketDir,
+                dpdkIntfs);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("datapathType", datapathType)
+                .add("socketDir", socketDir)
+                .add("dpdkIntfs", dpdkIntfs)
+                .toString();
+    }
+
+    /**
+     * Returns the data path type.
+     *
+     * @return data path type; normal or netdev
+     */
+    @Override
+    public DatapathType datapathType() {
+        return datapathType;
+    }
+
+    /**
+     * Returns socket directory which dpdk port bound to.
+     *
+     * @return socket directory
+     */
+    @Override
+    public String socketDir() {
+        return socketDir;
+    }
+
+    /**
+     * Returns a collection of dpdk interfaces.
+     *
+     * @return dpdk interfaces
+     */
+    @Override
+    public Collection<DpdkInterface> dpdkIntfs() {
+        if (dpdkIntfs == null) {
+            return new ArrayList<>();
+        }
+        return ImmutableList.copyOf(dpdkIntfs);
+    }
+
+    /**
+     * Returns new builder instance.
+     *
+     * @return dpdk config builder instance
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Builder of DpdkConfig instance.
+     */
+    public static final class Builder implements DpdkConfig.Builder {
+        private DatapathType datapathType;
+        private String socketDir;
+        private Collection<DpdkInterface> dpdkIntfs;
+
+        private Builder() {
+
+        }
+
+        @Override
+        public DpdkConfig build() {
+            checkArgument(datapathType != null, NOT_NULL_MSG, "datapathType");
+            return new DefaultDpdkConfig(datapathType,
+                    socketDir,
+                    dpdkIntfs);
+        }
+
+        @Override
+        public Builder datapathType(DatapathType datapathType) {
+            this.datapathType = datapathType;
+            return this;
+        }
+
+        @Override
+        public Builder socketDir(String socketDir) {
+            this.socketDir = socketDir;
+            return this;
+        }
+
+        @Override
+        public Builder dpdkIntfs(Collection<DpdkInterface> dpdkIntfs) {
+            this.dpdkIntfs = dpdkIntfs;
+            return this;
+        }
+    }
+}
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultDpdkInterface.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultDpdkInterface.java
new file mode 100644
index 0000000..c442876
--- /dev/null
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultDpdkInterface.java
@@ -0,0 +1,202 @@
+/*
+ * 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.openstacknode.impl;
+
+import com.google.common.base.MoreObjects;
+import org.onosproject.openstacknode.api.DpdkInterface;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+
+/**
+ * Implementation of dpdk interface.
+ */
+public final class DefaultDpdkInterface implements DpdkInterface {
+    private final String deviceName;
+    private final String intf;
+    private final String pciAddress;
+    private final Type type;
+    private final Long mtu;
+    private static final String NOT_NULL_MSG = "% cannot be null";
+
+    private DefaultDpdkInterface(String deviceName,
+                                 String intf,
+                                 String pciAddress,
+                                 Type type,
+                                 Long mtu) {
+        this.deviceName = deviceName;
+        this.intf = intf;
+        this.pciAddress = pciAddress;
+        this.type = type;
+        this.mtu = mtu;
+    }
+
+    /**
+     * Returns the name of the device where the dpdk interface is.
+     *
+     * @return device name
+     */
+    @Override
+    public String deviceName() {
+        return deviceName;
+    }
+
+    /**
+     * Returns the name of the dpdk interface.
+     *
+     * @return dpdk interface name
+     */
+    @Override
+    public String intf() {
+        return intf;
+    }
+
+    /**
+     * Returns the dpdk device arguments of this dpdk port.
+     * ex) "0000:85:00.1"
+     *
+     * @return pci address
+     */
+    @Override
+    public String pciAddress() {
+        return pciAddress;
+    }
+
+    /**
+     * Returns the dpdk interface type.
+     *
+     * @return type
+     */
+    @Override
+    public Type type() {
+        return type;
+    }
+
+    /**
+     * Returns the mtu size.
+     *
+     * @return mtu
+     */
+    @Override
+    public Long mtu() {
+        return mtu;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("deviceName", deviceName)
+                .add("intf", intf)
+                .add("pciAddress", pciAddress)
+                .add("type", type)
+                .add("mtu", mtu)
+                .toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(deviceName,
+                intf,
+                pciAddress,
+                type,
+                mtu);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof DefaultDpdkInterface)) {
+            return false;
+        }
+        DefaultDpdkInterface that = (DefaultDpdkInterface) o;
+        return Objects.equals(deviceName, that.deviceName) &&
+                Objects.equals(intf, that.intf) &&
+                Objects.equals(pciAddress, that.pciAddress) &&
+                type == that.type &&
+                Objects.equals(mtu, that.mtu);
+    }
+
+    /**
+     * Returns new builder instance.
+     *
+     * @return dpdk interface builder instance.
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Builder of dpdk interface instance.
+     */
+    public static final class Builder implements DpdkInterface.Builder {
+        private String deviceName;
+        private String intf;
+        private String pciAddress;
+        private Type type;
+        private Long mtu = DpdkInterface.DEFAULT_MTU_SIZE;
+
+        private Builder() {
+        }
+
+        @Override
+        public DpdkInterface build() {
+            checkArgument(deviceName != null, NOT_NULL_MSG, "deviceName");
+            checkArgument(intf != null, NOT_NULL_MSG, "intf");
+            checkArgument(pciAddress != null, NOT_NULL_MSG, "pciAddress");
+            checkArgument(type != null, NOT_NULL_MSG, "type");
+
+            return new DefaultDpdkInterface(deviceName,
+                    intf,
+                    pciAddress,
+                    type,
+                    mtu);
+        }
+
+        @Override
+        public Builder deviceName(String deviceName) {
+            this.deviceName = deviceName;
+            return this;
+        }
+
+        @Override
+        public Builder intf(String name) {
+            this.intf = name;
+            return this;
+        }
+
+        @Override
+        public Builder pciAddress(String pciAddress) {
+            this.pciAddress = pciAddress;
+            return this;
+        }
+
+        @Override
+        public Builder type(Type type) {
+            this.type = type;
+            return this;
+        }
+
+        @Override
+        public Builder mtu(Long mtu) {
+            this.mtu = mtu;
+            return this;
+        }
+    }
+}
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
index 07d71de..4337355 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
@@ -78,11 +78,12 @@
 import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_TUNNEL_DST;
 import static org.onosproject.openstacknode.api.Constants.DEFAULT_TUNNEL;
 import static org.onosproject.openstacknode.api.Constants.INTEGRATION_BRIDGE;
+import static org.onosproject.openstacknode.api.DpdkConfig.DatapathType.NETDEV;
 import static org.onosproject.openstacknode.api.NodeState.COMPLETE;
 import static org.onosproject.openstacknode.api.NodeState.DEVICE_CREATED;
 import static org.onosproject.openstacknode.api.NodeState.INCOMPLETE;
 import static org.onosproject.openstacknode.api.NodeState.INIT;
-import static org.onosproject.openstacknode.api.OpenstackNode.DatapathType.NETDEV;
+
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.CONTROLLER;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
 import static org.onosproject.openstacknode.api.OpenstackNodeService.APP_ID;
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
index f30611b..368deed 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
@@ -28,6 +28,8 @@
 import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.openstacknode.api.DefaultOpenstackAuth;
 import org.onosproject.openstacknode.api.DefaultOpenstackNode;
+import org.onosproject.openstacknode.api.DpdkConfig;
+import org.onosproject.openstacknode.api.DpdkInterface;
 import org.onosproject.openstacknode.api.NodeState;
 import org.onosproject.openstacknode.api.OpenstackNode;
 import org.onosproject.openstacknode.api.OpenstackNodeEvent;
@@ -83,9 +85,13 @@
             .register(DefaultOpenstackNode.class)
             .register(OpenstackNode.NodeType.class)
             .register(NodeState.class)
-            .register(OpenstackNode.DatapathType.class)
+            .register(DpdkConfig.class)
+            .register(DefaultDpdkConfig.class)
+            .register(DpdkConfig.DatapathType.class)
             .register(OpenstackPhyInterface.class)
             .register(DefaultOpenstackPhyInterface.class)
+            .register(DpdkInterface.class)
+            .register(DefaultDpdkInterface.class)
             .register(ControllerInfo.class)
             .register(DefaultOpenstackAuth.class)
             .register(DefaultOpenstackAuth.Perspective.class)
