Support STT tunneling protocol at kubevirt networking app
Change-Id: Icbef76dbfb842ce1cf6893bf18ee80c4b1b26006
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
index 39ca033..3d2f14c 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
@@ -31,6 +31,7 @@
public static final String VXLAN = "vxlan";
public static final String GRE = "gre";
public static final String GENEVE = "geneve";
+ public static final String STT = "stt";
public static final String INTEGRATION_BRIDGE = "br-int";
public static final String TUNNEL_BRIDGE = "br-tun";
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
index f647503..45c2e6c 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
@@ -35,6 +35,7 @@
import static org.onosproject.kubevirtnode.api.Constants.GENEVE;
import static org.onosproject.kubevirtnode.api.Constants.GRE;
import static org.onosproject.kubevirtnode.api.Constants.INTEGRATION_TO_PHYSICAL_PREFIX;
+import static org.onosproject.kubevirtnode.api.Constants.STT;
import static org.onosproject.kubevirtnode.api.Constants.VXLAN;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
@@ -222,6 +223,11 @@
}
@Override
+ public PortNumber sttPort() {
+ return tunnelPort(STT);
+ }
+
+ @Override
public String gatewayBridgeName() {
return gatewayBridgeName;
}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
index 45cb87a..8c4844d 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
@@ -175,6 +175,13 @@
PortNumber genevePort();
/**
+ * Returns the STT tunnel port number.
+ *
+ * @return STT port number; null if the STT tunnel port does not exist
+ */
+ PortNumber sttPort();
+
+ /**
* Returns the name of the gateway bridge.
*
* @return gateway bridge name
diff --git a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/cli/KubevirtCheckNodeCommand.java b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/cli/KubevirtCheckNodeCommand.java
index 06297c2..3df42bb 100644
--- a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/cli/KubevirtCheckNodeCommand.java
+++ b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/cli/KubevirtCheckNodeCommand.java
@@ -30,6 +30,7 @@
import static org.onosproject.kubevirtnode.api.Constants.GENEVE;
import static org.onosproject.kubevirtnode.api.Constants.GRE;
import static org.onosproject.kubevirtnode.api.Constants.INTEGRATION_BRIDGE;
+import static org.onosproject.kubevirtnode.api.Constants.STT;
import static org.onosproject.kubevirtnode.api.Constants.TUNNEL_BRIDGE;
import static org.onosproject.kubevirtnode.api.Constants.VXLAN;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
@@ -87,6 +88,7 @@
printPortState(deviceService, node.tunBridge(), VXLAN);
printPortState(deviceService, node.tunBridge(), GRE);
printPortState(deviceService, node.tunBridge(), GENEVE);
+ printPortState(deviceService, node.tunBridge(), STT);
}
}
}
diff --git a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/DefaultKubevirtNodeHandler.java b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/DefaultKubevirtNodeHandler.java
index 3408ed1..00aa0bf 100644
--- a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/DefaultKubevirtNodeHandler.java
+++ b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/DefaultKubevirtNodeHandler.java
@@ -82,6 +82,7 @@
import static org.onosproject.kubevirtnode.api.Constants.INTEGRATION_TO_PHYSICAL_PREFIX;
import static org.onosproject.kubevirtnode.api.Constants.INTEGRATION_TO_TUNNEL;
import static org.onosproject.kubevirtnode.api.Constants.PHYSICAL_TO_INTEGRATION_SUFFIX;
+import static org.onosproject.kubevirtnode.api.Constants.STT;
import static org.onosproject.kubevirtnode.api.Constants.TENANT_BRIDGE_PREFIX;
import static org.onosproject.kubevirtnode.api.Constants.TUNNEL_BRIDGE;
import static org.onosproject.kubevirtnode.api.Constants.TUNNEL_TO_INTEGRATION;
@@ -244,6 +245,10 @@
if (node.dataIp() != null && !isIntfEnabled(node, GENEVE)) {
createGeneveTunnelInterface(node);
}
+
+ if (node.dataIp() != null && !isIntfEnabled(node, STT)) {
+ createSttTunnelInterface(node);
+ }
} catch (Exception e) {
log.error("Exception occurred because of {}", e);
}
@@ -362,6 +367,10 @@
createTunnelInterface(node, GENEVE, GENEVE);
}
+ private void createSttTunnelInterface(KubevirtNode node) {
+ createTunnelInterface(node, STT, STT);
+ }
+
/**
* Creates a tunnel interface in a given kubernetes node.
*
@@ -396,7 +405,7 @@
*/
private TunnelDescription buildTunnelDesc(String type, String intfName) {
TunnelKey<String> key = new TunnelKey<>(FLOW_KEY);
- if (VXLAN.equals(type) || GRE.equals(type) || GENEVE.equals(type)) {
+ if (VXLAN.equals(type) || GRE.equals(type) || GENEVE.equals(type) || STT.equals(type)) {
TunnelDescription.Builder tdBuilder =
DefaultTunnelDescription.builder()
.deviceId(TUNNEL_BRIDGE)
@@ -414,6 +423,9 @@
case GENEVE:
tdBuilder.type(TunnelDescription.Type.GENEVE);
break;
+ case STT:
+ tdBuilder.type(TunnelDescription.Type.STT);
+ break;
default:
return null;
}
@@ -557,6 +569,8 @@
return false;
}
+ // we make the STT tunnel port check optional
+
for (KubevirtPhyInterface phyIntf : node.phyIntfs()) {
if (phyIntf == null) {
log.warn("Physnet interface is invalid");
@@ -963,7 +977,8 @@
if (node.state() == DEVICE_CREATED && (
Objects.equals(portName, VXLAN) ||
Objects.equals(portName, GRE) ||
- Objects.equals(portName, GENEVE))) {
+ Objects.equals(portName, GENEVE) ||
+ Objects.equals(portName, STT))) {
log.info("Interface {} added or updated to {}",
portName, device.id());
bootstrapNode(node);
@@ -985,7 +1000,8 @@
if (node.state() == COMPLETE && (
Objects.equals(portName, VXLAN) ||
Objects.equals(portName, GRE) ||
- Objects.equals(portName, GENEVE))) {
+ Objects.equals(portName, GENEVE) ||
+ Objects.equals(portName, STT))) {
log.warn("Interface {} removed from {}", portName, device.id());
setState(node, INCOMPLETE);
}