[ONOS-7863] Initial support GENEVE tunnel at SONA
Change-Id: Ia85d32e8068c22d59082dceccc0d911f8acb5f02
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
index 1b93499..c2c3d57 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
@@ -79,6 +79,8 @@
import static org.onlab.packet.TpPort.tpPort;
import static org.onlab.util.Tools.groupedThreads;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
+import static org.onosproject.openstacknode.api.Constants.GENEVE;
+import static org.onosproject.openstacknode.api.Constants.GENEVE_TUNNEL;
import static org.onosproject.openstacknode.api.Constants.GRE;
import static org.onosproject.openstacknode.api.Constants.GRE_TUNNEL;
import static org.onosproject.openstacknode.api.Constants.INTEGRATION_BRIDGE;
@@ -235,6 +237,11 @@
createGreTunnelInterface(osNode);
}
+ if (osNode.dataIp() != null &&
+ !isIntfEnabled(osNode, GENEVE_TUNNEL)) {
+ createGeneveTunnelInterface(osNode);
+ }
+
if (osNode.dpdkConfig() != null && osNode.dpdkConfig().dpdkIntfs() != null) {
osNode.dpdkConfig().dpdkIntfs().stream()
.filter(dpdkintf -> dpdkintf.deviceName().equals(TUNNEL_BRIDGE))
@@ -260,7 +267,7 @@
osNode.vlanIntf(), deviceService, true);
}
} catch (Exception e) {
- log.error("Exception occurred because of {}", e.toString());
+ log.error("Exception occurred because of {}", e);
}
}
@@ -365,6 +372,15 @@
}
/**
+ * Creates a GENEVE tunnel interface in a given openstack node.
+ *
+ * @param osNode openstack node
+ */
+ private void createGeneveTunnelInterface(OpenstackNode osNode) {
+ createTunnelInterface(osNode, GENEVE, GENEVE_TUNNEL);
+ }
+
+ /**
* Creates a tunnel interface in a given openstack node.
*
* @param osNode openstack node
@@ -394,7 +410,7 @@
* @return tunnel description
*/
private TunnelDescription buildTunnelDesc(String type, String intfName) {
- if (VXLAN.equals(type) || GRE.equals(type)) {
+ if (VXLAN.equals(type) || GRE.equals(type) || GENEVE.equals(type)) {
TunnelDescription.Builder tdBuilder =
DefaultTunnelDescription.builder()
.deviceId(INTEGRATION_BRIDGE)
@@ -409,6 +425,9 @@
case GRE:
tdBuilder.type(TunnelDescription.Type.GRE);
break;
+ case GENEVE:
+ tdBuilder.type(TunnelDescription.Type.GENEVE);
+ break;
default:
return null;
}
@@ -462,6 +481,10 @@
!isIntfEnabled(osNode, GRE_TUNNEL)) {
return false;
}
+ if (osNode.dataIp() != null &&
+ !isIntfEnabled(osNode, GENEVE_TUNNEL)) {
+ return false;
+ }
if (osNode.vlanIntf() != null &&
!isIntfEnabled(osNode, osNode.vlanIntf())) {
return false;
@@ -819,6 +842,7 @@
if (osNode.state() == DEVICE_CREATED && (
Objects.equals(portName, VXLAN_TUNNEL) ||
Objects.equals(portName, GRE_TUNNEL) ||
+ Objects.equals(portName, GENEVE_TUNNEL) ||
Objects.equals(portName, osNode.vlanIntf()) ||
Objects.equals(portName, osNode.uplinkPort()) ||
containsPhyIntf(osNode, portName)) ||
@@ -847,6 +871,7 @@
if (osNode.state() == COMPLETE && (
Objects.equals(portName, VXLAN_TUNNEL) ||
Objects.equals(portName, GRE_TUNNEL) ||
+ Objects.equals(portName, GENEVE_TUNNEL) ||
Objects.equals(portName, osNode.vlanIntf()) ||
Objects.equals(portName, osNode.uplinkPort()) ||
containsPhyIntf(osNode, portName)) ||