diff --git a/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbPort.java b/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbPort.java
new file mode 100644
index 0000000..3c04f6a
--- /dev/null
+++ b/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbPort.java
@@ -0,0 +1,86 @@
+/*
+ * 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.ovsdb.controller;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Objects;
+
+/**
+ * The class representing a ovsdb port. This class is immutable.
+ */
+public final class OvsdbPort {
+
+    private final OvsdbPortNumber portNumber;
+    private final OvsdbPortName portName;
+
+    /**
+     * Constructor from a OvsdbPortNumber portNumber, OvsdbPortName portName.
+     *
+     * @param portNumber the portNumber to use
+     * @param portName the portName to use
+     */
+    public OvsdbPort(OvsdbPortNumber portNumber, OvsdbPortName portName) {
+        checkNotNull(portNumber, "portNumber is not null");
+        checkNotNull(portName, "portName is not null");
+        this.portNumber = portNumber;
+        this.portName = portName;
+    }
+
+    /**
+     * Gets the port number of the port.
+     *
+     * @return the port number of the port
+     */
+    public OvsdbPortNumber portNumber() {
+        return portNumber;
+    }
+
+    /**
+     * Gets the port name of the port.
+     *
+     * @return the port name of the port
+     */
+    public OvsdbPortName portName() {
+        return portName;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(portNumber, portName);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof OvsdbPort) {
+            final OvsdbPort otherOvsdbPort = (OvsdbPort) obj;
+            return Objects.equals(this.portNumber, otherOvsdbPort.portNumber)
+                    && Objects.equals(this.portName, otherOvsdbPort.portName);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("portNumber", String.valueOf(portNumber.value()))
+                .add("portName", portName.value()).toString();
+    }
+}
