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,
