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.
*