diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java b/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java
index 7f157e9..e3d6993 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java
@@ -36,6 +36,17 @@
     void addBridge(BridgeName bridgeName);
 
     /**
+     * Adds a bridge with given bridge name and dpid, and sets the controller
+     * of the bridge with given controllers.
+     *
+     * @param bridgeName bridge name
+     * @param dpid dpid
+     * @param controllers list of controller
+     * @return true if succeeds, fail otherwise
+     */
+    boolean addBridge(BridgeName bridgeName, String dpid, List<ControllerInfo> controllers);
+
+    /**
      * Remove a bridge.
      *
      * @param bridgeName bridge name
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java b/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java
index 7e79a57..e3b4c19 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java
@@ -32,6 +32,15 @@
     void createTunnel(TunnelDescription tunnel);
 
     /**
+     * Creates a tunnel interface on a given bridge of this device.
+     *
+     * @param bridgeName bridge name
+     * @param tunnel tunnel description
+     * @return true if succeeds, false otherwise
+     */
+    boolean createTunnelInterface(BridgeName bridgeName, TunnelDescription tunnel);
+
+    /**
      * Removes a tunnel on this device.
      *
      * @param tunnel tunnel descriptor
diff --git a/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbBridgeConfig.java b/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbBridgeConfig.java
index 899f18d..1fdec74 100644
--- a/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbBridgeConfig.java
+++ b/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbBridgeConfig.java
@@ -22,11 +22,13 @@
 import java.util.stream.Collectors;
 
 import org.onlab.packet.IpAddress;
+import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.behaviour.BridgeConfig;
 import org.onosproject.net.behaviour.BridgeDescription;
 import org.onosproject.net.behaviour.BridgeName;
+import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.net.behaviour.DefaultBridgeDescription;
 import org.onosproject.net.device.DefaultPortDescription;
 import org.onosproject.net.device.PortDescription;
@@ -52,6 +54,13 @@
     }
 
     @Override
+    public boolean addBridge(BridgeName bridgeName, String dpid, List<ControllerInfo> controllers) {
+        DriverHandler handler = handler();
+        OvsdbClientService clientService = getOvsdbClientService(handler);
+        return clientService.createBridge(bridgeName.name(), dpid, controllers);
+    }
+
+    @Override
     public void deleteBridge(BridgeName bridgeName) {
         DriverHandler handler = handler();
         OvsdbClientService clientService = getOvsdbClientService(handler);
@@ -108,9 +117,10 @@
         return ports.stream()
                 .map(x -> new DefaultPortDescription(
                                 PortNumber.portNumber(x.portNumber().value()),
-                                true
-                        )
-                )
+                                true,
+                                DefaultAnnotations.builder()
+                                        .set("portName", x.portName().value())
+                                        .build()))
                 .collect(Collectors.toSet());
     }
 
diff --git a/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbTunnelConfig.java b/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbTunnelConfig.java
index 0b3a99a2..6c0f111 100644
--- a/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbTunnelConfig.java
+++ b/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbTunnelConfig.java
@@ -16,11 +16,14 @@
 package org.onosproject.driver.ovsdb;
 
 import java.util.Collection;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.onlab.packet.IpAddress;
+import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.behaviour.BridgeName;
 import org.onosproject.net.behaviour.DefaultTunnelDescription;
 import org.onosproject.net.behaviour.IpTunnelEndPoint;
 import org.onosproject.net.behaviour.TunnelConfig;
@@ -40,6 +43,8 @@
         implements TunnelConfig {
 
     private static final String DEFAULT_ADDRESS = "0.0.0.0";
+    private static final String OPTION_LOCAL_IP = "local_ip";
+    private static final String OPTION_REMOTE_IP = "remote_ip";
 
     @Override
     public void createTunnel(TunnelDescription tunnel) {
@@ -60,6 +65,22 @@
     }
 
     @Override
+    public boolean createTunnelInterface(BridgeName bridgeName, TunnelDescription tunnel) {
+        Map<String, String> options = ((DefaultAnnotations) tunnel.annotations()).asMap();
+        if (tunnel.src() != null) {
+            options.put(OPTION_LOCAL_IP, tunnel.src().toString());
+        }
+        if (tunnel.dst() != null) {
+            options.put(OPTION_REMOTE_IP, tunnel.dst().toString());
+        }
+
+        DriverHandler handler = handler();
+        OvsdbClientService ovsdbClient = getOvsdbNode(handler);
+        return ovsdbClient.createTunnel(bridgeName.name(), tunnel.tunnelName().toString(),
+                                        tunnel.type().toString().toLowerCase(), options);
+    }
+
+    @Override
     public void removeTunnel(TunnelDescription tunnel) {
         DriverHandler handler = handler();
         OvsdbClientService ovsdbNode = getOvsdbNode(handler);
