Create/remove tenant bridge per tenant network at kubevirt app

Change-Id: I43ccf21db561edb9c51c2d8017dc4f614c5f0a4d
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
index 79c535d..6c0bf8b 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
@@ -16,8 +16,10 @@
 package org.onosproject.kubevirtnetworking.api;
 
 import com.google.common.base.MoreObjects;
+import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
 import org.onlab.packet.IpAddress;
+import org.onosproject.net.DeviceId;
 
 import java.util.HashSet;
 import java.util.Objects;
@@ -25,6 +27,9 @@
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.FLAT;
+import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.GENEVE;
+import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.GRE;
+import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VXLAN;
 
 /**
  * Default implementation class of kubevirt network.
@@ -32,6 +37,8 @@
 public final class DefaultKubevirtNetwork implements KubevirtNetwork {
 
     private static final String NOT_NULL_MSG = "Network % cannot be null";
+    private static final String TENANT_BRIDGE_PREFIX = "br-int-";
+    private static final String OF_PREFIX = "of:";
 
     private final String networkId;
     private final Type type;
@@ -133,6 +140,25 @@
     }
 
     @Override
+    public String tenantBridgeName() {
+        if (type == VXLAN || type == GRE || type == GENEVE) {
+            return TENANT_BRIDGE_PREFIX + segmentIdHex(segmentId);
+        }
+        return null;
+    }
+
+    @Override
+    public DeviceId tenantDeviceId(String hostname) {
+        if (type == VXLAN || type == GRE || type == GENEVE) {
+            String dpid = genDpidFromName(tenantBridgeName() + "-" + hostname);
+            if (dpid != null) {
+                return DeviceId.deviceId(dpid);
+            }
+        }
+        return null;
+    }
+
+    @Override
     public boolean equals(Object o) {
         if (this == o) {
             return true;
@@ -171,6 +197,20 @@
                 .toString();
     }
 
+    private String segmentIdHex(String segIdStr) {
+        int segId = Integer.parseInt(segIdStr);
+        return String.format("%06x", segId).toLowerCase();
+    }
+
+    private String genDpidFromName(String name) {
+        if (name != null) {
+            String hexString = Integer.toHexString(name.hashCode());
+            return OF_PREFIX + Strings.padStart(hexString, 16, '0');
+        }
+
+        return null;
+    }
+
     /**
      * Returns new builder instance.
      *