Recover the OVS dataplane ports in case conf.db is corrupted

Change-Id: Id58ffadcfa559fa697486adce27088b87d7377e7
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
index ef1b4d0..5402ca5 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
@@ -25,6 +25,7 @@
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpException;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
@@ -70,6 +71,9 @@
 import org.onosproject.openstacknode.api.OpenstackAuth.Perspective;
 import org.onosproject.openstacknode.api.OpenstackNode;
 import org.onosproject.openstacknode.api.OpenstackSshAuth;
+import org.onosproject.ovsdb.controller.OvsdbClientService;
+import org.onosproject.ovsdb.controller.OvsdbController;
+import org.onosproject.ovsdb.controller.OvsdbNodeId;
 import org.openstack4j.api.OSClient;
 import org.openstack4j.api.client.IOSClientBuilder;
 import org.openstack4j.api.exceptions.AuthenticationException;
@@ -182,6 +186,8 @@
     private static final long WAIT_OUTPUT_STREAM_SECOND = 2;
     private static final int SSH_PORT = 22;
 
+    private static final int TAP_PORT_LENGTH = 11;
+
     /**
      * Prevents object instantiation from external.
      */
@@ -1216,6 +1222,34 @@
                 .delete();
     }
 
+    /**
+     * Gets the ovsdb client with supplied openstack node.
+     *
+     * @param node          openstack node
+     * @param ovsdbPort     openvswitch DB port number
+     * @param controller    openvswitch DB controller instance
+     * @return ovsdb client instance
+     */
+    public static OvsdbClientService getOvsdbClient(OpenstackNode node, int ovsdbPort,
+                                                    OvsdbController controller) {
+        OvsdbNodeId ovsdb = new OvsdbNodeId(node.managementIp(), ovsdbPort);
+        return controller.getOvsdbClient(ovsdb);
+    }
+
+    /**
+     * Obtains the name of interface attached to the openstack VM.
+     *
+     * @param portId openstack port identifier
+     * @return name of interface
+     */
+    public static String ifaceNameFromOsPortId(String portId) {
+        if (portId != null) {
+            return PORT_NAME_PREFIX_VM + StringUtils.substring(portId, 0, TAP_PORT_LENGTH);
+        }
+
+        return null;
+    }
+
     private static Router getRouterFromSubnet(Subnet subnet,
                                               OpenstackRouterService osRouterService) {
         RouterInterface osRouterIface = osRouterService.routerInterfaces().stream()