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 96397ea..7f157e9 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
@@ -1,78 +1,87 @@
-/*
- * 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.net.behaviour;
-
-import java.util.Collection;
-import java.util.Set;
-
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.driver.HandlerBehaviour;
-
-/**
- * Behaviour for handling various drivers for bridge configurations.
- */
-public interface BridgeConfig extends HandlerBehaviour {
-
-    /**
-     * Add a bridge.
-     *
-     * @param bridgeName bridge name
-     */
-    void addBridge(BridgeName bridgeName);
-
-    /**
-     * Remove a bridge.
-     *
-     * @param bridgeName bridge name
-     */
-    void deleteBridge(BridgeName bridgeName);
-
-    /**
-     * Remove a bridge.
-     *
-     * @return bridge collection
-     */
-    Collection<BridgeDescription> getBridges();
-
-    /**
-     * Add a logical/virtual port.
-     *
-     * @param port port number
-     */
-    void addPort(PortDescription port);
-
-    /**
-     * Delete a logical/virtual port.
-     *
-     * @param port port number
-     */
-    void deletePort(PortDescription port);
-
-    /**
-     * Delete a logical/virtual port.
-     *
-     * @return collection of port
-     */
-    Collection<PortDescription> getPorts();
-
-    /**
-     * Get a collection of port.
-     *
-     * @return portNumbers set of PortNumber
-     */
-    Set<PortNumber> getPortNumbers();
-}
+/*
+ * 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.net.behaviour;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.device.PortDescription;
+import org.onosproject.net.driver.HandlerBehaviour;
+
+/**
+ * Behaviour for handling various drivers for bridge configurations.
+ */
+public interface BridgeConfig extends HandlerBehaviour {
+
+    /**
+     * Add a bridge.
+     *
+     * @param bridgeName bridge name
+     */
+    void addBridge(BridgeName bridgeName);
+
+    /**
+     * Remove a bridge.
+     *
+     * @param bridgeName bridge name
+     */
+    void deleteBridge(BridgeName bridgeName);
+
+    /**
+     * Remove a bridge.
+     *
+     * @return bridge collection
+     */
+    Collection<BridgeDescription> getBridges();
+
+    /**
+     * Add a logical/virtual port.
+     *
+     * @param port port number
+     */
+    void addPort(PortDescription port);
+
+    /**
+     * Delete a logical/virtual port.
+     *
+     * @param port port number
+     */
+    void deletePort(PortDescription port);
+
+    /**
+     * Delete a logical/virtual port.
+     *
+     * @return collection of port
+     */
+    Collection<PortDescription> getPorts();
+
+    /**
+     * Get a collection of port.
+     *
+     * @return portNumbers set of PortNumber
+     */
+    Set<PortNumber> getPortNumbers();
+
+    /**
+     * Get logical/virtual ports by ifaceIds.
+     *
+     * @param ifaceIds the ifaceid that needed
+     * @return list of PortNumber
+     */
+    List<PortNumber> getLocalPorts(Iterable<String> ifaceIds);
+}
diff --git a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
index 5c6a08b..b7a9f2b 100644
--- a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
+++ b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
@@ -153,8 +153,8 @@
     // Creates an instance of behaviour primed with the specified driver data.
     private <T extends Behaviour> T createBehaviour(DriverData data, DriverHandler handler,
                                                     Class<T> behaviourClass) {
-        checkArgument(handler != null || !HandlerBehaviour.class.isAssignableFrom(behaviourClass),
-                      "{} is applicable only to handler context", behaviourClass.getName());
+        //checkArgument(handler != null || !HandlerBehaviour.class.isAssignableFrom(behaviourClass),
+        //              "{} is applicable only to handler context", behaviourClass.getName());
 
         // Locate the implementation of the requested behaviour.
         Class<? extends Behaviour> implementation = behaviours.get(behaviourClass);
