[ONOS-2447]RFC7047's API and its implementation and five main tables.
provide RFC7047's API and its implementation, and five main table which
contain Bridge, Controller, Interface, Open_vSwitch and Port 

Change-Id: I9e995a056fd55c986f5866c85ac712f1792cff4f
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/Callback.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/Callback.java
new file mode 100644
index 0000000..f7ec8b6
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/Callback.java
@@ -0,0 +1,50 @@
+/*
+ * 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.rfc.jsonrpc;
+
+import java.util.List;
+
+import org.onosproject.ovsdb.rfc.message.UpdateNotification;
+
+/**
+ * The callback function interface will be used when the server send to the
+ * client report changes.
+ */
+public interface Callback {
+    /**
+     * The "update" notification is sent by the server to the client to report
+     * changes in tables that are being monitored following a "*monitor"
+     * request.
+     * @param updateNotification the information of the update
+     */
+    void update(UpdateNotification updateNotification);
+
+    /**
+     * The "locked" notification is provided to notify a client that it has been
+     * granted a lock that it had previously requested with the "lock" method.
+     * @param ids the locked ids
+     */
+    void locked(List<String> ids);
+
+    /**
+     * The "stolen" notification is provided to notify a client, which had
+     * previously obtained a lock, that another client has stolen ownership of
+     * that lock.
+     * @param ids the stolen ids
+     */
+    void stolen(List<String> ids);
+
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonReadContext.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonReadContext.java
new file mode 100644
index 0000000..8033f65
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonReadContext.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.rfc.jsonrpc;
+
+import java.util.Stack;
+
+/**
+ * Context for decode parameters.
+ */
+public class JsonReadContext {
+    private Stack<Byte> bufStack;
+    private boolean isStartMatch;
+    private int lastReadBytes;
+
+    /**
+     * Constructs a JsonReadContext object. This class only need initial
+     * parameter value for the readToJsonNode method of JsonRpcReaderUtil
+     * entity.
+     */
+    public JsonReadContext() {
+        bufStack = new Stack<Byte>();
+        isStartMatch = false;
+        lastReadBytes = 0;
+    }
+
+    /**
+     * Return bufStack.
+     * @return bufStack
+     */
+    public Stack<Byte> getBufStack() {
+        return bufStack;
+    }
+
+    /**
+     * Set bufStack, used for match the braces and double quotes.
+     * @param bufStack Stack of Byte
+     */
+    public void setBufStack(Stack<Byte> bufStack) {
+        this.bufStack = bufStack;
+    }
+
+    /**
+     * Return isStartMatch.
+     * @return isStartMatch
+     */
+    public boolean isStartMatch() {
+        return isStartMatch;
+    }
+
+    /**
+     * Set isStartMatch.
+     * @param isStartMatch mark whether the matching has started
+     */
+    public void setStartMatch(boolean isStartMatch) {
+        this.isStartMatch = isStartMatch;
+    }
+
+    /**
+     * Return lastReadBytes.
+     * @return lastReadBytes
+     */
+    public int getLastReadBytes() {
+        return lastReadBytes;
+    }
+
+    /**
+     * Set lastReadBytes.
+     * @param lastReadBytes the bytes for last decoding incomplete record
+     */
+    public void setLastReadBytes(int lastReadBytes) {
+        this.lastReadBytes = lastReadBytes;
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonRpcRequest.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonRpcRequest.java
new file mode 100644
index 0000000..ecff096
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonRpcRequest.java
@@ -0,0 +1,111 @@
+/*
+ * 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.rfc.jsonrpc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.List;
+import java.util.Objects;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Json Rpc Request information that include id,method,params.
+ */
+public class JsonRpcRequest {
+
+    private final String id;
+    private final String method;
+    private final List<Object> params;
+
+    /**
+     * JsonRpcRequest Constructor.
+     * @param id the id node of request information
+     * @param method the method node of request information
+     */
+    public JsonRpcRequest(String id, String method) {
+        checkNotNull(id, "id cannot be null");
+        checkNotNull(method, "method cannot be null");
+        this.id = id;
+        this.method = method;
+        this.params = Lists.newArrayList();
+    }
+
+    /**
+     * JsonRpcRequest Constructor.
+     * @param id the id node of request information
+     * @param method the method node of request information
+     * @param params the params node of request information
+     */
+    public JsonRpcRequest(String id, String method, List<Object> params) {
+        checkNotNull(id, "id cannot be null");
+        checkNotNull(method, "method cannot be null");
+        checkNotNull(params, "params cannot be null");
+        this.id = id;
+        this.method = method;
+        this.params = params;
+    }
+
+    /**
+     * Returns id.
+     * @return id
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * Returns method.
+     * @return method
+     */
+    public String getMethod() {
+        return method;
+    }
+
+    /**
+     * Returns params.
+     * @return params
+     */
+    public List<Object> getParams() {
+        return params;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, method, params);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof JsonRpcRequest) {
+            final JsonRpcRequest other = (JsonRpcRequest) obj;
+            return Objects.equals(this.id, other.id)
+                    && Objects.equals(this.method, other.method)
+                    && Objects.equals(this.params, other.params);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("id", id).add("method", method)
+                .add("params", params).toString();
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonRpcResponse.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonRpcResponse.java
new file mode 100644
index 0000000..a2f4541
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/JsonRpcResponse.java
@@ -0,0 +1,122 @@
+/*
+ * 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.rfc.jsonrpc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.List;
+import java.util.Objects;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Json Rpc Response information that include id,error,result.
+ */
+public class JsonRpcResponse {
+
+    private final String id;
+    private final String error;
+    private final List<Object> result;
+
+    /**
+     * JsonRpcResponse Constructor.
+     * @param id the id node of response information
+     */
+    public JsonRpcResponse(String id) {
+        checkNotNull(id, "id cannot be null");
+        this.id = id;
+        this.error = null;
+        this.result = Lists.newArrayList();
+    }
+
+    /**
+     * JsonRpcResponse Constructor.
+     * @param id the id node of response information
+     * @param error the error node of response information
+     */
+    public JsonRpcResponse(String id, String error) {
+        checkNotNull(id, "id cannot be null");
+        checkNotNull(error, "error cannot be null");
+        this.id = id;
+        this.error = error;
+        this.result = Lists.newArrayList();
+    }
+
+    /**
+     * JsonRpcResponse Constructor.
+     * @param id the id node of response information
+     * @param error the error node of response information
+     * @param result the result node of response information
+     */
+    public JsonRpcResponse(String id, String error, List<Object> result) {
+        checkNotNull(id, "id cannot be null");
+        checkNotNull(error, "error cannot be null");
+        checkNotNull(result, "result cannot be null");
+        this.id = id;
+        this.error = error;
+        this.result = result;
+    }
+
+    /**
+     * Returns id.
+     * @return id
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * Returns error.
+     * @return error
+     */
+    public String getError() {
+        return error;
+    }
+
+    /**
+     * Returns result.
+     * @return result
+     */
+    public List<Object> getResult() {
+        return result;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, error, result);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof JsonRpcResponse) {
+            final JsonRpcResponse other = (JsonRpcResponse) obj;
+            return Objects.equals(this.id, other.id)
+                    && Objects.equals(this.error, other.error)
+                    && Objects.equals(this.result, other.result);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("id", id).add("error", error)
+                .add("result", result).toString();
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRPC.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRPC.java
new file mode 100644
index 0000000..5d08b14
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/OvsdbRPC.java
@@ -0,0 +1,74 @@
+/*
+ * 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.rfc.jsonrpc;
+
+import java.util.List;
+
+import org.onosproject.ovsdb.rfc.operations.Operation;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * The following interface describe the RPC7047's methods that are supported.
+ */
+public interface OvsdbRPC {
+
+    /**
+     * This operation retrieves a database-schema that describes hosted database
+     * db-name.
+     * @param dbnames database name
+     * @return ListenableFuture of JsonNode
+     */
+    ListenableFuture<JsonNode> getSchema(List<String> dbnames);
+
+    /**
+     * The "echo" method can be used by both clients and servers to verify the
+     * liveness of a database connection.
+     * @return return info
+     */
+    ListenableFuture<List<String>> echo();
+
+    /**
+     * The "monitor" request enables a client to replicate tables or subsets of
+     * tables within an OVSDB database by requesting notifications of changes to
+     * those tables and by receiving the complete initial state of a table or a
+     * subset of a table.
+     * @param dbSchema databse schema
+     * @param monitorId a id for monitor
+     * @return ListenableFuture of JsonNode
+     */
+    ListenableFuture<JsonNode> monitor(DatabaseSchema dbSchema, String monitorId);
+
+    /**
+     * This operation retrieves an array whose elements are the names of the
+     * databases that can be accessed over this management protocol connection.
+     * @return database names
+     */
+    ListenableFuture<List<String>> listDbs();
+
+    /**
+     * This RPC method causes the database server to execute a series of
+     * operations in the specified order on a given database.
+     * @param dbSchema database schema
+     * @param operations the operations to execute
+     * @return result the transact result
+     */
+    ListenableFuture<List<JsonNode>> transact(DatabaseSchema dbSchema,
+                                              List<Operation> operations);
+
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java
new file mode 100644
index 0000000..bd589f0
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java
@@ -0,0 +1,559 @@
+/*
+ * 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.rfc.table;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.onosproject.ovsdb.rfc.notation.Column;
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
+import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
+
+/**
+ * This class provides operations of Bridge Table.
+ */
+public class Bridge extends AbstractOvsdbTableService {
+
+    /**
+     * Bridge table column name.
+     */
+    public enum BridgeColumn {
+        NAME("name"), DATAPATHTYPE("datapath_type"), DATAPATHID("datapath_id"),
+        STPENABLE("stpenable"), PORTS("ports"), MIRRORS("mirrors"),
+        NETFLOW("netflow"), SFLOW("sflow"), IPFIX("ipfix"),
+        CONTROLLER("controller"), PROTOCOLS("protocols"),
+        FAILMODE("fail_mode"), STATUS("status"), OTHERCONFIG("other_config"),
+        EXTERNALIDS("external_ids"), FLOODVLANS("flood_vlans"),
+        FLOWTABLES("flow_tables");
+
+        private final String columnName;
+
+        private BridgeColumn(String columnName) {
+            this.columnName = columnName;
+        }
+
+        /**
+         * Returns the table column name for BridgeColumn.
+         * @return the table column name
+         */
+        public String columnName() {
+            return columnName;
+        }
+    }
+
+    /**
+     * Constructs a Bridge object. Generate Bridge Table Description.
+     * @param dbSchema DatabaseSchema
+     * @param row Row
+     */
+    public Bridge(DatabaseSchema dbSchema, Row row) {
+        super(dbSchema, row, OvsdbTable.BRIDGE, VersionNum.VERSION100);
+    }
+
+    /**
+     * Get the Column entity which column name is "name" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "name"
+     */
+    public Column getNameColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.NAME
+                                                                     .columnName(),
+                                                             "getNameColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "name" to the Row entity of
+     * attributes.
+     * @param name the column data which column name is "name"
+     */
+    public void setName(String name) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.NAME
+                                                                     .columnName(),
+                                                             "setName",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, name);
+    }
+
+    /**
+     * Get the column data which column name is "name" from the Row entity of
+     * attributes.
+     * @return the column data which column name is "name"
+     */
+    public String getName() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.NAME
+                                                                     .columnName(),
+                                                             "getName",
+                                                             VersionNum.VERSION100);
+        return (String) super.getDataHandler(columndesc);
+    }
+
+    /**
+     * Get the Column entity which column name is "datapath_type" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "datapath_type"
+     */
+    public Column getDatapathTypeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.DATAPATHTYPE
+                                                                     .columnName(),
+                                                             "getDatapathTypeColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "datapath_type" to the Row
+     * entity of attributes.
+     * @param datapathType the column data which column name is "datapath_type"
+     */
+    public void setDatapathType(String datapathType) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.DATAPATHTYPE
+                                                                     .columnName(),
+                                                             "setDatapathType",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, datapathType);
+    }
+
+    /**
+     * Get the Column entity which column name is "datapath_id" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "datapath_id"
+     */
+    public Column getDatapathIdColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.DATAPATHID
+                                                                     .columnName(),
+                                                             "getDatapathIdColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "datapath_id" to the Row entity
+     * of attributes.
+     * @param datapathId the column data which column name is "datapath_id"
+     */
+    public void setDatapathId(Set<String> datapathId) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.DATAPATHID
+                                                                     .columnName(),
+                                                             "setDatapathId",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, datapathId);
+    }
+
+    /**
+     * Get the Column entity which column name is "stpenable" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "stpenable"
+     */
+    public Column getStpEnableColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.STPENABLE
+                                                                     .columnName(),
+                                                             "getStpEnableColumn",
+                                                             VersionNum.VERSION620);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "stpenable" to the Row entity of
+     * attributes.
+     * @param stpenable the column data which column name is "stpenable"
+     */
+    public void setStpEnable(Boolean stpenable) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.STPENABLE
+                                                                     .columnName(),
+                                                             "setStpEnable",
+                                                             VersionNum.VERSION620);
+        super.setDataHandler(columndesc, stpenable);
+    }
+
+    /**
+     * Get the Column entity which column name is "ports" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "ports"
+     */
+    public Column getPortsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.PORTS
+                                                                     .columnName(),
+                                                             "getPortsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ports" to the Row entity of
+     * attributes.
+     * @param ports the column data which column name is "ports"
+     */
+    public void setPorts(Set<UUID> ports) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.PORTS
+                                                                     .columnName(),
+                                                             "setPorts",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, ports);
+    }
+
+    /**
+     * Get the Column entity which column name is "mirrors" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "mirrors"
+     */
+    public Column getMirrorsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.MIRRORS
+                                                                     .columnName(),
+                                                             "getMirrorsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "mirrors" to the Row entity of
+     * attributes.
+     * @param mirrors the column data which column name is "mirrors"
+     */
+    public void setMirrors(Set<UUID> mirrors) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.MIRRORS
+                                                                     .columnName(),
+                                                             "setMirrors",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, mirrors);
+    }
+
+    /**
+     * Get the Column entity which column name is "netflow" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "netflow"
+     */
+    public Column getNetflowColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.NETFLOW
+                                                                     .columnName(),
+                                                             "getNetflowColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "netflow" to the Row entity of
+     * attributes.
+     * @param netflow the column data which column name is "netflow"
+     */
+    public void setNetflow(Set<UUID> netflow) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.NETFLOW
+                                                                     .columnName(),
+                                                             "setNetflow",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, netflow);
+    }
+
+    /**
+     * Get the Column entity which column name is "sflow" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "sflow"
+     */
+    public Column getSflowColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.SFLOW
+                                                                     .columnName(),
+                                                             "getSflowColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "sflow" to the Row entity of
+     * attributes.
+     * @param sflow the column data which column name is "sflow"
+     */
+    public void setSflow(Set<UUID> sflow) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.SFLOW
+                                                                     .columnName(),
+                                                             "setSflow",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, sflow);
+    }
+
+    /**
+     * Get the Column entity which column name is "ipfix" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "ipfix"
+     */
+    public Column getIpfixColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.IPFIX
+                                                                     .columnName(),
+                                                             "getIpfixColumn",
+                                                             VersionNum.VERSION710);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ipfix" to the Row entity of
+     * attributes.
+     * @param ipfix the column data which column name is "ipfix"
+     */
+    public void setIpfix(Set<UUID> ipfix) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.IPFIX
+                                                                     .columnName(),
+                                                             "setIpfix",
+                                                             VersionNum.VERSION710);
+        super.setDataHandler(columndesc, ipfix);
+    }
+
+    /**
+     * Get the Column entity which column name is "controller" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "controller"
+     */
+    public Column getControllerColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.CONTROLLER
+                                                                     .columnName(),
+                                                             "getControllerColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "controller" to the Row entity
+     * of attributes.
+     * @param controller the column data which column name is "controller"
+     */
+    public void setController(Set<UUID> controller) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.CONTROLLER
+                                                                     .columnName(),
+                                                             "setController",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, controller);
+    }
+
+    /**
+     * Get the Column entity which column name is "protocols" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "protocols"
+     */
+    public Column getProtocolsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.PROTOCOLS
+                                                                     .columnName(),
+                                                             "getProtocolsColumn",
+                                                             VersionNum.VERSION6111);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "protocols" to the Row entity of
+     * attributes.
+     * @param protocols the column data which column name is "protocols"
+     */
+    public void setProtocols(Set<String> protocols) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.PROTOCOLS
+                                                                     .columnName(),
+                                                             "setProtocols",
+                                                             VersionNum.VERSION6111);
+        super.setDataHandler(columndesc, protocols);
+    }
+
+    /**
+     * Get the Column entity which column name is "fail_mode" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "fail_mode"
+     */
+    public Column getFailModeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.FAILMODE
+                                                                     .columnName(),
+                                                             "getFailModeColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "fail_mode" to the Row entity of
+     * attributes.
+     * @param failMode the column data which column name is "fail_mode"
+     */
+    public void setFailMode(Set<String> failMode) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.FAILMODE
+                                                                     .columnName(),
+                                                             "setFailMode",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, failMode);
+    }
+
+    /**
+     * Get the Column entity which column name is "status" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "status"
+     */
+    public Column getStatusColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.STATUS
+                                                                     .columnName(),
+                                                             "getStatusColumn",
+                                                             VersionNum.VERSION620);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "status" to the Row entity of
+     * attributes.
+     * @param status the column data which column name is "status"
+     */
+    public void setStatus(Map<String, String> status) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.STATUS
+                                                                     .columnName(),
+                                                             "setStatus",
+                                                             VersionNum.VERSION620);
+        super.setDataHandler(columndesc, status);
+    }
+
+    /**
+     * Get the Column entity which column name is "other_config" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "other_config"
+     */
+    public Column getOtherConfigColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "getOtherConfigColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "other_config" to the Row entity
+     * of attributes.
+     * @param otherConfig the column data which column name is "other_config"
+     */
+    public void setOtherConfig(Map<String, String> otherConfig) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "setOtherConfig",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, otherConfig);
+    }
+
+    /**
+     * Get the Column entity which column name is "external_ids" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "external_ids"
+     */
+    public Column getExternalIdsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "getExternalIdsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "external_ids" to the Row entity
+     * of attributes.
+     * @param externalIds the column data which column name is "external_ids"
+     */
+    public void setExternalIds(Map<String, String> externalIds) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "setExternalIds",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, externalIds);
+    }
+
+    /**
+     * Get the Column entity which column name is "flood_vlans" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "flood_vlans"
+     */
+    public Column getFloodVlansColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.FLOODVLANS
+                                                                     .columnName(),
+                                                             "getFloodVlansColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "flood_vlans" to the Row entity
+     * of attributes.
+     * @param vlans the column data which column name is "flood_vlans"
+     */
+    public void setFloodVlans(Set<Long> vlans) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.FLOODVLANS
+                                                                     .columnName(),
+                                                             "setFloodVlans",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, vlans);
+    }
+
+    /**
+     * Get the Column entity which column name is "flow_tables" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "flow_tables"
+     */
+    public Column getFlowTablesColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.FLOWTABLES
+                                                                     .columnName(),
+                                                             "getFlowTablesColumn",
+                                                             VersionNum.VERSION650);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "flow_tables" to the Row entity
+     * of attributes.
+     * @param flowTables the column data which column name is "flow_tables"
+     */
+    public void setFlowTables(Map<Long, UUID> flowTables) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             BridgeColumn.FLOWTABLES
+                                                                     .columnName(),
+                                                             "setFlowTables",
+                                                             VersionNum.VERSION650);
+        super.setDataHandler(columndesc, flowTables);
+    }
+
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Controller.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Controller.java
new file mode 100644
index 0000000..912526c
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Controller.java
@@ -0,0 +1,556 @@
+/*
+ * 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.rfc.table;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.onosproject.ovsdb.rfc.notation.Column;
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
+import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
+
+/**
+ * This class provides operations of Controller Table.
+ */
+public class Controller extends AbstractOvsdbTableService {
+
+    /**
+     * Controller table column name.
+     */
+    public enum ControllerColumn {
+        TARGET("target"), BURSTLIMIT("controller_burst_limit"),
+        RATELIMIT("controller_rate_limit"), CONNECTIONMODE("connection_mode"),
+        ENABLEASYNCMESSAGES("enable_async_messages"),
+        EXTERNALIDS("external_ids"), LOCALNETMASK("local_netmask"),
+        LOCALGATEWAY("local_gateway"), STATUS("status"), ROLE("role"),
+        INACTIVITYPROBE("inactivity_probe"), ISCONNECTED("is_connected"),
+        OTHERCONFIG("other_config"), MAXBACKOFF("max_backoff"),
+        LOCALIP("local_ip"),
+        DISCOVERUPDATERESOLVCONF("discover_update_resolv_conf"),
+        DISCOVERACCEPTREGEX("discover_accept_regex");
+
+        private final String columnName;
+
+        private ControllerColumn(String columnName) {
+            this.columnName = columnName;
+        }
+
+        /**
+         * Returns the table column name for ControllerColumn.
+         * @return the table column name
+         */
+        public String columnName() {
+            return columnName;
+        }
+    }
+
+    /**
+     * Constructs a Controller object. Generate Controller Table Description.
+     * @param dbSchema DatabaseSchema
+     * @param row Row
+     */
+    public Controller(DatabaseSchema dbSchema, Row row) {
+        super(dbSchema, row, OvsdbTable.CONTROLLER, VersionNum.VERSION100);
+    }
+
+    /**
+     * Get the Column entity which column name is "target" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "target"
+     */
+    public Column getTargetColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.TARGET
+                                                                     .columnName(),
+                                                             "getTargetColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "target" to the Row entity of
+     * attributes.
+     * @param target the column data which column name is "target"
+     */
+    public void setTarget(String target) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.TARGET
+                                                                     .columnName(),
+                                                             "setTarget",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, target);
+    }
+
+    /**
+     * Get the Column entity which column name is "controller_burst_limit" from
+     * the Row entity of attributes.
+     * @return the Column entity which column name is "controller_burst_limit"
+     */
+    public Column getBurstLimitColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.BURSTLIMIT
+                                                                     .columnName(),
+                                                             "getBurstLimitColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "controller_burst_limit" to the
+     * Row entity of attributes.
+     * @param burstLimit the column data which column name is
+     *            "controller_burst_limit"
+     */
+    public void setBurstLimit(Long burstLimit) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.BURSTLIMIT
+                                                                     .columnName(),
+                                                             "setBurstLimit",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, burstLimit);
+    }
+
+    /**
+     * Get the Column entity which column name is "controller_rate_limit" from
+     * the Row entity of attributes.
+     * @return the Column entity which column name is "controller_rate_limit"
+     */
+    public Column getRateLimitColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.RATELIMIT
+                                                                     .columnName(),
+                                                             "getRateLimitColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "controller_rate_limit" to the
+     * Row entity of attributes.
+     * @param rateLimit the column data which column name is
+     *            "controller_rate_limit"
+     */
+    public void setRateLimit(Long rateLimit) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             "controller_rate_limit",
+                                                             "setRateLimit",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, rateLimit);
+    }
+
+    /**
+     * Get the Column entity which column name is "connection_mode" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "connection_mode"
+     */
+    public Column getConnectionModeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             "connection_mode",
+                                                             "getConnectionModeColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "connection_mode" to the Row
+     * entity of attributes.
+     * @param connectionMode the column data which column name is
+     *            "connection_mode"
+     */
+    public void setConnectionMode(Set<String> connectionMode) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.RATELIMIT
+                                                                     .columnName(),
+                                                             "setConnectionMode",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, connectionMode);
+    }
+
+    /**
+     * Get the Column entity which column name is "enable_async_messages" from
+     * the Row entity of attributes.
+     * @return the Column entity which column name is "enable_async_messages"
+     */
+    public Column getEnableAsyncMessagesColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.ENABLEASYNCMESSAGES
+                                                                     .columnName(),
+                                                             "getEnableAsyncMessagesColumn",
+                                                             VersionNum.VERSION670);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "enable_async_messages" to the
+     * Row entity of attributes.
+     * @param enableAsyncMessages the column data which column name is
+     *            "enable_async_messages"
+     */
+    public void setEnableAsyncMessages(Set<Boolean> enableAsyncMessages) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.ENABLEASYNCMESSAGES
+                                                                     .columnName(),
+                                                             "setEnableAsyncMessages",
+                                                             VersionNum.VERSION670);
+        super.setDataHandler(columndesc, enableAsyncMessages);
+    }
+
+    /**
+     * Get the Column entity which column name is "external_ids" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "external_ids"
+     */
+    public Column getExternalIdsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "getExternalIdsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "external_ids" to the Row entity
+     * of attributes.
+     * @param externalIds the column data which column name is "external_ids"
+     */
+    public void setExternalIds(Map<String, String> externalIds) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "setExternalIds",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, externalIds);
+    }
+
+    /**
+     * Get the Column entity which column name is "local_netmask" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "local_netmask"
+     */
+    public Column getLocalNetmaskColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.LOCALNETMASK
+                                                                     .columnName(),
+                                                             "getLocalNetmaskColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "local_netmask" to the Row
+     * entity of attributes.
+     * @param localNetmask the column data which column name is "local_netmask"
+     */
+    public void setLocalNetmask(Set<String> localNetmask) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.LOCALNETMASK
+                                                                     .columnName(),
+                                                             "setLocalNetmask",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, localNetmask);
+    }
+
+    /**
+     * Get the Column entity which column name is "local_gateway" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "local_gateway"
+     */
+    public Column getLocalGatewayColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.LOCALGATEWAY
+                                                                     .columnName(),
+                                                             "getLocalGatewayColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "local_gateway" to the Row
+     * entity of attributes.
+     * @param localGateway the column data which column name is "local_gateway"
+     */
+    public void setLocalGateway(Set<String> localGateway) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.LOCALGATEWAY
+                                                                     .columnName(),
+                                                             "setLocalGateway",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, localGateway);
+    }
+
+    /**
+     * Get the Column entity which column name is "status" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "status"
+     */
+    public Column getStatusColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.STATUS
+                                                                     .columnName(),
+                                                             "getStatusColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "status" to the Row entity of
+     * attributes.
+     * @param status the column data which column name is "status"
+     */
+    public void setStatus(Map<String, String> status) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.STATUS
+                                                                     .columnName(),
+                                                             "setStatus",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, status);
+    }
+
+    /**
+     * Get the Column entity which column name is "role" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "role"
+     */
+    public Column getRoleColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.ROLE
+                                                                     .columnName(),
+                                                             "getRoleColumn",
+                                                             VersionNum.VERSION110);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "role" to the Row entity of
+     * attributes.
+     * @param role the column data which column name is "role"
+     */
+    public void setRole(Set<String> role) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.ROLE
+                                                                     .columnName(),
+                                                             "setRole",
+                                                             VersionNum.VERSION110);
+        super.setDataHandler(columndesc, role);
+    }
+
+    /**
+     * Get the Column entity which column name is "inactivity_probe" from the
+     * Row entity of attributes.
+     * @return the Column entity which column name is "inactivity_probe"
+     */
+    public Column getInactivityProbeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.INACTIVITYPROBE
+                                                                     .columnName(),
+                                                             "getInactivityProbeColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "inactivity_probe" to the Row
+     * entity of attributes.
+     * @param inactivityProbe the column data which column name is
+     *            "inactivity_probe"
+     */
+    public void setInactivityProbe(Set<Long> inactivityProbe) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.INACTIVITYPROBE
+                                                                     .columnName(),
+                                                             "setInactivityProbe",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, inactivityProbe);
+    }
+
+    /**
+     * Get the Column entity which column name is "is_connected" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "is_connected"
+     */
+    public Column getIsConnectedColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.ISCONNECTED
+                                                                     .columnName(),
+                                                             "getIsConnectedColumn",
+                                                             VersionNum.VERSION110);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "is_connected" to the Row entity
+     * of attributes.
+     * @param isConnected the column data which column name is "is_connected"
+     */
+    public void setIsConnected(Boolean isConnected) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.ISCONNECTED
+                                                                     .columnName(),
+                                                             "setIsConnected",
+                                                             VersionNum.VERSION110);
+        super.setDataHandler(columndesc, isConnected);
+    }
+
+    /**
+     * Get the Column entity which column name is "other_config" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "other_config"
+     */
+    public Column getOtherConfigColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "getOtherConfigColumn",
+                                                             VersionNum.VERSION680);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "other_config" to the Row entity
+     * of attributes.
+     * @param otherConfig the column data which column name is "other_config"
+     */
+    public void setOtherConfig(Map<String, String> otherConfig) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "setOtherConfig",
+                                                             VersionNum.VERSION680);
+        super.setDataHandler(columndesc, otherConfig);
+    }
+
+    /**
+     * Get the Column entity which column name is "max_backoff" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "max_backoff"
+     */
+    public Column getMaxBackoffColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.MAXBACKOFF
+                                                                     .columnName(),
+                                                             "getMaxBackoffColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "max_backoff" to the Row entity
+     * of attributes.
+     * @param maxBackoff the column data which column name is "max_backoff"
+     */
+    public void setMaxBackoff(Long maxBackoff) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.MAXBACKOFF
+                                                                     .columnName(),
+                                                             "setMaxBackoff",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, maxBackoff);
+    }
+
+    /**
+     * Get the Column entity which column name is "local_ip" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "local_ip"
+     */
+    public Column getLocalIpColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.LOCALIP
+                                                                     .columnName(),
+                                                             "getLocalIpColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "local_ip" to the Row entity of
+     * attributes.
+     * @param localIp the column data which column name is "local_ip"
+     */
+    public void setLocalIp(Set<String> localIp) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.LOCALIP
+                                                                     .columnName(),
+                                                             "setLocalIp",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, localIp);
+    }
+
+    /**
+     * Get the Column entity which column name is "discover_update_resolv_conf"
+     * from the Row entity of attributes.
+     * @return the Column entity which column name is
+     *         "discover_update_resolv_conf"
+     */
+    public Column getDiscoverUpdateResolvConfColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.DISCOVERUPDATERESOLVCONF
+                                                                     .columnName(),
+                                                             "getDiscoverUpdateResolvConfColumn",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION300);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "discover_update_resolv_conf" to
+     * the Row entity of attributes.
+     * @param discoverUpdateResolvConf the column data which column name is
+     *            "discover_update_resolv_conf"
+     */
+    public void setDiscoverUpdateResolvConf(Set<String> discoverUpdateResolvConf) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.DISCOVERUPDATERESOLVCONF
+                                                                     .columnName(),
+                                                             "setDiscoverUpdateResolvConf",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION300);
+        super.setDataHandler(columndesc, discoverUpdateResolvConf);
+    }
+
+    /**
+     * Get the Column entity which column name is "discover_accept_regex" from
+     * the Row entity of attributes.
+     * @return the Column entity which column name is "discover_accept_regex"
+     */
+    public Column getDiscoverAcceptRegexColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.DISCOVERACCEPTREGEX
+                                                                     .columnName(),
+                                                             "getDiscoverAcceptRegexColumn",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION300);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "discover_accept_regex" to the
+     * Row entity of attributes.
+     * @param discoverAcceptRegex the column data which column name is
+     *            "discover_accept_regex"
+     */
+    public void setDiscoverAcceptRegex(Set<String> discoverAcceptRegex) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             ControllerColumn.DISCOVERACCEPTREGEX
+                                                                     .columnName(),
+                                                             "setDiscoverAcceptRegex",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION300);
+        super.setDataHandler(columndesc, discoverAcceptRegex);
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Interface.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Interface.java
new file mode 100644
index 0000000..ee94628
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Interface.java
@@ -0,0 +1,1024 @@
+/*
+ * 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.rfc.table;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.onosproject.ovsdb.rfc.notation.Column;
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
+import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
+
+/**
+ * This class provides operations of Interface Table.
+ */
+public class Interface extends AbstractOvsdbTableService {
+
+    /**
+     * Interface table column name.
+     */
+    public enum InterfaceColumn {
+        NAME("name"), TYPE("type"), OPTIONS("options"),
+        INGRESSPOLICINGRATE("ingress_policing_rate"),
+        INGRESSPOLICINGBURST("ingress_policing_burst"), MACINUSE("mac_in_use"),
+        MAC("mac"), IFINDEX("ifindex"), EXTERNALIDS("external_ids"),
+        OFPORT("ofport"), OFPORTREQUEST("ofport_request"), BFD("bfd"),
+        BFDSTATUS("bfd_status"), MONITOR("monitor"), CFMMPID("cfm_mpid"),
+        CFMREMOTEMPID("cfm_remote_mpid"), CFMREMOTEMPIDS("cfm_remote_mpids"),
+        CFMFLAPCOUNT("cfm_flap_count"), CFMFAULT("cfm_fault"),
+        CFMFAULTSTATUS("cfm_fault_status"),
+        CFMREMOTEOPSTATE("cfm_remote_opstate"), CFMHEALTH("cfm_health"),
+        LACPCURRENT("lacp_current"), OTHERCONFIG("other_config"),
+        STATISTICS("statistics"), STATUS("status"), ADMINSTATE("admin_state"),
+        LINKSTATE("link_state"), LINKRESETS("link_resets"),
+        LINKSPEED("link_speed"), DUPLEX("duplex"), MTU("mtu"), ERROR("error");
+
+        private final String columnName;
+
+        private InterfaceColumn(String columnName) {
+            this.columnName = columnName;
+        }
+
+        /**
+         * Returns the table column name for InterfaceColumn.
+         * @return the table column name
+         */
+        public String columnName() {
+            return columnName;
+        }
+    }
+
+    /**
+     * Constructs a Interface object. Generate Interface Table Description.
+     * @param dbSchema DatabaseSchema
+     * @param row Row
+     */
+    public Interface(DatabaseSchema dbSchema, Row row) {
+        super(dbSchema, row, OvsdbTable.INTERFACE, VersionNum.VERSION100);
+    }
+
+    /**
+     * Get the Column entity which column name is "name" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "name"
+     */
+    public Column getNameColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.NAME
+                                                                     .columnName(),
+                                                             "getNameColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "name" to the Row entity of
+     * attributes.
+     * @param name the column data which column name is "name"
+     */
+    public void setName(String name) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.NAME
+                                                                     .columnName(),
+                                                             "setName",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, name);
+    }
+
+    /**
+     * Get the column data which column name is "name" from the Row entity of
+     * attributes.
+     * @return the column data which column name is "name"
+     */
+    public String getName() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.NAME
+                                                                     .columnName(),
+                                                             "getName",
+                                                             VersionNum.VERSION100);
+        return (String) super.getDataHandler(columndesc);
+    }
+
+    /**
+     * Get the Column entity which column name is "type" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "type"
+     */
+    public Column getTypeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.TYPE
+                                                                     .columnName(),
+                                                             "getTypeColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "type" to the Row entity of
+     * attributes.
+     * @param type the column data which column name is "type"
+     */
+    public void setType(String type) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.TYPE
+                                                                     .columnName(),
+                                                             "setType",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, type);
+    }
+
+    /**
+     * Get the Column entity which column name is "options" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "options"
+     */
+    public Column getOptionsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.OPTIONS
+                                                                     .columnName(),
+                                                             "getOptionsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "options" to the Row entity of
+     * attributes.
+     * @param options the column data which column name is "options"
+     */
+    public void setOptions(Map<String, String> options) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.OPTIONS
+                                                                     .columnName(),
+                                                             "setOptions",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, options);
+    }
+
+    /**
+     * Get the Column entity which column name is "ingress_policing_rate" from
+     * the Row entity of attributes.
+     * @return the Column entity which column name is "ingress_policing_rate"
+     */
+    public Column getIngressPolicingRateColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.INGRESSPOLICINGRATE
+                                                                     .columnName(),
+                                                             "getIngressPolicingRateColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ingress_policing_rate" to the
+     * Row entity of attributes.
+     * @param ingressPolicingRate the column data which column name is
+     *            "ingress_policing_rate"
+     */
+    public void setIngressPolicingRate(Set<Long> ingressPolicingRate) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.INGRESSPOLICINGRATE
+                                                                     .columnName(),
+                                                             "setIngressPolicingRate",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, ingressPolicingRate);
+    }
+
+    /**
+     * Get the Column entity which column name is "ingress_policing_burst" from
+     * the Row entity of attributes.
+     * @return the Column entity which column name is "ingress_policing_burst"
+     */
+    public Column getIngressPolicingBurstColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.INGRESSPOLICINGBURST
+                                                                     .columnName(),
+                                                             "getIngressPolicingBurstColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ingress_policing_burst" to the
+     * Row entity of attributes.
+     * @param ingressPolicingBurst the column data which column name is
+     *            "ingress_policing_burst"
+     */
+    public void setIngressPolicingBurst(Set<Long> ingressPolicingBurst) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.INGRESSPOLICINGBURST
+                                                                     .columnName(),
+                                                             "setIngressPolicingBurst",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, ingressPolicingBurst);
+    }
+
+    /**
+     * Get the Column entity which column name is "mac_in_use" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "mac_in_use"
+     */
+    public Column getMacInUseColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.MACINUSE
+                                                                     .columnName(),
+                                                             "getMacInUseColumn",
+                                                             VersionNum.VERSION710);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "mac_in_use" to the Row entity
+     * of attributes.
+     * @param macInUse the column data which column name is "mac_in_use"
+     */
+    public void setMacInUse(Set<String> macInUse) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.MACINUSE
+                                                                     .columnName(),
+                                                             "setMacInUse",
+                                                             VersionNum.VERSION710);
+        super.setDataHandler(columndesc, macInUse);
+    }
+
+    /**
+     * Get the Column entity which column name is "mac" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "mac"
+     */
+    public Column getMacColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.MAC
+                                                                     .columnName(),
+                                                             "getMacColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "mac" to the Row entity of
+     * attributes.
+     * @param mac the column data which column name is "mac"
+     */
+    public void setMac(Set<String> mac) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.MAC
+                                                                     .columnName(),
+                                                             "setMac",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, mac);
+    }
+
+    /**
+     * Get the Column entity which column name is "ifindex" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "ifindex"
+     */
+    public Column getIfIndexColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.IFINDEX
+                                                                     .columnName(),
+                                                             "getIfIndexColumn",
+                                                             VersionNum.VERSION721);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ifindex" to the Row entity of
+     * attributes.
+     * @param ifIndex the column data which column name is "ifindex"
+     */
+    public void setIfIndex(Long ifIndex) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.IFINDEX
+                                                                     .columnName(),
+                                                             "setIfIndex",
+                                                             VersionNum.VERSION721);
+        super.setDataHandler(columndesc, ifIndex);
+    }
+
+    /**
+     * Get the Column entity which column name is "external_ids" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "external_ids"
+     */
+    public Column getExternalIdsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "getExternalIdsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "external_ids" to the Row entity
+     * of attributes.
+     * @param externalIds the column data which column name is "external_ids"
+     */
+    public void setExternalIds(Map<String, String> externalIds) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "setExternalIds",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, externalIds);
+    }
+
+    /**
+     * Get the Column entity which column name is "ofport" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "ofport"
+     */
+    public Column getOpenFlowPortColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.OFPORT
+                                                                     .columnName(),
+                                                             "getOpenFlowPortColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ofport" to the Row entity of
+     * attributes.
+     * @param openFlowPort the column data which column name is "ofport"
+     */
+    public void setOpenFlowPort(Set<Long> openFlowPort) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.OFPORT
+                                                                     .columnName(),
+                                                             "setOpenFlowPort",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, openFlowPort);
+    }
+
+    /**
+     * Get the Column entity which column name is "ofport_request" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "ofport_request"
+     */
+    public Column getOpenFlowPortRequestColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.OFPORTREQUEST
+                                                                     .columnName(),
+                                                             "getOpenFlowPortRequestColumn",
+                                                             VersionNum.VERSION620);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ofport_request" to the Row
+     * entity of attributes.
+     * @param openFlowPortRequest the column data which column name is
+     *            "ofport_request"
+     */
+    public void setOpenFlowPortRequest(String openFlowPortRequest) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.OFPORTREQUEST
+                                                                     .columnName(),
+                                                             "setOpenFlowPortRequest",
+                                                             VersionNum.VERSION620);
+        super.setDataHandler(columndesc, openFlowPortRequest);
+    }
+
+    /**
+     * Get the Column entity which column name is "bfd" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "bfd"
+     */
+    public Column getBfdColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.BFD
+                                                                     .columnName(),
+                                                             "getBfdColumn",
+                                                             VersionNum.VERSION720);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "bfd" to the Row entity of
+     * attributes.
+     * @param bfd the column data which column name is "bfd"
+     */
+    public void setBfd(Map<String, String> bfd) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.BFD
+                                                                     .columnName(),
+                                                             "setBfd",
+                                                             VersionNum.VERSION720);
+        super.setDataHandler(columndesc, bfd);
+    }
+
+    /**
+     * Get the Column entity which column name is "bfd_status" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "bfd_status"
+     */
+    public Column getBfdStatusColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.BFDSTATUS
+                                                                     .columnName(),
+                                                             "getBfdStatusColumn",
+                                                             VersionNum.VERSION720);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "bfd_status" to the Row entity
+     * of attributes.
+     * @param bfdStatus the column data which column name is "bfd_status"
+     */
+    public void setBfdStatus(Map<String, String> bfdStatus) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.BFDSTATUS
+                                                                     .columnName(),
+                                                             "setBfdStatus",
+                                                             VersionNum.VERSION720);
+        super.setDataHandler(columndesc, bfdStatus);
+    }
+
+    /**
+     * Get the Column entity which column name is "monitor" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "monitor"
+     */
+    public Column getMonitorColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.MONITOR
+                                                                     .columnName(),
+                                                             "getMonitorColumn",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION350);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "monitor" to the Row entity of
+     * attributes.
+     * @param monitor the column data which column name is "monitor"
+     */
+    public void setMonitor(String monitor) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.MONITOR
+                                                                     .columnName(),
+                                                             "setMonitor",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION350);
+        super.setDataHandler(columndesc, monitor);
+    }
+
+    /**
+     * Get the Column entity which column name is "cfm_mpid" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "cfm_mpid"
+     */
+    public Column getCfmMpidColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMMPID
+                                                                     .columnName(),
+                                                             "getCfmMpidColumn",
+                                                             VersionNum.VERSION400);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cfm_mpid" to the Row entity of
+     * attributes.
+     * @param cfmMpid the column data which column name is "cfm_mpid"
+     */
+    public void setCfmMpid(Set<Long> cfmMpid) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMMPID
+                                                                     .columnName(),
+                                                             "setCfmMpid",
+                                                             VersionNum.VERSION400);
+        super.setDataHandler(columndesc, cfmMpid);
+    }
+
+    /**
+     * Get the Column entity which column name is "cfm_remote_mpid" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "cfm_remote_mpid"
+     */
+    public Column getCfmRemoteMpidColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMREMOTEMPID
+                                                                     .columnName(),
+                                                             "getCfmRemoteMpidColumn",
+                                                             VersionNum.VERSION400,
+                                                             VersionNum.VERSION520);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cfm_remote_mpid" to the Row
+     * entity of attributes.
+     * @param cfmRemoteMpid the column data which column name is
+     *            "cfm_remote_mpid"
+     */
+    public void setCfmRemoteMpid(Set<Long> cfmRemoteMpid) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMREMOTEMPID
+                                                                     .columnName(),
+                                                             "setCfmRemoteMpid",
+                                                             VersionNum.VERSION400,
+                                                             VersionNum.VERSION520);
+        super.setDataHandler(columndesc, cfmRemoteMpid);
+    }
+
+    /**
+     * Get the Column entity which column name is "cfm_remote_mpids" from the
+     * Row entity of attributes.
+     * @return the Column entity which column name is "cfm_remote_mpids"
+     */
+    public Column getCfmRemoteMpidsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMREMOTEMPIDS
+                                                                     .columnName(),
+                                                             "getCfmRemoteMpidsColumn",
+                                                             VersionNum.VERSION600);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cfm_remote_mpids" to the Row
+     * entity of attributes.
+     * @param cfmRemoteMpids the column data which column name is
+     *            "cfm_remote_mpids"
+     */
+    public void setCfmRemoteMpids(Set<Long> cfmRemoteMpids) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMREMOTEMPIDS
+                                                                     .columnName(),
+                                                             "setCfmRemoteMpids",
+                                                             VersionNum.VERSION600);
+        super.setDataHandler(columndesc, cfmRemoteMpids);
+    }
+
+    /**
+     * Get the Column entity which column name is "cfm_flap_count" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "cfm_flap_count"
+     */
+    public Column getCfmFlapCountColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMFLAPCOUNT
+                                                                     .columnName(),
+                                                             "getCfmFlapCountColumn",
+                                                             VersionNum.VERSION730);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cfm_flap_count" to the Row
+     * entity of attributes.
+     * @param cfmFlapCount the column data which column name is "cfm_flap_count"
+     */
+    public void setCfmFlapCount(Set<Long> cfmFlapCount) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMFLAPCOUNT
+                                                                     .columnName(),
+                                                             "setCfmFlapCount",
+                                                             VersionNum.VERSION730);
+        super.setDataHandler(columndesc, cfmFlapCount);
+    }
+
+    /**
+     * Get the Column entity which column name is "cfm_fault" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "cfm_fault"
+     */
+    public Column getCfmFaultColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMFAULT
+                                                                     .columnName(),
+                                                             "getCfmFaultColumn",
+                                                             VersionNum.VERSION400);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cfm_fault" to the Row entity of
+     * attributes.
+     * @param cfmFault the column data which column name is "cfm_fault"
+     */
+    public void setCfmFault(Set<Boolean> cfmFault) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMFAULT
+                                                                     .columnName(),
+                                                             "setCfmFault",
+                                                             VersionNum.VERSION400);
+        super.setDataHandler(columndesc, cfmFault);
+    }
+
+    /**
+     * Get the Column entity which column name is "cfm_fault_status" from the
+     * Row entity of attributes.
+     * @return the Column entity which column name is "cfm_fault_status"
+     */
+    public Column getCfmFaultStatusColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMFAULTSTATUS
+                                                                     .columnName(),
+                                                             "getCfmFaultStatusColumn",
+                                                             VersionNum.VERSION660);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cfm_fault_status" to the Row
+     * entity of attributes.
+     * @param cfmFaultStatus the column data which column name is
+     *            "cfm_fault_status"
+     */
+    public void setCfmFaultStatus(Set<String> cfmFaultStatus) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMFAULTSTATUS
+                                                                     .columnName(),
+                                                             "setCfmFaultStatus",
+                                                             VersionNum.VERSION660);
+        super.setDataHandler(columndesc, cfmFaultStatus);
+    }
+
+    /**
+     * Get the Column entity which column name is "cfm_remote_opstate" from the
+     * Row entity of attributes.
+     * @return the Column entity which column name is "cfm_remote_opstate"
+     */
+    public Column getCfmRemoteOpStateColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMREMOTEOPSTATE
+                                                                     .columnName(),
+                                                             "getCfmRemoteOpStateColumn",
+                                                             VersionNum.VERSION6100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cfm_remote_opstate" to the Row
+     * entity of attributes.
+     * @param cfmRemoteOpState the column data which column name is
+     *            "cfm_remote_opstate"
+     */
+    public void setCfmRemoteOpState(Set<String> cfmRemoteOpState) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMREMOTEOPSTATE
+                                                                     .columnName(),
+                                                             "setCfmRemoteOpState",
+                                                             VersionNum.VERSION6100);
+        super.setDataHandler(columndesc, cfmRemoteOpState);
+    }
+
+    /**
+     * Get the Column entity which column name is "cfm_health" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "cfm_health"
+     */
+    public Column getCfmHealthColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMHEALTH
+                                                                     .columnName(),
+                                                             "getCfmHealthColumn",
+                                                             VersionNum.VERSION690);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cfm_health" to the Row entity
+     * of attributes.
+     * @param cfmHealth the column data which column name is "cfm_health"
+     */
+    public void setCfmHealth(Set<Long> cfmHealth) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.CFMHEALTH
+                                                                     .columnName(),
+                                                             "setCfmHealth",
+                                                             VersionNum.VERSION690);
+        super.setDataHandler(columndesc, cfmHealth);
+    }
+
+    /**
+     * Get the Column entity which column name is "lacp_current" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "lacp_current"
+     */
+    public Column getLacpCurrentColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.LACPCURRENT
+                                                                     .columnName(),
+                                                             "getLacpCurrentColumn",
+                                                             VersionNum.VERSION330);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "lacp_current" to the Row entity
+     * of attributes.
+     * @param lacpCurrent the column data which column name is "lacp_current"
+     */
+    public void setLacpCurrent(Set<Boolean> lacpCurrent) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.LACPCURRENT
+                                                                     .columnName(),
+                                                             "setLacpCurrent",
+                                                             VersionNum.VERSION330);
+        super.setDataHandler(columndesc, lacpCurrent);
+    }
+
+    /**
+     * Get the Column entity which column name is "other_config" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "other_config"
+     */
+    public Column getOtherConfigColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "getOtherConfigColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "other_config" to the Row entity
+     * of attributes.
+     * @param otherConfig the column data which column name is "other_config"
+     */
+    public void setOtherConfig(Map<String, String> otherConfig) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "setOtherConfig",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, otherConfig);
+    }
+
+    /**
+     * Get the Column entity which column name is "statistics" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "statistics"
+     */
+    public Column getStatisticsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.STATISTICS
+                                                                     .columnName(),
+                                                             "getStatisticsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "statistics" to the Row entity
+     * of attributes.
+     * @param statistics the column data which column name is "statistics"
+     */
+    public void setStatistics(Map<String, Long> statistics) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.STATISTICS
+                                                                     .columnName(),
+                                                             "setStatistics",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, statistics);
+    }
+
+    /**
+     * Get the Column entity which column name is "status" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "status"
+     */
+    public Column getStatusColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.STATUS
+                                                                     .columnName(),
+                                                             "getStatusColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "status" to the Row entity of
+     * attributes.
+     * @param status the column data which column name is "status"
+     */
+    public void setStatus(Map<String, String> status) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.STATUS
+                                                                     .columnName(),
+                                                             "setStatus",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, status);
+    }
+
+    /**
+     * Get the Column entity which column name is "admin_state" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "admin_state"
+     */
+    public Column getAdminStateColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.ADMINSTATE
+                                                                     .columnName(),
+                                                             "getAdminStateColumn",
+                                                             VersionNum.VERSION106);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "admin_state" to the Row entity
+     * of attributes.
+     * @param adminState the column data which column name is "admin_state"
+     */
+    public void setAdminState(Set<String> adminState) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.ADMINSTATE
+                                                                     .columnName(),
+                                                             "setAdminState",
+                                                             VersionNum.VERSION106);
+        super.setDataHandler(columndesc, adminState);
+    }
+
+    /**
+     * Get the Column entity which column name is "link_state" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "link_state"
+     */
+    public Column getLinkStateColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.LINKSTATE
+                                                                     .columnName(),
+                                                             "getLinkStateColumn",
+                                                             VersionNum.VERSION106);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "link_state" to the Row entity
+     * of attributes.
+     * @param linkState the column data which column name is "link_state"
+     */
+    public void setLinkState(Map<String, String> linkState) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.LINKSTATE
+                                                                     .columnName(),
+                                                             "setLinkState",
+                                                             VersionNum.VERSION106);
+        super.setDataHandler(columndesc, linkState);
+    }
+
+    /**
+     * Get the Column entity which column name is "link_resets" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "link_resets"
+     */
+    public Column getLinkResetsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.LINKRESETS
+                                                                     .columnName(),
+                                                             "getLinkResetsColumn",
+                                                             VersionNum.VERSION620);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "link_resets" to the Row entity
+     * of attributes.
+     * @param linkResets the column data which column name is "link_resets"
+     */
+    public void setLinkResets(Set<String> linkResets) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.LINKRESETS
+                                                                     .columnName(),
+                                                             "setLinkResets",
+                                                             VersionNum.VERSION620);
+        super.setDataHandler(columndesc, linkResets);
+    }
+
+    /**
+     * Get the Column entity which column name is "link_speed" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "link_speed"
+     */
+    public Column getLinkSpeedColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.LINKSPEED
+                                                                     .columnName(),
+                                                             "getLinkSpeedColumn",
+                                                             VersionNum.VERSION106);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "link_speed" to the Row entity
+     * of attributes.
+     * @param linkSpeed the column data which column name is "link_speed"
+     */
+    public void setLinkSpeed(Set<Long> linkSpeed) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.LINKSPEED
+                                                                     .columnName(),
+                                                             "setLinkSpeed",
+                                                             VersionNum.VERSION106);
+        super.setDataHandler(columndesc, linkSpeed);
+    }
+
+    /**
+     * Get the Column entity which column name is "duplex" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "duplex"
+     */
+    public Column getDuplexColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.DUPLEX
+                                                                     .columnName(),
+                                                             "getDuplexColumn",
+                                                             VersionNum.VERSION106);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "duplex" to the Row entity of
+     * attributes.
+     * @param duplex the column data which column name is "duplex"
+     */
+    public void setDuplex(Set<Long> duplex) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.DUPLEX
+                                                                     .columnName(),
+                                                             "setDuplex",
+                                                             VersionNum.VERSION106);
+        super.setDataHandler(columndesc, duplex);
+    }
+
+    /**
+     * Get the Column entity which column name is "mtu" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "mtu"
+     */
+    public Column getMtuColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.MTU
+                                                                     .columnName(),
+                                                             "getMtuColumn",
+                                                             VersionNum.VERSION106);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "mtu" to the Row entity of
+     * attributes.
+     * @param mtu the column data which column name is "mtu"
+     */
+    public void setMtu(Set<Long> mtu) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.MTU
+                                                                     .columnName(),
+                                                             "setMtu",
+                                                             VersionNum.VERSION106);
+        super.setDataHandler(columndesc, mtu);
+    }
+
+    /**
+     * Get the Column entity which column name is "error" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "error"
+     */
+    public Column getErrorColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.ERROR
+                                                                     .columnName(),
+                                                             "getErrorColumn",
+                                                             VersionNum.VERSION770);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "error" to the Row entity of
+     * attributes.
+     * @param error the column data which column name is "error"
+     */
+    public void setError(Set<String> error) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             InterfaceColumn.ERROR
+                                                                     .columnName(),
+                                                             "setError",
+                                                             VersionNum.VERSION770);
+        super.setDataHandler(columndesc, error);
+    }
+
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java
new file mode 100644
index 0000000..73d7ca1
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java
@@ -0,0 +1,451 @@
+package org.onosproject.ovsdb.rfc.table;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.onosproject.ovsdb.rfc.notation.Column;
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
+import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
+
+/**
+ * This class provides operations of Open_vSwitch Table.
+ */
+public class OpenVSwitch extends AbstractOvsdbTableService {
+
+    /**
+     * OpenVSwitch table column name.
+     */
+    public enum OpenVSwitchColumn {
+        BRIDGES("bridges"), MANAGERS("managers"),
+        MANAGEROPTIONS("manager_options"), SSL("ssl"),
+        OTHERCONFIG("other_config"), EXTERNALIDS("external_ids"),
+        NEXTCFG("next_cfg"), CURCFG("cur_cfg"), CAPABILITIES("capabilities"),
+        STATISTICS("statistics"), OVSVERSION("ovs_version"),
+        DBVERSION("db_version"), SYSTEMTYPE("system_type"),
+        SYSTEMVERSION("system_version");
+
+        private final String columnName;
+
+        private OpenVSwitchColumn(String columnName) {
+            this.columnName = columnName;
+        }
+
+        /**
+         * Returns the table column name for OpenVSwitchColumn.
+         * @return the table column name
+         */
+        public String columnName() {
+            return columnName;
+        }
+    }
+
+    /**
+     * Constructs a OpenVSwitch object. Generate Open_vSwitch Table Description.
+     * @param dbSchema DatabaseSchema
+     * @param row Row
+     */
+    public OpenVSwitch(DatabaseSchema dbSchema, Row row) {
+        super(dbSchema, row, OvsdbTable.OPENVSWITCH, VersionNum.VERSION100);
+    }
+
+    /**
+     * Get the Column entity which column name is "bridges" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "bridges"
+     */
+    public Column getBridgesColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.BRIDGES
+                                                                     .columnName(),
+                                                             "getBridgesColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "bridges" to the Row entity of
+     * attributes.
+     * @param bridges the column data which column name is "bridges"
+     */
+    public void setBridges(Set<UUID> bridges) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.BRIDGES
+                                                                     .columnName(),
+                                                             "setBridges",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, bridges);
+    }
+
+    /**
+     * Get the Column entity which column name is "managers" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "managers"
+     */
+    public Column getManagersColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.MANAGERS
+                                                                     .columnName(),
+                                                             "getManagersColumn",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION200);
+        return (Column) super.getDataHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "managers" to the Row entity of
+     * attributes.
+     * @param managers the column data which column name is "managers"
+     */
+    public void setManagers(Set<UUID> managers) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.MANAGERS
+                                                                     .columnName(),
+                                                             "setManagers",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION200);
+        super.setDataHandler(columndesc, managers);
+    }
+
+    /**
+     * Get the Column entity which column name is "manager_options" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "manager_options"
+     */
+    public Column getManagerOptionsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.MANAGEROPTIONS
+                                                                     .columnName(),
+                                                             "getManagerOptionsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getDataHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "manager_options" to the Row
+     * entity of attributes.
+     * @param managerOptions the column data which column name is
+     *            "manager_options"
+     */
+    public void setManagerOptions(Set<UUID> managerOptions) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.MANAGEROPTIONS
+                                                                     .columnName(),
+                                                             "setManagerOptions",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, managerOptions);
+    }
+
+    /**
+     * Get the Column entity which column name is "ssl" from the Row entity of
+     * attributes.
+     * @return the Column entity which column name is "ssl"
+     */
+    public Column getSslColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.SSL
+                                                                     .columnName(),
+                                                             "getSslColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getDataHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ssl" to the Row entity of
+     * attributes.
+     * @param ssl the column data which column name is "ssl"
+     */
+    public void setSsl(Set<UUID> ssl) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.SSL
+                                                                     .columnName(),
+                                                             "setSsl",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, ssl);
+    }
+
+    /**
+     * Get the Column entity which column name is "other_config" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "other_config"
+     */
+    public Column getOtherConfigColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "getOtherConfigColumn",
+                                                             VersionNum.VERSION510);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "other_config" to the Row entity
+     * of attributes.
+     * @param otherConfig the column data which column name is "other_config"
+     */
+    public void setOtherConfig(Map<String, String> otherConfig) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "setOtherConfig",
+                                                             VersionNum.VERSION510);
+        super.setDataHandler(columndesc, otherConfig);
+    }
+
+    /**
+     * Get the Column entity which column name is "external_ids" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "external_ids"
+     */
+    public Column getExternalIdsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "getExternalIdsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "external_ids" to the Row entity
+     * of attributes.
+     * @param externalIds the column data which column name is "external_ids"
+     */
+    public void setExternalIds(Map<String, String> externalIds) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "setExternalIds",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, externalIds);
+    }
+
+    /**
+     * Get the Column entity which column name is "next_cfg" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "next_cfg"
+     */
+    public Column getNextConfigColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.NEXTCFG
+                                                                     .columnName(),
+                                                             "getNextConfigColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "next_cfg" to the Row entity of
+     * attributes.
+     * @param nextConfig the column data which column name is "next_cfg"
+     */
+    public void setNextConfig(Long nextConfig) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.NEXTCFG
+                                                                     .columnName(),
+                                                             "setNextConfig",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, nextConfig);
+    }
+
+    /**
+     * Get the Column entity which column name is "cur_cfg" from the Row entity
+     * of attributes.
+     * @return the Column entity which column name is "cur_cfg"
+     */
+    public Column getCurrentConfigColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.CURCFG
+                                                                     .columnName(),
+                                                             "getCurrentConfigColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "cur_cfg" to the Row entity of
+     * attributes.
+     * @param currentConfig the column data which column name is "cur_cfg"
+     */
+    public void setCurrentConfig(Long currentConfig) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.CURCFG
+                                                                     .columnName(),
+                                                             "setCurrentConfig",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, currentConfig);
+    }
+
+    /**
+     * Get the Column entity which column name is "capabilities" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "capabilities"
+     */
+    public Column getCapabilitiesColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.CAPABILITIES
+                                                                     .columnName(),
+                                                             "getCapabilitiesColumn",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION670);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "capabilities" to the Row entity
+     * of attributes.
+     * @param capabilities the column data which column name is "capabilities"
+     */
+    public void setCapabilities(Map<String, UUID> capabilities) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.CAPABILITIES
+                                                                     .columnName(),
+                                                             "setCapabilities",
+                                                             VersionNum.VERSION100,
+                                                             VersionNum.VERSION670);
+        super.setDataHandler(columndesc, capabilities);
+    }
+
+    /**
+     * Get the Column entity which column name is "statistics" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "statistics"
+     */
+    public Column getStatisticsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.STATISTICS
+                                                                     .columnName(),
+                                                             "getStatisticsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "statistics" to the Row entity
+     * of attributes.
+     * @param statistics the column data which column name is "statistics"
+     */
+    public void setStatistics(Map<String, Long> statistics) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.STATISTICS
+                                                                     .columnName(),
+                                                             "setStatistics",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, statistics);
+    }
+
+    /**
+     * Get the Column entity which column name is "ovs_version" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "ovs_version"
+     */
+    public Column getOvsVersionColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.OVSVERSION
+                                                                     .columnName(),
+                                                             "getOvsVersionColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "ovs_version" to the Row entity
+     * of attributes.
+     * @param ovsVersion the column data which column name is "ovs_version"
+     */
+    public void setOvsVersion(Set<String> ovsVersion) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.OVSVERSION
+                                                                     .columnName(),
+                                                             "setOvsVersion",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, ovsVersion);
+    }
+
+    /**
+     * Get the Column entity which column name is "db_version" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "db_version"
+     */
+    public Column getDbVersionColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.DBVERSION
+                                                                     .columnName(),
+                                                             "getDbVersionColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "db_version" to the Row entity
+     * of attributes.
+     * @param dbVersion the column data which column name is "db_version"
+     */
+    public void setDbVersion(Set<String> dbVersion) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.DBVERSION
+                                                                     .columnName(),
+                                                             "setDbVersion",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, dbVersion);
+    }
+
+    /**
+     * Get the Column entity which column name is "system_type" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "system_type"
+     */
+    public Column getSystemTypeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.SYSTEMTYPE
+                                                                     .columnName(),
+                                                             "getSystemTypeColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "system_type" to the Row entity
+     * of attributes.
+     * @param systemType the column data which column name is "system_type"
+     */
+    public void setSystemType(Set<String> systemType) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.SYSTEMTYPE
+                                                                     .columnName(),
+                                                             "setSystemType",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, systemType);
+    }
+
+    /**
+     * Get the Column entity which column name is "system_version" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "system_version"
+     */
+    public Column getSystemVersionColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.SYSTEMVERSION
+                                                                     .columnName(),
+                                                             "getSystemVersionColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "system_version" to the Row
+     * entity of attributes.
+     * @param systemVersion the column data which column name is
+     *            "system_version"
+     */
+    public void setSystemVersion(Set<String> systemVersion) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             OpenVSwitchColumn.SYSTEMVERSION
+                                                                     .columnName(),
+                                                             "setSystemVersion",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, systemVersion);
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OvsdbTable.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OvsdbTable.java
new file mode 100644
index 0000000..f2e5150
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OvsdbTable.java
@@ -0,0 +1,41 @@
+/*

+ * 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.rfc.table;

+

+/**

+ * Ovsdb table name. Refer to RFC7047's Section 9.2.

+ */

+public enum OvsdbTable {

+    INTERFACE("Interface"), BRIDGE("Bridge"), CONTROLLER("Controller"),

+    PORT("Port"), OPENVSWITCH("Open_vSwitch"), FLWTABLE("Flow_Table"),

+    QOS("Qos"), QUEUE("Queue"), MIRROR("Mirror"), MANAGER("Manager"),

+    NETFLOW("NetFlow"), SSL("SSL"), SFLOW("sFlow"), IPFIX("IPFIX"),

+    FLOWSAMPLECOLLECTORSET("Flow_Sample_Collector_Set");

+

+    private final String tableName;

+

+    private OvsdbTable(String tableName) {

+        this.tableName = tableName;

+    }

+

+    /**

+     * Returns the table name for OvsdbTable.

+     * @return the table name

+     */

+    public String tableName() {

+        return tableName;

+    }

+}

diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java
new file mode 100644
index 0000000..996e93f
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java
@@ -0,0 +1,575 @@
+package org.onosproject.ovsdb.rfc.table;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.onosproject.ovsdb.rfc.notation.Column;
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+import org.onosproject.ovsdb.rfc.tableservice.AbstractOvsdbTableService;
+import org.onosproject.ovsdb.rfc.tableservice.ColumnDescription;
+
+/**
+ * This class provides operations of Port Table.
+ */
+public class Port extends AbstractOvsdbTableService {
+
+    /**
+     * Port table column name.
+     */
+    public enum PortColumn {
+        NAME("name"), INTERFACES("interfaces"), TRUNKS("trunks"), TAG("tag"),
+        VLANMODE("vlan_mode"), QOS("qos"), MAC("mac"), BONDTYPE("bond_type"),
+        BONDMODE("bond_mode"), LACP("lacp"), BONDUPDELAY("bond_updelay"),
+        BONDDOWNDELAY("bond_downdelay"), BONDFAKEIFACE("bond_fake_iface"),
+        FAKEBRIDGE("fake_bridge"), STATUS("status"), STATISTICS("statistics"),
+        OTHERCONFIG("other_config"), EXTERNALIDS("external_ids");
+
+        private final String columnName;
+
+        private PortColumn(String columnName) {
+            this.columnName = columnName;
+        }
+
+        /**
+         * Returns the table column name for PortColumn.
+         * @return the table column name
+         */
+        public String columnName() {
+            return columnName;
+        }
+    }
+
+    /**
+     * Constructs a Port object. Generate Port Table Description.
+     * @param dbSchema DatabaseSchema
+     * @param row Row
+     */
+    public Port(DatabaseSchema dbSchema, Row row) {
+        super(dbSchema, row, OvsdbTable.PORT, VersionNum.VERSION100);
+    }
+
+    /**
+     * Get the Column entity which column name is "name" from the Row entity of
+     * attributes.
+     * @return the Column entity
+     */
+    public Column getNameColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.NAME
+                                                                     .columnName(),
+                                                             "getNameColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "name" to the Row entity of
+     * attributes.
+     * @param name the column data which column name is "name"
+     */
+    public void setName(String name) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.NAME
+                                                                     .columnName(),
+                                                             "setName",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, name);
+    }
+
+    /**
+     * Get the Column entity which column name is "name" from the Row entity of
+     * attributes.
+     * @return the Column entity
+     */
+    public String getName() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.NAME
+                                                                     .columnName(),
+                                                             "getName",
+                                                             VersionNum.VERSION100);
+        return (String) super.getDataHandler(columndesc);
+    }
+
+    /**
+     * Get the Column entity which column name is "interfaces" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getInterfacesColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.INTERFACES
+                                                                     .columnName(),
+                                                             "getInterfacesColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "interfaces" to the Row entity
+     * of attributes.
+     * @param interfaces the column data which column name is "interfaces"
+     */
+    public void setInterfaces(Set<UUID> interfaces) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.INTERFACES
+                                                                     .columnName(),
+                                                             "setInterfaces",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, interfaces);
+    }
+
+    /**
+     * Get the Column entity which column name is "trunks" from the Row entity
+     * of attributes.
+     * @return the Column entity
+     */
+    public Column getTrunksColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.TRUNKS
+                                                                     .columnName(),
+                                                             "getTrunksColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "trunks" to the Row entity of
+     * attributes.
+     * @param trunks the column data which column name is "trunks"
+     */
+    public void setTrunks(Set<Long> trunks) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.TRUNKS
+                                                                     .columnName(),
+                                                             "setTrunks",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, trunks);
+    }
+
+    /**
+     * Get the Column entity which column name is "tag" from the Row entity of
+     * attributes.
+     * @return the Column entity
+     */
+    public Column getTagColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.TAG
+                                                                     .columnName(),
+                                                             "getTagColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "tag" to the Row entity of
+     * attributes.
+     * @param tag the column data which column name is "tag"
+     */
+    public void setTag(Set<Long> tag) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.TAG
+                                                                     .columnName(),
+                                                             "setTag",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, tag);
+    }
+
+    /**
+     * Get the Column entity which column name is "vlan_mode" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getVlanModeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.VLANMODE
+                                                                     .columnName(),
+                                                             "getVlanModeColumn",
+                                                             VersionNum.VERSION610);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "vlan_mode" to the Row entity of
+     * attributes.
+     * @param vlanMode the column data which column name is "vlan_mode"
+     */
+    public void setVlanMode(Set<String> vlanMode) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.VLANMODE
+                                                                     .columnName(),
+                                                             "setVlanMode",
+                                                             VersionNum.VERSION610);
+        super.setDataHandler(columndesc, vlanMode);
+    }
+
+    /**
+     * Get the Column entity which column name is "qos" from the Row entity of
+     * attributes.
+     * @return the Column entity
+     */
+    public Column getQosColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.QOS
+                                                                     .columnName(),
+                                                             "getQosColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "qos" to the Row entity of
+     * attributes.
+     * @param qos the column data which column name is "qos"
+     */
+    public void setQos(Set<UUID> qos) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.QOS
+                                                                     .columnName(),
+                                                             "setQos",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, qos);
+    }
+
+    /**
+     * Get the Column entity which column name is "mac" from the Row entity of
+     * attributes.
+     * @return the Column entity
+     */
+    public Column getMacColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.MAC
+                                                                     .columnName(),
+                                                             "getMacColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "mac" to the Row entity of
+     * attributes.
+     * @param mac the column data which column name is "mac"
+     */
+    public void setMac(Set<String> mac) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.MAC
+                                                                     .columnName(),
+                                                             "setMac",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, mac);
+    }
+
+    /**
+     * Get the Column entity which column name is "bond_type" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getBondTypeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDTYPE
+                                                                     .columnName(),
+                                                             "getBondTypeColumn",
+                                                             VersionNum.VERSION102,
+                                                             VersionNum.VERSION103);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "bond_type" to the Row entity of
+     * attributes.
+     * @param bondtype the column data which column name is "bond_type"
+     */
+    public void setBondType(Set<String> bondtype) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDTYPE
+                                                                     .columnName(),
+                                                             "setBondType",
+                                                             VersionNum.VERSION102,
+                                                             VersionNum.VERSION103);
+        super.setDataHandler(columndesc, bondtype);
+    }
+
+    /**
+     * Get the Column entity which column name is "bond_mode" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getBondModeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDMODE
+                                                                     .columnName(),
+                                                             "getBondModeColumn",
+                                                             VersionNum.VERSION104);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "bond_mode" to the Row entity of
+     * attributes.
+     * @param bondmode the column data which column name is "bond_mode"
+     */
+    public void setBondMode(Set<String> bondmode) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDMODE
+                                                                     .columnName(),
+                                                             "setBondMode",
+                                                             VersionNum.VERSION104);
+        super.setDataHandler(columndesc, bondmode);
+    }
+
+    /**
+     * Get the Column entity which column name is "lacp" from the Row entity of
+     * attributes.
+     * @return the Column entity
+     */
+    public Column getLacpColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.LACP
+                                                                     .columnName(),
+                                                             "getLacpColumn",
+                                                             VersionNum.VERSION130);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "lacp" to the Row entity of
+     * attributes.
+     * @param lacp the column data which column name is "lacp"
+     */
+    public void setLacp(Set<String> lacp) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.LACP
+                                                                     .columnName(),
+                                                             "setLacp",
+                                                             VersionNum.VERSION130);
+        super.setDataHandler(columndesc, lacp);
+    }
+
+    /**
+     * Get the Column entity which column name is "bond_updelay" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getBondUpDelayColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDUPDELAY
+                                                                     .columnName(),
+                                                             "getBondUpDelayColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "bond_updelay" to the Row entity
+     * of attributes.
+     * @param bondUpDelay the column data which column name is "bond_updelay"
+     */
+    public void setBondUpDelay(Set<Long> bondUpDelay) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDUPDELAY
+                                                                     .columnName(),
+                                                             "setBondUpDelay",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, bondUpDelay);
+    }
+
+    /**
+     * Get the Column entity which column name is "bond_downdelay" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getBondDownDelayColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDDOWNDELAY
+                                                                     .columnName(),
+                                                             "getBondDownDelayColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "bond_downdelay" to the Row
+     * entity of attributes.
+     * @param bondDownDelay the column data which column name is
+     *            "bond_downdelay"
+     */
+    public void setBondDownDelay(Set<Long> bondDownDelay) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDDOWNDELAY
+                                                                     .columnName(),
+                                                             "setBondDownDelay",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, bondDownDelay);
+    }
+
+    /**
+     * Get the Column entity which column name is "bond_fake_iface" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getBondFakeInterfaceColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDFAKEIFACE
+                                                                     .columnName(),
+                                                             "getBondFakeInterfaceColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "bond_fake_iface" to the Row
+     * entity of attributes.
+     * @param bondFakeInterface the column data which column name is
+     *            "bond_fake_iface"
+     */
+    public void setBondFakeInterface(Set<Boolean> bondFakeInterface) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.BONDFAKEIFACE
+                                                                     .columnName(),
+                                                             "setBondFakeInterface",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, bondFakeInterface);
+    }
+
+    /**
+     * Get the Column entity which column name is "fake_bridge" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getFakeBridgeColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.FAKEBRIDGE
+                                                                     .columnName(),
+                                                             "getFakeBridgeColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "fake_bridge" to the Row entity
+     * of attributes.
+     * @param fakeBridge the column data which column name is "fake_bridge"
+     */
+    public void setFakeBridge(Set<Boolean> fakeBridge) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.FAKEBRIDGE
+                                                                     .columnName(),
+                                                             "setFakeBridge",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, fakeBridge);
+    }
+
+    /**
+     * Get the Column entity which column name is "status" from the Row entity
+     * of attributes.
+     * @return the Column entity
+     */
+    public Column getStatusColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.STATUS
+                                                                     .columnName(),
+                                                             "getStatusColumn",
+                                                             VersionNum.VERSION620);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "status" to the Row entity of
+     * attributes.
+     * @param status the column data which column name is "status"
+     */
+    public void setStatus(Map<String, String> status) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.STATUS
+                                                                     .columnName(),
+                                                             "setStatus",
+                                                             VersionNum.VERSION620);
+        super.setDataHandler(columndesc, status);
+    }
+
+    /**
+     * Get the Column entity which column name is "statistics" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getStatisticsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.STATISTICS
+                                                                     .columnName(),
+                                                             "getStatisticsColumn",
+                                                             VersionNum.VERSION630);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "statistics" to the Row entity
+     * of attributes.
+     * @param statistics the column data which column name is "statistics"
+     */
+    public void setStatistics(Map<String, Long> statistics) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.STATISTICS
+                                                                     .columnName(),
+                                                             "setStatistics",
+                                                             VersionNum.VERSION630);
+        super.setDataHandler(columndesc, statistics);
+    }
+
+    /**
+     * Get the Column entity which column name is "other_config" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getOtherConfigColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "getOtherConfigColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "other_config" to the Row entity
+     * of attributes.
+     * @param otherConfig the column data which column name is "other_config"
+     */
+    public void setOtherConfig(Map<String, String> otherConfig) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.OTHERCONFIG
+                                                                     .columnName(),
+                                                             "setOtherConfig",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, otherConfig);
+    }
+
+    /**
+     * Get the Column entity which column name is "external_ids" from the Row
+     * entity of attributes.
+     * @return the Column entity
+     */
+    public Column getExternalIdsColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "getExternalIdsColumn",
+                                                             VersionNum.VERSION100);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a Column entity which column name is "external_ids" to the Row entity
+     * of attributes.
+     * @param externalIds the column data which column name is "external_ids"
+     */
+    public void setExternalIds(Map<String, String> externalIds) {
+        ColumnDescription columndesc = new ColumnDescription(
+                                                             PortColumn.EXTERNALIDS
+                                                                     .columnName(),
+                                                             "setExternalIds",
+                                                             VersionNum.VERSION100);
+        super.setDataHandler(columndesc, externalIds);
+    }
+
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/TableGenerator.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/TableGenerator.java
new file mode 100644
index 0000000..644d16b
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/TableGenerator.java
@@ -0,0 +1,82 @@
+/*
+ * 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.rfc.table;
+
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+
+/**
+ * Table generator.
+ */
+public final class TableGenerator {
+
+    /**
+     * Constructs a TableGenerator object. Utility classes should not have a
+     * public or default constructor, otherwise it will compile failed. This
+     * class should not be instantiated.
+     */
+    private TableGenerator() {
+    }
+
+    /**
+     * Create table.
+     * @param dbSchema DatabaseSchema entity
+     * @param tableName table name
+     * @return Object table entity
+     */
+    public static Object createTable(DatabaseSchema dbSchema,
+                                     OvsdbTable tableName) {
+        Row row = new Row();
+        return generateTable(dbSchema, row, tableName);
+    }
+
+    /**
+     * Get table from Row.
+     * @param dbSchema DatabaseSchema entity
+     * @param row Row entity
+     * @param tableName table name
+     * @return Object table entity
+     */
+    public static Object getTable(DatabaseSchema dbSchema, Row row,
+                                  OvsdbTable tableName) {
+        return generateTable(dbSchema, row, tableName);
+    }
+
+    /**
+     * Generate the table by table name.
+     * @param dbSchema DatabaseSchema entity
+     * @param row Row entity
+     * @param tableName table name
+     * @return Object Table entity
+     */
+    private static Object generateTable(DatabaseSchema dbSchema, Row row,
+                                        OvsdbTable tableName) {
+        switch (tableName) {
+        case INTERFACE:
+            return new Interface(dbSchema, row);
+        case BRIDGE:
+            return new Bridge(dbSchema, row);
+        case CONTROLLER:
+            return new Controller(dbSchema, row);
+        case OPENVSWITCH:
+            return new OpenVSwitch(dbSchema, row);
+        case PORT:
+            return new Port(dbSchema, row);
+        default:
+            return null;
+        }
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/VersionNum.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/VersionNum.java
new file mode 100644
index 0000000..f308266
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/VersionNum.java
@@ -0,0 +1,47 @@
+/*

+ * 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.rfc.table;

+

+/**

+ * The version number of tables and columns.

+ */

+public enum VersionNum {

+    VERSION100("1.0.0"), VERSION102("1.0.2"), VERSION103("1.0.3"),

+    VERSION104("1.0.4"), VERSION106("1.0.6"), VERSION110("1.1.0"),

+    VERSION130("1.3.0"), VERSION200("2.0.0"), VERSION300("3.0.0"),

+    VERSION330("3.3.0"), VERSION350("3.5.0"), VERSION400("4.0.0"),

+    VERSION510("5.1.0"), VERSION520("5.2.0"), VERSION600("6.0.0"),

+    VERSION610("6.1.0"), VERSION620("6.2.0"), VERSION630("6.3.0"),

+    VERSION640("6.4.0"), VERSION650("6.5.0"), VERSION660("6.6.0"),

+    VERSION670("6.7.0"), VERSION680("6.8.0"), VERSION690("6.9.0"),

+    VERSION6100("6.10.0"), VERSION6111("6.11.1"), VERSION710("7.1.0"),

+    VERSION720("7.2.0"), VERSION721("7.2.1"), VERSION730("7.3.0"),

+    VERSION740("7.4.0"), VERSION750("7.5.0"), VERSION770("7.7.0");

+

+    private final String versionNum;

+

+    private VersionNum(String versionNum) {

+        this.versionNum = versionNum;

+    }

+

+    /**

+     * Returns the version number for VersionNum.

+     * @return the version number

+     */

+    public String versionNum() {

+        return versionNum;

+    }

+}

diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/AbstractOvsdbTableService.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/AbstractOvsdbTableService.java
new file mode 100644
index 0000000..0fd6214
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/AbstractOvsdbTableService.java
@@ -0,0 +1,327 @@
+/*
+ * 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.rfc.tableservice;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Objects;
+
+import org.onosproject.ovsdb.rfc.error.ColumnSchemaNotFoundException;
+import org.onosproject.ovsdb.rfc.error.TableSchemaNotFoundException;
+import org.onosproject.ovsdb.rfc.error.TypedSchemaException;
+import org.onosproject.ovsdb.rfc.error.VersionMismatchException;
+import org.onosproject.ovsdb.rfc.notation.Column;
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.schema.ColumnSchema;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+import org.onosproject.ovsdb.rfc.schema.TableSchema;
+import org.onosproject.ovsdb.rfc.table.OvsdbTable;
+import org.onosproject.ovsdb.rfc.table.VersionNum;
+import org.onosproject.ovsdb.rfc.utils.VersionUtil;
+
+/**
+ * Representation of conversion between Ovsdb table and Row.
+ */
+public abstract class AbstractOvsdbTableService implements OvsdbTableService {
+
+    private final DatabaseSchema dbSchema;
+    private final Row row;
+    private final TableDescription tableDesc;
+
+    /**
+     * Constructs a AbstractOvsdbTableService object.
+     * @param dbSchema DatabaseSchema entity
+     * @param row Row entity
+     * @param table table name
+     * @param formVersion the initial version
+     */
+    public AbstractOvsdbTableService(DatabaseSchema dbSchema, Row row,
+                                     OvsdbTable table, VersionNum formVersion) {
+        checkNotNull(dbSchema, "database schema cannot be null");
+        checkNotNull(row, "row cannot be null");
+        checkNotNull(table, "table cannot be null");
+        checkNotNull(formVersion, "the initial version cannot be null");
+        this.dbSchema = dbSchema;
+        this.row = row;
+        TableDescription tableDesc = new TableDescription(table, formVersion);
+        this.tableDesc = tableDesc;
+        row.setTableSchema(dbSchema.getTableSchema(table.tableName()));
+    }
+
+    /**
+     * Check whether the parameter of dbSchema is valid and check whether the
+     * table is existent in Database Schema.
+     */
+    private boolean isValid() {
+        if (dbSchema == null) {
+            return false;
+        }
+        if (!dbSchema.name().equalsIgnoreCase(tableDesc.database())) {
+            return false;
+        }
+        checkTableSchemaVersion();
+        return true;
+    }
+
+    /**
+     * Check the table version.
+     */
+    private void checkTableSchemaVersion() {
+        String fromVersion = tableDesc.fromVersion();
+        String untilVersion = tableDesc.untilVersion();
+        String schemaVersion = dbSchema.version();
+        checkVersion(schemaVersion, fromVersion, untilVersion);
+    }
+
+    /**
+     * Check the column version.
+     * @param columnDesc ColumnDescription entity
+     */
+    private void checkColumnSchemaVersion(ColumnDescription columnDesc) {
+        String fromVersion = columnDesc.fromVersion();
+        String untilVersion = columnDesc.untilVersion();
+        String schemaVersion = dbSchema.version();
+        checkVersion(schemaVersion, fromVersion, untilVersion);
+    }
+
+    /**
+     * Check whether the DatabaseSchema version between the initial version and
+     * the end of the version.
+     * @param schemaVersion DatabaseSchema version
+     * @param fromVersion The initial version
+     * @param untilVersion The end of the version
+     * @throws VersionMismatchException this is a version mismatch exception
+     */
+    private void checkVersion(String schemaVersion, String fromVersion,
+                              String untilVersion) {
+        VersionUtil.versionMatch(fromVersion);
+        VersionUtil.versionMatch(untilVersion);
+        if (!fromVersion.equals(VersionUtil.DEFAULT_VERSION_STRING)) {
+            if (VersionUtil.versionCompare(schemaVersion, fromVersion) < 0) {
+                String message = VersionMismatchException
+                        .createFromMessage(schemaVersion, fromVersion);
+                throw new VersionMismatchException(message);
+            }
+        }
+        if (!untilVersion.equals(VersionUtil.DEFAULT_VERSION_STRING)) {
+            if (VersionUtil.versionCompare(untilVersion, schemaVersion) < 0) {
+                String message = VersionMismatchException
+                        .createToMessage(schemaVersion, untilVersion);
+                throw new VersionMismatchException(message);
+            }
+        }
+    }
+
+    /**
+     * Returns TableSchema from dbSchema by table name.
+     * @return TableSchema
+     */
+    private TableSchema getTableSchema() {
+        String tableName = tableDesc.name();
+        return dbSchema.getTableSchema(tableName);
+    }
+
+    /**
+     * Returns ColumnSchema from TableSchema by column name.
+     * @param tableSchema TableSchema entity
+     * @param columnName column name
+     * @return ColumnSchema
+     */
+    private ColumnSchema getColumnSchema(TableSchema tableSchema,
+                                         String columnName) {
+        return tableSchema.getColumnSchema(columnName);
+    }
+
+    @Override
+    public Column getColumnHandler(ColumnDescription columnDesc) {
+        if (!isValid()) {
+            return null;
+        }
+        String columnName = columnDesc.name();
+        checkColumnSchemaVersion(columnDesc);
+        if (columnName == null) {
+            throw new TypedSchemaException("Error processing GetColumn : "
+                    + tableDesc.name() + "." + columnDesc.method());
+        }
+        TableSchema tableSchema = getTableSchema();
+        if (tableSchema == null) {
+            String message = TableSchemaNotFoundException
+                    .createMessage(tableDesc.name(), dbSchema.name());
+            throw new TableSchemaNotFoundException(message);
+        }
+        ColumnSchema columnSchema = getColumnSchema(tableSchema, columnName);
+        if (columnSchema == null) {
+            String message = ColumnSchemaNotFoundException
+                    .createMessage(columnName, tableSchema.name());
+            throw new ColumnSchemaNotFoundException(message);
+        }
+        if (row == null) {
+            return new Column(columnSchema, null);
+        }
+        return row.getColumn(columnSchema);
+    }
+
+    @Override
+    public Object getDataHandler(ColumnDescription columnDesc) {
+        if (!isValid()) {
+            return null;
+        }
+        String columnName = columnDesc.name();
+        checkColumnSchemaVersion(columnDesc);
+        if (columnName == null) {
+            throw new TypedSchemaException("Error processing GetColumn : "
+                    + tableDesc.name() + "." + columnDesc.method());
+        }
+        TableSchema tableSchema = getTableSchema();
+        if (tableSchema == null) {
+            String message = TableSchemaNotFoundException
+                    .createMessage(tableDesc.name(), dbSchema.name());
+            throw new TableSchemaNotFoundException(message);
+        }
+        ColumnSchema columnSchema = getColumnSchema(tableSchema, columnName);
+        if (columnSchema == null) {
+            String message = ColumnSchemaNotFoundException
+                    .createMessage(columnName, tableSchema.name());
+            throw new ColumnSchemaNotFoundException(message);
+        }
+        if (row == null || row.getColumn(columnSchema) == null) {
+            return null;
+        }
+        return row.getColumn(columnSchema).data();
+    }
+
+    @Override
+    public void setDataHandler(ColumnDescription columnDesc, Object obj) {
+        if (!isValid()) {
+            return;
+        }
+        String columnName = columnDesc.name();
+        checkColumnSchemaVersion(columnDesc);
+        if (columnName == null) {
+            throw new TypedSchemaException("Unable to locate Column Name for "
+                    + tableDesc.name() + "." + columnDesc.method());
+        }
+        TableSchema tableSchema = getTableSchema();
+        ColumnSchema columnSchema = getColumnSchema(tableSchema, columnName);
+        Column column = new Column(columnSchema, obj);
+        row.addColumn(columnName, column);
+    }
+
+    @Override
+    public Object getTbSchema() {
+        if (!isValid()) {
+            return null;
+        }
+        if (dbSchema == null) {
+            return null;
+        }
+        return getTableSchema();
+    }
+
+    @Override
+    public UUID getUuid() {
+        if (!isValid()) {
+            return null;
+        }
+        ColumnDescription columnDesc = new ColumnDescription("_uuid",
+                                                             "getTbUuid");
+        return (UUID) getDataHandler(columnDesc);
+    }
+
+    @Override
+    public Column getUuidColumn() {
+        if (!isValid()) {
+            return null;
+        }
+        ColumnDescription columnDesc = new ColumnDescription("_uuid",
+                                                             "getTbUuidColumn");
+        return (Column) getColumnHandler(columnDesc);
+    }
+
+    @Override
+    public UUID getVersion() {
+        if (!isValid()) {
+            return null;
+        }
+        ColumnDescription columnDesc = new ColumnDescription("_version",
+                                                             "getTbVersion");
+        return (UUID) getDataHandler(columnDesc);
+    }
+
+    @Override
+    public Column getVersionColumn() {
+        if (!isValid()) {
+            return null;
+        }
+        ColumnDescription columnDesc = new ColumnDescription("_version",
+                                                             "getTbVersionColumn");
+        return (Column) getColumnHandler(columnDesc);
+    }
+
+    /**
+     * Get DatabaseSchema entity.
+     * @return DatabaseSchema entity
+     */
+    public DatabaseSchema dbSchema() {
+        return dbSchema;
+    }
+
+    /**
+     * Get Row entity.
+     * @return Row entity
+     */
+    public Row getRow() {
+        if (!isValid()) {
+            return null;
+        }
+        return this.row;
+    }
+
+    /**
+     * Get TableDescription entity.
+     * @return TableDescription entity
+     */
+    public TableDescription tableDesc() {
+        return tableDesc;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(row);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof AbstractOvsdbTableService) {
+            final AbstractOvsdbTableService other = (AbstractOvsdbTableService) obj;
+            return Objects.equals(this.row, other.row);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        TableSchema schema = (TableSchema) getTbSchema();
+        String tableName = schema.name();
+        return toStringHelper(this).add("tableName", tableName).add("row", row)
+                .toString();
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/ColumnDescription.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/ColumnDescription.java
new file mode 100644
index 0000000..910b329
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/ColumnDescription.java
@@ -0,0 +1,117 @@
+/*
+ * 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.rfc.tableservice;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.ovsdb.rfc.table.VersionNum;
+import org.onosproject.ovsdb.rfc.utils.VersionUtil;
+
+/**
+ * Column description.
+ */
+public class ColumnDescription {
+
+    // The column name
+    private final String name;
+    // The method name
+    private final String method;
+    // The initial version
+    private final String fromVersion;
+    // The end of the version
+    private final String untilVersion;
+
+    /**
+     * Constructs a MonitorRequest object.
+     * @param name column name
+     * @param method method name
+     */
+    public ColumnDescription(String name, String method) {
+        checkNotNull(name, "name cannot be null");
+        checkNotNull(method, "method cannot be null");
+        this.name = name;
+        this.method = method;
+        this.fromVersion = VersionUtil.DEFAULT_VERSION_STRING;
+        this.untilVersion = VersionUtil.DEFAULT_VERSION_STRING;
+    }
+
+    /**
+     * Constructs a MonitorRequest object.
+     * @param name column name
+     * @param method method name
+     * @param fromVersion the initial version
+     */
+    public ColumnDescription(String name, String method, VersionNum fromVersion) {
+        checkNotNull(name, "name cannot be null");
+        checkNotNull(method, "method cannot be null");
+        checkNotNull(fromVersion, "the initial version cannot be null");
+        this.name = name;
+        this.method = method;
+        this.fromVersion = fromVersion.versionNum();
+        this.untilVersion = VersionUtil.DEFAULT_VERSION_STRING;
+    }
+
+    /**
+     * Constructs a MonitorRequest object.
+     * @param name column name
+     * @param method method name
+     * @param fromVersion the initial version
+     * @param untilVersion the end of the version
+     */
+    public ColumnDescription(String name, String method, VersionNum fromVersion,
+                             VersionNum untilVersion) {
+        checkNotNull(name, "name cannot be null");
+        checkNotNull(method, "method cannot be null");
+        checkNotNull(fromVersion, "the initial version cannot be null");
+        checkNotNull(untilVersion, "the end of the version cannot be null");
+        this.name = name;
+        this.method = method;
+        this.fromVersion = fromVersion.versionNum();
+        this.untilVersion = untilVersion.versionNum();
+    }
+
+    /**
+     * Returns the column name.
+     * @return the column name
+     */
+    public String name() {
+        return name;
+    }
+
+    /**
+     * Returns the method name.
+     * @return the method name
+     */
+    public String method() {
+        return method;
+    }
+
+    /**
+     * Returns the initial version.
+     * @return the initial version
+     */
+    public String fromVersion() {
+        return fromVersion;
+    }
+
+    /**
+     * Returns the end of the version.
+     * @return the end of the version
+     */
+    public String untilVersion() {
+        return untilVersion;
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/OvsdbTableService.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/OvsdbTableService.java
new file mode 100644
index 0000000..3af4c22
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/OvsdbTableService.java
@@ -0,0 +1,76 @@
+/*
+ * 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.rfc.tableservice;
+
+import org.onosproject.ovsdb.rfc.notation.Column;
+import org.onosproject.ovsdb.rfc.notation.UUID;
+
+/**
+ * Representation of conversion between Ovsdb table and Row.
+ */
+public interface OvsdbTableService {
+
+    /**
+     * Get Column from row.
+     * @param columndesc Column description
+     * @return Column
+     */
+    public Column getColumnHandler(ColumnDescription columndesc);
+
+    /**
+     * Get Data from row.
+     * @param columndesc Column description
+     * @return Object column data
+     */
+    public Object getDataHandler(ColumnDescription columndesc);
+
+    /**
+     * Set column data of row.
+     * @param columndesc Column description
+     * @param obj column data
+     */
+    public void setDataHandler(ColumnDescription columndesc, Object obj);
+
+    /**
+     * Returns the TableSchema from row.
+     * @return Object TableSchema
+     */
+    public Object getTbSchema();
+
+    /**
+     * Returns UUID which column name is _uuid.
+     * @return UUID
+     */
+    public UUID getUuid();
+
+    /**
+     * Returns UUID Column which column name is _uuid.
+     * @return UUID Column
+     */
+    public Column getUuidColumn();
+
+    /**
+     * Returns UUID which column name is _version.
+     * @return UUID
+     */
+    public UUID getVersion();
+
+    /**
+     * Returns UUID Column which column name is _version.
+     * @return UUID Column
+     */
+    public Column getVersionColumn();
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/TableDescription.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/TableDescription.java
new file mode 100644
index 0000000..d120cab
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/TableDescription.java
@@ -0,0 +1,108 @@
+/*
+ * 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.rfc.tableservice;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.ovsdb.rfc.table.OvsdbTable;
+import org.onosproject.ovsdb.rfc.table.VersionNum;
+import org.onosproject.ovsdb.rfc.utils.VersionUtil;
+
+/**
+ * Table description.
+ */
+public class TableDescription {
+
+    // The table name
+    private final String name;
+    // The database name
+    private final String database = "Open_vSwitch";
+    // The initial version
+    private final String fromVersion;
+    // The end of the version
+    private final String untilVersion;
+
+    /**
+     * Constructs a MonitorRequest object.
+     * @param table OvsdbTable entity
+     */
+    public TableDescription(OvsdbTable table) {
+        checkNotNull(table, "table cannot be null");
+        this.name = table.tableName();
+        this.fromVersion = VersionUtil.DEFAULT_VERSION_STRING;
+        this.untilVersion = VersionUtil.DEFAULT_VERSION_STRING;
+    }
+
+    /**
+     * Constructs a MonitorRequest object.
+     * @param table OvsdbTable entity
+     * @param fromVersion the initial version
+     */
+    public TableDescription(OvsdbTable table, VersionNum fromVersion) {
+        checkNotNull(table, "table cannot be null");
+        checkNotNull(fromVersion, "the initial version cannot be null");
+        this.name = table.tableName();
+        this.fromVersion = fromVersion.versionNum();
+        this.untilVersion = VersionUtil.DEFAULT_VERSION_STRING;
+    }
+
+    /**
+     * Constructs a MonitorRequest object.
+     * @param table OvsdbTable entity
+     * @param fromVersion the initial version
+     * @param untilVersion the end of the version
+     */
+    public TableDescription(OvsdbTable table, VersionNum fromVersion, VersionNum untilVersion) {
+        checkNotNull(table, "table cannot be null");
+        checkNotNull(fromVersion, "the initial version cannot be null");
+        checkNotNull(untilVersion, "the end of the version cannot be null");
+        this.name = table.tableName();
+        this.fromVersion = fromVersion.versionNum();
+        this.untilVersion = untilVersion.versionNum();
+    }
+
+    /**
+     * Returns the column name.
+     * @return the column name
+     */
+    public String name() {
+        return name;
+    }
+
+    /**
+     * Returns the database name.
+     * @return the database name
+     */
+    public String database() {
+        return database;
+    }
+
+    /**
+     * Returns the initial version.
+     * @return the initial version
+     */
+    public String fromVersion() {
+        return fromVersion;
+    }
+
+    /**
+     * Returns the end of the version.
+     * @return the end of the version
+     */
+    public String untilVersion() {
+        return untilVersion;
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/ConditionUtil.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/ConditionUtil.java
new file mode 100644
index 0000000..527b8bf
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/ConditionUtil.java
@@ -0,0 +1,122 @@
+/*
+ * 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.rfc.utils;
+
+import org.onosproject.ovsdb.rfc.notation.Condition;
+import org.onosproject.ovsdb.rfc.notation.Condition.Function;
+
+/**
+ * Condition utility class.
+ */
+public final class ConditionUtil {
+
+    /**
+     * Constructs a ConditionUtil object. Utility classes should not have a
+     * public or default constructor, otherwise IDE will compile unsuccessfully. This
+     * class should not be instantiated.
+     */
+    private ConditionUtil() {
+    }
+
+    /**
+     * Returns a Condition that means Function.EQUALS .
+     * @param columnName column name
+     * @param data column value
+     * @return Condition
+     */
+    public static Condition equals(String columnName, Object data) {
+        Object value = TransValueUtil.getFormatData(data);
+        return new Condition(columnName, Function.EQUALS, value);
+    }
+
+    /**
+     * Returns a Condition that means Function.NOT_EQUALS .
+     * @param columnName column name
+     * @param data column value
+     * @return Condition
+     */
+    public static Condition unEquals(String columnName, Object data) {
+        Object value = TransValueUtil.getFormatData(data);
+        return new Condition(columnName, Function.NOT_EQUALS, value);
+    }
+
+    /**
+     * Returns a Condition that means Function.GREATER_THAN .
+     * @param columnName column name
+     * @param data column value
+     * @return Condition
+     */
+    public static Condition greaterThan(String columnName, Object data) {
+        Object value = TransValueUtil.getFormatData(data);
+        return new Condition(columnName, Function.GREATER_THAN, value);
+    }
+
+    /**
+     * Returns a Condition that means Function.GREATER_THAN_OR_EQUALS .
+     * @param columnName column name
+     * @param data column value
+     * @return Condition
+     */
+    public static Condition greaterThanOrEquals(String columnName, Object data) {
+        Object value = TransValueUtil.getFormatData(data);
+        return new Condition(columnName, Function.GREATER_THAN_OR_EQUALS, value);
+    }
+
+    /**
+     * Returns a Condition that means Function.LESS_THAN .
+     * @param columnName column name
+     * @param data column value
+     * @return Condition
+     */
+    public static Condition lesserThan(String columnName, Object data) {
+        Object value = TransValueUtil.getFormatData(data);
+        return new Condition(columnName, Function.LESS_THAN, value);
+    }
+
+    /**
+     * Returns a Condition that means Function.LESS_THAN_OR_EQUALS .
+     * @param columnName column name
+     * @param data column value
+     * @return Condition
+     */
+    public static Condition lesserThanOrEquals(String columnName, Object data) {
+        Object value = TransValueUtil.getFormatData(data);
+        return new Condition(columnName, Function.LESS_THAN_OR_EQUALS, value);
+    }
+
+    /**
+     * Returns a Condition that means Function.INCLUDES .
+     * @param columnName column name
+     * @param data column value
+     * @return Condition
+     */
+    public static Condition includes(String columnName, Object data) {
+        Object value = TransValueUtil.getFormatData(data);
+        return new Condition(columnName, Function.INCLUDES, value);
+    }
+
+    /**
+     * Returns a Condition that means Function.EXCLUDES .
+     * @param columnName column name
+     * @param data column value
+     * @return Condition
+     */
+    public static Condition excludes(String columnName, Object data) {
+        Object value = TransValueUtil.getFormatData(data);
+        return new Condition(columnName, Function.EXCLUDES, value);
+    }
+
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java
new file mode 100644
index 0000000..8ccecbe
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java
@@ -0,0 +1,345 @@
+/*
+ * 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.rfc.utils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.onosproject.ovsdb.rfc.error.AbnormalSchemaException;
+import org.onosproject.ovsdb.rfc.error.JsonParsingException;
+import org.onosproject.ovsdb.rfc.error.UnknownResultException;
+import org.onosproject.ovsdb.rfc.jsonrpc.Callback;
+import org.onosproject.ovsdb.rfc.jsonrpc.JsonRpcResponse;
+import org.onosproject.ovsdb.rfc.message.OperationResult;
+import org.onosproject.ovsdb.rfc.message.RowUpdate;
+import org.onosproject.ovsdb.rfc.message.TableUpdate;
+import org.onosproject.ovsdb.rfc.message.TableUpdates;
+import org.onosproject.ovsdb.rfc.message.UpdateNotification;
+import org.onosproject.ovsdb.rfc.notation.Column;
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.notation.UUID;
+import org.onosproject.ovsdb.rfc.operations.Operation;
+import org.onosproject.ovsdb.rfc.schema.ColumnSchema;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+import org.onosproject.ovsdb.rfc.schema.TableSchema;
+import org.onosproject.ovsdb.rfc.schema.type.ColumnTypeFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+/**
+ * JsonNode utility class. convert JsonNode into Object.
+ */
+public final class FromJsonUtil {
+
+    private static final Logger log = LoggerFactory
+            .getLogger(FromJsonUtil.class);
+
+    /**
+     * Constructs a FromJsonUtil object. Utility classes should not have a
+     * public or default constructor, otherwise IDE will compile unsuccessfully. This
+     * class should not be instantiated.
+     */
+    private FromJsonUtil() {
+    }
+
+    /**
+     * convert JsonNode into DatabaseSchema.
+     * @param dbName database name
+     * @param json the JsonNode of get_schema result
+     * @return DatabaseSchema
+     * @throws JsonParsingException this is a JsonNode parse exception
+     */
+    public static DatabaseSchema jsonNodeToDbSchema(String dbName, JsonNode json) {
+        if (!json.isObject() || !json.has("tables")) {
+            throw new JsonParsingException(
+                                           "bad DatabaseSchema root, expected \"tables\" as child but was not found");
+        }
+        if (!json.isObject() || !json.has("version")) {
+            throw new JsonParsingException(
+                                           "bad DatabaseSchema root, expected \"version\" as child but was not found");
+        }
+
+        String dbVersion = json.get("version").asText();
+
+        Map<String, TableSchema> tables = new HashMap<>();
+        for (Iterator<Map.Entry<String, JsonNode>> iter = json.get("tables")
+                .fields(); iter.hasNext();) {
+            Map.Entry<String, JsonNode> table = iter.next();
+            tables.put(table.getKey(),
+                       jsonNodeToTableSchema(table.getKey(), table.getValue()));
+        }
+
+        return new DatabaseSchema(dbName, dbVersion, tables);
+    }
+
+    /**
+     * convert JsonNode into TableSchema.
+     * @param tableName table name
+     * @param json table JsonNode
+     * @return TableSchema
+     * @throws AbnormalSchemaException this is an abnormal schema exception
+     */
+    private static TableSchema jsonNodeToTableSchema(String tableName,
+                                                     JsonNode json) {
+
+        if (!json.isObject() || !json.has("columns")) {
+            throw new AbnormalSchemaException(
+                                              "bad tableschema root, expected \"columns\" as child");
+        }
+
+        Map<String, ColumnSchema> columns = new HashMap<>();
+        for (Iterator<Map.Entry<String, JsonNode>> iter = json.get("columns")
+                .fields(); iter.hasNext();) {
+            Map.Entry<String, JsonNode> column = iter.next();
+            columns.put(column.getKey(),
+                        jsonNodeToColumnSchema(column.getKey(),
+                                               column.getValue()));
+        }
+
+        return new TableSchema(tableName, columns);
+    }
+
+    /**
+     * convert JsonNode into ColumnSchema.
+     * @param name column name
+     * @param json JsonNode
+     * @return ColumnSchema
+     * @throws AbnormalSchemaException this is an abnormal schema exception
+     */
+    private static ColumnSchema jsonNodeToColumnSchema(String name,
+                                                       JsonNode json) {
+        if (!json.isObject() || !json.has("type")) {
+            throw new AbnormalSchemaException(
+                                              "bad column schema root, expected \"type\" as child");
+        }
+
+        return new ColumnSchema(name,
+                                ColumnTypeFactory.getColumnTypeFromJson(json
+                                        .get("type")));
+    }
+
+    /**
+     * convert JsonNode into the returnType of methods in OvsdbRPC class.
+     * @param resultJsonNode the result JsonNode
+     * @param methodName the method name of methods in OvsdbRPC class
+     * @param objectMapper ObjectMapper entity
+     * @return Object
+     * @throws UnknownResultException this is an unknown result exception
+     */
+    private static Object convertResultType(JsonNode resultJsonNode,
+                                            String methodName,
+                                            ObjectMapper objectMapper) {
+        switch (methodName) {
+        case "getSchema":
+        case "monitor":
+            return resultJsonNode;
+        case "echo":
+        case "listDbs":
+            return objectMapper
+                    .convertValue(resultJsonNode, objectMapper.getTypeFactory()
+                            .constructParametricType(List.class, String.class));
+        case "transact":
+            return objectMapper
+                    .convertValue(resultJsonNode,
+                                  objectMapper
+                                          .getTypeFactory()
+                                          .constructParametricType(List.class,
+                                                                   JsonNode.class));
+        default:
+            throw new UnknownResultException("Don't know how to handle this");
+        }
+    }
+
+    /**
+     * convert JsonNode into the returnType of methods in OvsdbRPC class.
+     * @param jsonNode the result JsonNode
+     * @param methodName the method name of methods in OvsdbRPC class
+     * @return Object
+     */
+    public static Object jsonResultParser(JsonNode jsonNode, String methodName) {
+        ObjectMapper objectMapper = ObjectMapperUtil.getObjectMapper();
+        JsonNode error = jsonNode.get("error");
+        if (error != null && !error.isNull()) {
+            log.error("Error : {}", error.toString());
+        }
+        JsonNode resultJsonNode = jsonNode.get("result");
+        Object result = convertResultType(resultJsonNode, methodName,
+                                          objectMapper);
+        return result;
+    }
+
+    /**
+     * When monitor the ovsdb tables, if a table update, ovs send update
+     * notification, then call callback function.
+     * @param jsonNode the result JsonNode
+     * @param callback the callback function
+     * @throws UnknownResultException this is an unknown result exception
+     */
+    public static void jsonCallbackRequestParser(JsonNode jsonNode,
+                                                 Callback callback) {
+        ObjectMapper objectMapper = ObjectMapperUtil.getObjectMapper();
+        JsonNode params = jsonNode.get("params");
+        Object param = null;
+        String methodName = jsonNode.get("method").asText();
+        switch (methodName) {
+        case "update":
+            param = objectMapper.convertValue(params, UpdateNotification.class);
+            callback.update((UpdateNotification) param);
+            break;
+        default:
+            throw new UnknownResultException("Cannot handle this method: "
+                    + methodName);
+        }
+    }
+
+    /**
+     * Ovs send echo request to keep the heart, need we return echo result.
+     * @param jsonNode the result JsonNode
+     * @return JsonRpcResponse String
+     */
+    public static String getEchoRequestStr(JsonNode jsonNode) {
+        ObjectMapper objectMapper = ObjectMapperUtil.getObjectMapper();
+        String str = null;
+        if (jsonNode.get("method").asText().equals("echo")) {
+            JsonRpcResponse response = new JsonRpcResponse(jsonNode.get("id")
+                    .asText());
+            try {
+                str = objectMapper.writeValueAsString(response);
+            } catch (JsonProcessingException e) {
+                log.error("JsonProcessingException while converting JsonNode into string ", e);
+            }
+        }
+        return str;
+    }
+
+    /**
+     * Convert the List of Operation result into List of OperationResult .
+     * @param input the List of JsonNode
+     * @param operations the List of Operation
+     * @return the List of OperationResult
+     */
+    public static List<OperationResult> jsonNodeToOperationResult(List<JsonNode> input,
+                                                                  List<Operation> operations) {
+        ObjectMapper objectMapper = ObjectMapperUtil.getObjectMapper(false);
+        List<OperationResult> operationResults = new ArrayList<OperationResult>();
+        for (int i = 0; i < input.size(); i++) {
+            JsonNode jsonNode = input.get(i);
+            Operation operation = operations.get(i);
+            if (jsonNode != null && jsonNode.size() > 0) {
+                if (i >= operations.size() || operation.getOp() != "select") {
+                    OperationResult or = objectMapper.convertValue(jsonNode,
+                                                   OperationResult.class);
+                    operationResults.add(or);
+                } else {
+                    List<Row> rows = createRows(operation.getTableSchema(), jsonNode);
+                    OperationResult or = new OperationResult(rows);
+                    operationResults.add(or);
+                }
+            }
+        }
+        return operationResults;
+    }
+
+    /**
+     * Convert Operation JsonNode into Rows.
+     * @param tableSchema TableSchema entity
+     * @param rowsNode JsonNode
+     * @return ArrayList<Row> the List of Row
+     */
+    private static ArrayList<Row> createRows(TableSchema tableSchema,
+                                             JsonNode rowsNode) {
+        ArrayList<Row> rows = Lists.newArrayList();
+        for (JsonNode rowNode : rowsNode.get("rows")) {
+            rows.add(createRow(tableSchema, rowNode));
+        }
+        return rows;
+    }
+
+    /**
+     * convert the params of Update Notification into TableUpdates.
+     * @param updatesJson the params of Update Notification
+     * @param dbSchema DatabaseSchema entity
+     * @return TableUpdates
+     */
+    public static TableUpdates jsonNodeToTableUpdates(JsonNode updatesJson,
+                                                      DatabaseSchema dbSchema) {
+        Map<String, TableUpdate> tableUpdateMap = Maps.newHashMap();
+        for (Iterator<Map.Entry<String, JsonNode>> itr = updatesJson.fields(); itr
+                .hasNext();) {
+            Map.Entry<String, JsonNode> entry = itr.next();
+            TableSchema tableSchema = dbSchema.getTableSchema(entry.getKey());
+            TableUpdate tableUpdate = jsonNodeToTableUpdate(tableSchema,
+                                                            entry.getValue());
+            tableUpdateMap.put(entry.getKey(), tableUpdate);
+        }
+        return TableUpdates.tableUpdates(tableUpdateMap);
+    }
+
+    /**
+     * convert the params of Update Notification into TableUpdate.
+     * @param tableSchema TableSchema entity
+     * @param value the table-update in params of Update Notification
+     * @return TableUpdate
+     */
+    public static TableUpdate jsonNodeToTableUpdate(TableSchema tableSchema,
+                                                    JsonNode value) {
+        Map<UUID, RowUpdate> rows = Maps.newHashMap();
+        Iterator<Entry<String, JsonNode>> fields = value.fields();
+        while (fields.hasNext()) {
+            Map.Entry<String, JsonNode> idOldNew = fields.next();
+            String uuidStr = idOldNew.getKey();
+            UUID uuid = UUID.uuid(uuidStr);
+            JsonNode newR = idOldNew.getValue().get("new");
+            JsonNode oldR = idOldNew.getValue().get("old");
+            Row newRow = newR != null ? createRow(tableSchema, newR) : null;
+            Row oldRow = oldR != null ? createRow(tableSchema, oldR) : null;
+            RowUpdate rowUpdate = new RowUpdate(uuid, oldRow, newRow);
+            rows.put(uuid, rowUpdate);
+        }
+        return TableUpdate.tableUpdate(rows);
+    }
+
+    /**
+     * Convert Operation JsonNode into Row.
+     * @param tableSchema TableSchema entity
+     * @param rowNode JsonNode
+     * @return Row
+     */
+    private static Row createRow(TableSchema tableSchema, JsonNode rowNode) {
+        List<Column> columns = Lists.newArrayList();
+        for (Iterator<Map.Entry<String, JsonNode>> iter = rowNode.fields(); iter
+                .hasNext();) {
+            Map.Entry<String, JsonNode> next = iter.next();
+            ColumnSchema schema = tableSchema.getColumnSchema(next.getKey());
+            if (schema != null) {
+                Object o = TransValueUtil.getValueFromJson(next.getValue(), schema.type());
+                columns.add(new Column(schema, o));
+            }
+        }
+        return new Row(tableSchema, columns);
+    }
+
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/JsonRpcReaderUtil.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/JsonRpcReaderUtil.java
new file mode 100644
index 0000000..bf1938d
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/JsonRpcReaderUtil.java
@@ -0,0 +1,172 @@
+/*
+ * 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.rfc.utils;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufInputStream;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Stack;
+
+import org.onosproject.ovsdb.rfc.error.UnsupportedEncodingException;
+import org.onosproject.ovsdb.rfc.jsonrpc.JsonReadContext;
+
+import com.fasterxml.jackson.core.JsonEncoding;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.io.IOContext;
+import com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper;
+import com.fasterxml.jackson.core.util.BufferRecycler;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.MappingJsonFactory;
+
+/**
+ * Decoder utility class.
+ */
+public final class JsonRpcReaderUtil {
+
+    /**
+     * Constructs a JsonRpcReaderUtil object. Utility classes should not have a
+     * public or default constructor, otherwise IDE will compile unsuccessfully.
+     * This class should not be instantiated.
+     */
+    private JsonRpcReaderUtil() {
+    }
+
+    /**
+     * Decode the bytes to Json object.
+     * @param in input of bytes
+     * @param out ouput of Json object list
+     * @param jrContext context for the last decoding process
+     * @throws IOException IOException
+     * @throws JsonParseException JsonParseException
+     */
+    public static void readToJsonNode(ByteBuf in, List<Object> out,
+                                      JsonReadContext jrContext)
+            throws JsonParseException, IOException {
+        int lastReadBytes = jrContext.getLastReadBytes();
+        if (lastReadBytes == 0) {
+            if (in.readableBytes() < 4) {
+                return;
+            }
+            checkEncoding(in);
+        }
+
+        int i = lastReadBytes + in.readerIndex();
+        Stack<Byte> bufStack = jrContext.getBufStack();
+        for (; i < in.writerIndex(); i++) {
+            byte b = in.getByte(i);
+            switch (b) {
+            case '{':
+                if (!isDoubleQuote(bufStack)) {
+                    bufStack.push(b);
+                    jrContext.setStartMatch(true);
+                }
+                break;
+            case '}':
+                if (!isDoubleQuote(bufStack)) {
+                    bufStack.pop();
+                }
+                break;
+            case '"':
+                if (in.getByte(i - 1) != '\\') {
+                    if (!bufStack.isEmpty() && bufStack.peek() != '"') {
+                        bufStack.push(b);
+                    } else {
+                        bufStack.pop();
+                    }
+                }
+                break;
+            default:
+                break;
+            }
+
+            if (jrContext.isStartMatch() && bufStack.isEmpty()) {
+                ByteBuf buf = in.readSlice(i - in.readerIndex() + 1);
+                JsonParser jf = new MappingJsonFactory()
+                        .createParser(new ByteBufInputStream(buf));
+                JsonNode jsonNode = jf.readValueAsTree();
+                out.add(jsonNode);
+                lastReadBytes = 0;
+                jrContext.setLastReadBytes(lastReadBytes);
+                break;
+            }
+        }
+
+        if (i >= in.writerIndex()) {
+            lastReadBytes = in.readableBytes();
+            jrContext.setLastReadBytes(lastReadBytes);
+        }
+    }
+
+    /**
+     * Filter the invalid characters before decoding.
+     * @param in input of bytes
+     * @param lastReadBytes the bytes for last decoding incomplete record
+     */
+    private static void fliterCharaters(ByteBuf in) {
+        while (in.isReadable()) {
+            int ch = in.getByte(in.readerIndex());
+            if ((ch != ' ') && (ch != '\n') && (ch != '\t') && (ch != '\r')) {
+                break;
+            } else {
+                in.readByte();
+            }
+        }
+    }
+
+    /**
+     * Check whether the peek of the stack element is double quote.
+     * @param jrContext context for the last decoding process
+     * @return boolean
+     */
+    private static boolean isDoubleQuote(Stack<Byte> bufStack) {
+        if (!bufStack.isEmpty() && bufStack.peek() == '"') {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Check whether the encoding is valid.
+     * @param in input of bytes
+     * @throws IOException this is an IO exception
+     * @throws UnsupportedEncodingException this is an unsupported encode
+     *             exception
+     */
+    private static void checkEncoding(ByteBuf in) throws IOException {
+        int inputStart = 0;
+        int inputLength = 4;
+        fliterCharaters(in);
+        byte[] buff = new byte[4];
+        in.getBytes(in.readerIndex(), buff);
+        ByteSourceJsonBootstrapper strapper = new ByteSourceJsonBootstrapper(
+                                                                             new IOContext(
+                                                                                           new BufferRecycler(),
+                                                                                           null,
+                                                                                           false),
+                                                                             buff,
+                                                                             inputStart,
+                                                                             inputLength);
+        JsonEncoding jsonEncoding = strapper.detectEncoding();
+        if (!JsonEncoding.UTF8.equals(jsonEncoding)) {
+            throw new UnsupportedEncodingException(
+                                                   "Only UTF-8 encoding is supported.");
+        }
+    }
+
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/JsonRpcWriterUtil.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/JsonRpcWriterUtil.java
new file mode 100644
index 0000000..7511c36
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/JsonRpcWriterUtil.java
@@ -0,0 +1,114 @@
+/*
+ * 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.rfc.utils;
+
+import java.util.List;
+
+import org.onosproject.ovsdb.rfc.jsonrpc.JsonRpcRequest;
+import org.onosproject.ovsdb.rfc.operations.Operation;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+
+/**
+ * RPC Methods request utility class. Refer to RFC7047's Section 4.1.
+ */
+public final class JsonRpcWriterUtil {
+
+    /**
+     * Constructs a JsonRpcWriterUtil object. Utility classes should not have a
+     * public or default constructor, otherwise IDE will compile unsuccessfully.
+     * This class should not be instantiated.
+     */
+    private JsonRpcWriterUtil() {
+    }
+
+    /**
+     * Returns string of RPC request.
+     * @param uuid id of request object
+     * @param methodName method of request object
+     * @param params params of request object
+     * @return RPC Request String
+     */
+    private static String getRequestStr(String uuid, String methodName,
+                                        List params) {
+        JsonRpcRequest request;
+        if (params != null) {
+            request = new JsonRpcRequest(uuid, methodName, params);
+        } else {
+            request = new JsonRpcRequest(uuid, methodName);
+        }
+        String str = ObjectMapperUtil.convertToString(request);
+        return str;
+    }
+
+    /**
+     * Returns string of get_schema request.
+     * @param uuid id of get_schema request
+     * @param dbnames params of get_schema request
+     * @return get_schema Request String
+     */
+    public static String getSchemaStr(String uuid, List<String> dbnames) {
+        String methodName = "get_schema";
+        return getRequestStr(uuid, methodName, dbnames);
+    }
+
+    /**
+     * Returns string of echo request.
+     * @param uuid id of echo request
+     * @return echo Request String
+     */
+    public static String echoStr(String uuid) {
+        String methodName = "echo";
+        return getRequestStr(uuid, methodName, null);
+    }
+
+    /**
+     * Returns string of monitor request.
+     * @param uuid id of monitor request
+     * @param monotorId json-value in params of monitor request
+     * @param dbSchema DatabaseSchema entity
+     * @return monitor Request String
+     */
+    public static String monitorStr(String uuid, String monotorId,
+                                    DatabaseSchema dbSchema) {
+        String methodName = "monitor";
+        return getRequestStr(uuid, methodName,
+                             ParamUtil.getMonitorParams(monotorId, dbSchema));
+    }
+
+    /**
+     * Returns string of list_dbs request.
+     * @param uuid id of list_dbs request
+     * @return list_dbs Request String
+     */
+    public static String listDbsStr(String uuid) {
+        String methodName = "list_dbs";
+        return getRequestStr(uuid, methodName, null);
+    }
+
+    /**
+     * Returns string of transact request.
+     * @param uuid id of transact request
+     * @param dbSchema DatabaseSchema entity
+     * @param operations operation* in params of transact request
+     * @return transact Request String
+     */
+    public static String transactStr(String uuid, DatabaseSchema dbSchema,
+                                     List<Operation> operations) {
+        String methodName = "transact";
+        return getRequestStr(uuid, methodName,
+                             ParamUtil.getTransactParams(dbSchema, operations));
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/MutationUtil.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/MutationUtil.java
new file mode 100644
index 0000000..5ab2b7a
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/MutationUtil.java
@@ -0,0 +1,92 @@
+package org.onosproject.ovsdb.rfc.utils;

+

+import org.onosproject.ovsdb.rfc.notation.Mutation;

+import org.onosproject.ovsdb.rfc.notation.Mutation.Mutator;

+

+public final class MutationUtil {

+

+    /**

+     * Constructs a MutationUtil object. Utility classes should not have a

+     * public or default constructor, otherwise IDE will compile unsuccessfully. This

+     * class should not be instantiated.

+     */

+    private MutationUtil() {

+    }

+

+    /**

+     * Returns a Mutation that means += .

+     * @param columnName column name

+     * @param data column value

+     * @return Mutation

+     */

+    public static Mutation sum(String columnName, Object data) {

+        Object value = TransValueUtil.getFormatData(data);

+        return new Mutation(columnName, Mutator.SUM, value);

+    }

+

+    /**

+     * Returns a Mutation that means -= .

+     * @param columnName column name

+     * @param data column value

+     * @return Mutation

+     */

+    public static Mutation difference(String columnName, Object data) {

+        Object value = TransValueUtil.getFormatData(data);

+        return new Mutation(columnName, Mutator.DIFFERENCE, value);

+    }

+

+    /**

+     * Returns a Mutation that means *= .

+     * @param columnName column name

+     * @param data column value

+     * @return Mutation

+     */

+    public static Mutation product(String columnName, Object data) {

+        Object value = TransValueUtil.getFormatData(data);

+        return new Mutation(columnName, Mutator.PRODUCT, value);

+    }

+

+    /**

+     * Returns a Mutation that means /= .

+     * @param columnName column name

+     * @param data column value

+     * @return Mutation

+     */

+    public static Mutation quotient(String columnName, Object data) {

+        Object value = TransValueUtil.getFormatData(data);

+        return new Mutation(columnName, Mutator.QUOTIENT, value);

+    }

+

+    /**

+     * Returns a Mutation that means %= .

+     * @param columnName column name

+     * @param data column value

+     * @return Mutation

+     */

+    public static Mutation remainder(String columnName, Object data) {

+        Object value = TransValueUtil.getFormatData(data);

+        return new Mutation(columnName, Mutator.REMAINDER, value);

+    }

+

+    /**

+     * Returns a Mutation that means insert .

+     * @param columnName column name

+     * @param data column value

+     * @return Mutation

+     */

+    public static Mutation insert(String columnName, Object data) {

+        Object value = TransValueUtil.getFormatData(data);

+        return new Mutation(columnName, Mutator.INSERT, value);

+    }

+

+    /**

+     * Returns a Mutation that means delete .

+     * @param columnName column name

+     * @param data column value

+     * @return Mutation

+     */

+    public static Mutation delete(String columnName, Object data) {

+        Object value = TransValueUtil.getFormatData(data);

+        return new Mutation(columnName, Mutator.DELETE, value);

+    }

+}

diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/ParamUtil.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/ParamUtil.java
new file mode 100644
index 0000000..d11356e
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/ParamUtil.java
@@ -0,0 +1,98 @@
+/*
+ * 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.rfc.utils;
+
+import java.util.List;
+import java.util.Set;
+
+import org.onosproject.ovsdb.rfc.message.MonitorRequest;
+import org.onosproject.ovsdb.rfc.message.MonitorSelect;
+import org.onosproject.ovsdb.rfc.operations.Operation;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+import org.onosproject.ovsdb.rfc.schema.TableSchema;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+/**
+ * Params utility class. Params of the request object, refer to RFC7047's Section
+ * 4.1.
+ */
+public final class ParamUtil {
+
+    /**
+     * Constructs a ParamUtil object. Utility classes should not have a
+     * public or default constructor, otherwise IDE will compile unsuccessfully. This
+     * class should not be instantiated.
+     */
+    private ParamUtil() {
+    }
+
+    /**
+     * Returns MonitorRequest, refer to RFC7047's Section 4.1.5.
+     * @param tableSchema entity
+     * @return MonitorRequest
+     */
+    private static MonitorRequest getAllColumnsMonitorRequest(TableSchema tableSchema) {
+        String tableName = tableSchema.name();
+        Set<String> columns = tableSchema.getColumnNames();
+        MonitorSelect select = new MonitorSelect(true, true, true, true);
+        MonitorRequest monitorRequest = new MonitorRequest(tableName, columns,
+                                                           select);
+        return monitorRequest;
+    }
+
+    /**
+     * Returns params of monitor method, refer to RFC7047's Section 4.1.5.
+     * @param monotorId json-value, refer to RFC7047's Section 4.1.5.
+     * @param dbSchema DatabaseSchema entity
+     * @return List of Object, the params of monitor request
+     */
+    public static List<Object> getMonitorParams(String monotorId,
+                                                DatabaseSchema dbSchema) {
+        Set<String> tables = dbSchema.getTableNames();
+        List<MonitorRequest> monitorRequests = Lists.newArrayList();
+        for (String tableName : tables) {
+            TableSchema tableSchema = dbSchema.getTableSchema(tableName);
+            monitorRequests.add(getAllColumnsMonitorRequest(tableSchema));
+        }
+        ImmutableMap<String, MonitorRequest> reqMap = Maps
+                .uniqueIndex(monitorRequests,
+                             new Function<MonitorRequest, String>() {
+                                 @Override
+                                 public String apply(MonitorRequest input) {
+                                     return input.getTableName();
+                                 }
+                             });
+        return Lists.<Object>newArrayList(dbSchema.name(), monotorId,
+                                           reqMap);
+    }
+
+    /**
+     * Returns params of transact method, refer to RFC7047's Section 4.1.3.
+     * @param dbSchema DatabaseSchema entity
+     * @param operations operation*, refer to RFC7047's Section 4.1.3.
+     * @return List of Object, the params of transact request
+     */
+    public static List<Object> getTransactParams(DatabaseSchema dbSchema,
+                                                 List<Operation> operations) {
+        List<Object> lists = Lists.newArrayList((Object) dbSchema.name());
+        lists.addAll(operations);
+        return lists;
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/StringEncoderUtil.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/StringEncoderUtil.java
new file mode 100644
index 0000000..0e414d8
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/StringEncoderUtil.java
@@ -0,0 +1,42 @@
+/*
+ * 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.rfc.utils;
+
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+/**
+ * StringEncoder utility class.Only UTF-8 encoding is supported refer to
+ * RFC7047's Section 3.1.
+ */
+public final class StringEncoderUtil {
+
+    /**
+     * Constructs a StringEncoderUtil object. Utility classes should not have a
+     * public or default constructor, otherwise IDE will compile unsuccessfully. This
+     * class should not be instantiated.
+     */
+    private StringEncoderUtil() {
+    }
+
+    /**
+     * Returns StringEncoder of UTF_8 .
+     * @return StringEncoder
+     */
+    public static StringEncoder getEncoder() {
+        return new StringEncoder(CharsetUtil.UTF_8);
+    }
+}
diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/VersionUtil.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/VersionUtil.java
new file mode 100644
index 0000000..9c5e970
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/VersionUtil.java
@@ -0,0 +1,57 @@
+/*
+ * 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.rfc.utils;
+
+/**
+ * Version utility class.
+ */
+public final class VersionUtil {
+
+    /**
+     * Constructs a VersionUtil object. Utility classes should not have a public
+     * or default constructor, otherwise IDE will compile unsuccessfully. This
+     * class should not be instantiated.
+     */
+    private VersionUtil() {
+    }
+
+    public static final String DEFAULT_VERSION_STRING = "0.0.0";
+    private static final String FORMAT = "(\\d+)\\.(\\d+)\\.(\\d+)";
+
+    /**
+     * Match version by the format.
+     * @param version the version String
+     * @throws IllegalArgumentException this is an illegal argument exception
+     */
+    public static void versionMatch(String version) {
+        if (!version.matches(FORMAT)) {
+            throw new IllegalArgumentException("<" + version
+                    + "> does not match format " + FORMAT);
+        }
+    }
+
+    /**
+     * Compare fromVersion and toVersion.
+     * @param fromVersion the initial version
+     * @param toVersion the end of the version
+     * @return a long number
+     */
+    public static long versionCompare(String fromVersion, String toVersion) {
+        Long fromNum = Long.parseLong(fromVersion.replace(".", ""));
+        Long toNum = Long.parseLong(toVersion.replace(".", ""));
+        return (fromNum - toNum);
+    }
+}