Support STT tunneling protocol at kubevirt networking app
Change-Id: Icbef76dbfb842ce1cf6893bf18ee80c4b1b26006
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 2745e46..b133073 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
@@ -35,6 +35,7 @@
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.STT;
import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VXLAN;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
@@ -157,7 +158,7 @@
@Override
public String tenantBridgeName() {
- if (type == VXLAN || type == GRE || type == GENEVE) {
+ if (type == VXLAN || type == GRE || type == GENEVE || type == STT) {
return TENANT_BRIDGE_PREFIX + segmentIdHex(segmentId);
}
return null;
@@ -165,7 +166,7 @@
@Override
public DeviceId tenantDeviceId(String hostname) {
- if (type == VXLAN || type == GRE || type == GENEVE) {
+ if (type == VXLAN || type == GRE || type == GENEVE || type == STT) {
String dpid = genDpidFromName(tenantBridgeName() + "-" + hostname);
return DeviceId.deviceId(dpid);
}
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
index 493d80a..104ffc8 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
@@ -118,7 +118,8 @@
} else {
return network.type() == KubevirtNetwork.Type.VXLAN ||
network.type() == KubevirtNetwork.Type.GRE ||
- network.type() == KubevirtNetwork.Type.GENEVE;
+ network.type() == KubevirtNetwork.Type.GENEVE ||
+ network.type() == KubevirtNetwork.Type.STT;
}
}
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
index 2db552e..852e669 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
@@ -47,6 +47,11 @@
GENEVE,
/**
+ * STT typed virtual network.
+ */
+ STT,
+
+ /**
* FLAT typed provider network.
*/
FLAT,
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
index e9ab1fe..2d5b87d 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
@@ -72,6 +72,7 @@
import static org.onosproject.kubevirtnetworking.api.Constants.TUNNEL_DEFAULT_TABLE;
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.STT;
import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VXLAN;
import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.buildGarpPacket;
import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.externalPatchPortNum;
@@ -164,7 +165,8 @@
}
KubevirtNetwork kubevirtNetwork = kubevirtNetworkService.network(kubevirtPort.networkId());
- if (kubevirtNetwork.type() == VXLAN || kubevirtNetwork.type() == GENEVE || kubevirtNetwork.type() == GRE) {
+ if (kubevirtNetwork.type() == VXLAN || kubevirtNetwork.type() == GENEVE ||
+ kubevirtNetwork.type() == GRE || kubevirtNetwork.type() == STT) {
setFloatingIpDownstreamRulesToGatewayTunBridge(floatingIp,
electedGw, kubevirtNetwork, kubevirtPort, install);
}
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtLbHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtLbHandler.java
index ba352eb..55b84f1 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtLbHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtLbHandler.java
@@ -83,6 +83,7 @@
import static org.onosproject.kubevirtnetworking.api.Constants.TUNNEL_DEFAULT_TABLE;
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.STT;
import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VXLAN;
import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.buildGarpPacket;
import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.externalPatchPortNum;
@@ -237,7 +238,7 @@
setLbDownstreamRules(loadBalancer, router, gateway, true);
setLbUpstreamRules(loadBalancer, router, gateway, true);
- if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE) {
+ if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE || network.type() == STT) {
setLbDownStreamRulesForTunBridge(loadBalancer, gateway, true);
}
}
@@ -274,7 +275,8 @@
setLbDownstreamRules(old, oldRouter, oldGateway, false);
setLbUpstreamRules(old, oldRouter, oldGateway, false);
- if (oldNetwork.type() == VXLAN || oldNetwork.type() == GENEVE || oldNetwork.type() == GRE) {
+ if (oldNetwork.type() == VXLAN || oldNetwork.type() == GENEVE ||
+ oldNetwork.type() == GRE || oldNetwork.type() == STT) {
setLbDownStreamRulesForTunBridge(loadBalancer, oldGateway, false);
}
setBucketsToGroup(old, oldGateway, false);
@@ -310,7 +312,8 @@
setBucketsToGroup(loadBalancer, gateway, true);
setLbDownstreamRules(loadBalancer, router, gateway, true);
setLbUpstreamRules(loadBalancer, router, gateway, true);
- if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE) {
+ if (network.type() == VXLAN || network.type() == GENEVE ||
+ network.type() == GRE || network.type() == STT) {
setLbDownStreamRulesForTunBridge(loadBalancer, gateway, true);
}
}
@@ -350,7 +353,7 @@
setBucketsToGroup(loadBalancer, gateway, false);
setLbGroup(loadBalancer, gateway, false);
- if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE) {
+ if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE || network.type() == STT) {
setLbDownStreamRulesForTunBridge(loadBalancer, gateway, false);
}
}
@@ -747,7 +750,8 @@
setLbUpstreamRules(loadBalancer, router, gatewayNode, true);
KubevirtNetwork network = networkService.network(loadBalancer.networkId());
- if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE) {
+ if (network.type() == VXLAN || network.type() == GENEVE ||
+ network.type() == GRE || network.type() == STT) {
setLbDownStreamRulesForTunBridge(loadBalancer, gatewayNode, true);
}
@@ -781,7 +785,8 @@
setLbGroup(loadBalancer, gatewayNode, false);
KubevirtNetwork network = networkService.network(loadBalancer.networkId());
- if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE) {
+ if (network.type() == VXLAN || network.type() == GENEVE ||
+ network.type() == GRE || network.type() == STT) {
setLbDownStreamRulesForTunBridge(loadBalancer, gatewayNode, false);
}
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
index 482676f..1ea11e5 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
@@ -469,6 +469,7 @@
case VXLAN:
case GRE:
case GENEVE:
+ case STT:
setDefaultEgressRuleToGatewayNode(router, network,
electedGateway.intgBridge(), install);
kubevirtNodeService.completeNodes(WORKER).forEach(node -> {
@@ -1208,6 +1209,7 @@
case VXLAN:
case GRE:
case GENEVE:
+ case STT:
initIntegrationTunnelBridge(network);
break;
case FLAT:
@@ -1228,6 +1230,7 @@
case VXLAN:
case GRE:
case GENEVE:
+ case STT:
purgeIntegrationTunnelBridge(network);
break;
case FLAT:
@@ -1301,6 +1304,7 @@
case VXLAN:
case GRE:
case GENEVE:
+ case STT:
if (network.segmentId() == null) {
continue;
}
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManager.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManager.java
index 74d317d..3c29e30 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManager.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManager.java
@@ -48,6 +48,7 @@
import static org.onosproject.kubevirtnetworking.api.Constants.KUBEVIRT_NETWORKING_APP_ID;
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.STT;
import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VXLAN;
import static org.slf4j.LoggerFactory.getLogger;
@@ -224,7 +225,8 @@
return ImmutableSet.copyOf(networkStore.networks().stream()
.filter(n -> n.type() == VXLAN ||
n.type() == GRE ||
- n.type() == GENEVE)
+ n.type() == GENEVE ||
+ n.type() == STT)
.collect(Collectors.toSet()));
}
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
index 7c21b3f..8cdf435 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
@@ -79,6 +79,7 @@
import static org.onosproject.kubevirtnetworking.api.Constants.TUNNEL_DEFAULT_TABLE;
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.STT;
import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VLAN;
import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VXLAN;
import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.buildGarpPacket;
@@ -318,7 +319,7 @@
GW_DROP_TABLE,
install);
- if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE) {
+ if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE || network.type() == STT) {
setDownStreamRulesToGatewayTunBridge(network, gatewayNode, kubevirtPort, install);
}
}
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
index 21353b9..82d3964 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
@@ -320,6 +320,8 @@
return node.grePort();
case GENEVE:
return node.genevePort();
+ case STT:
+ return node.sttPort();
default:
break;
}
@@ -446,6 +448,8 @@
return node.grePort();
case GENEVE:
return node.genevePort();
+ case STT:
+ return node.sttPort();
case FLAT:
case VLAN:
default:
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);
}
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java b/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java
index 4d9e41b..d53ab93 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java
@@ -54,6 +54,10 @@
*/
GENEVE,
/**
+ * Signifies that this is a L3 tunnel.
+ */
+ STT,
+ /**
* Signifies that this is a L1 OTN tunnel.
*/
ODUK,
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbInterface.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbInterface.java
index 9a60372..eda5f60 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbInterface.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbInterface.java
@@ -63,6 +63,10 @@
*/
VXLAN,
/**
+ * An Ethernet over draft-davie-stt-06 Stateless Transport Tunneling Protocol for Network Virtualization.
+ */
+ STT,
+ /**
* A pair of virtual devices that act as a patch cable.
*/
PATCH,