[ONOS-7863] Initial support GENEVE tunnel at SONA
Change-Id: Ia85d32e8068c22d59082dceccc0d911f8acb5f02
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
index bc02119..d1864d7 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
@@ -96,7 +96,10 @@
import static org.onosproject.openstacknetworking.api.Constants.STAT_OUTBOUND_TABLE;
import static org.onosproject.openstacknetworking.api.InstancePort.State.ACTIVE;
import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.FLAT;
+import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.GENEVE;
+import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.GRE;
import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.VLAN;
+import static org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.VXLAN;
import static org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.USE_STATEFUL_SNAT;
import static org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.USE_STATEFUL_SNAT_DEFAULT;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.tunnelPortNumByNetType;
@@ -460,21 +463,25 @@
// take ICMP request to a subnet gateway through gateway node group
Network net = osNetworkAdminService.network(osSubnet.getNetworkId());
+ Type netType = osNetworkAdminService.networkType(osSubnet.getNetworkId());
Set<Subnet> routableSubnets = routableSubnets(osRouter, osSubnet.getId());
- switch (net.getNetworkType()) {
+ switch (netType) {
case VXLAN:
setGatewayIcmpForVxlan(osSubnet, srcNatGw, net, routableSubnets, install);
break;
case GRE:
setGatewayIcmpForGre(osSubnet, srcNatGw, net, routableSubnets, install);
break;
+ case GENEVE:
+ setGatewayIcmpForGeneve(osSubnet, srcNatGw, net, routableSubnets, install);
+ break;
case VLAN:
setGatewayIcmpForVlan(osSubnet, srcNatGw, net, routableSubnets, install);
break;
default:
final String error = String.format("%s %s", ERR_UNSUPPORTED_NET_TYPE,
- net.getNetworkType().toString());
+ netType.toString());
throw new IllegalStateException(error);
}
@@ -502,7 +509,7 @@
network.getProviderSegID(),
osSubnet,
routableSubnets,
- Type.VXLAN,
+ VXLAN,
install));
}
@@ -519,7 +526,24 @@
network.getProviderSegID(),
osSubnet,
routableSubnets,
- Type.GRE,
+ GRE,
+ install));
+ }
+
+ private void setGatewayIcmpForGeneve(Subnet osSubnet,
+ OpenstackNode srcNatGw,
+ Network network,
+ Set<Subnet> routableSubnets,
+ boolean install) {
+ osNodeService.completeNodes(COMPUTE).stream()
+ .filter(cNode -> cNode.dataIp() != null)
+ .forEach(cNode -> setRulesToGatewayWithRoutableSubnets(
+ cNode,
+ srcNatGw,
+ network.getProviderSegID(),
+ osSubnet,
+ routableSubnets,
+ GENEVE,
install));
}
@@ -629,6 +653,7 @@
switch (networkType) {
case VXLAN:
case GRE:
+ case GENEVE:
setInternalRouterRulesForTunnel(deviceId, srcSegId, dstSegId,
srcSubnet, dstSubnet, install);
break;
@@ -766,6 +791,7 @@
switch (networkType) {
case VXLAN:
case GRE:
+ case GENEVE:
sBuilder.matchTunnelId(Long.parseLong(segmentId));
break;
case VLAN:
@@ -783,6 +809,7 @@
switch (networkType) {
case VXLAN:
case GRE:
+ case GENEVE:
PortNumber portNum = tunnelPortNumByNetType(networkType, osNode);
tBuilder.extension(buildExtension(
deviceService,
@@ -883,6 +910,7 @@
switch (networkType) {
case VXLAN:
case GRE:
+ case GENEVE:
sBuilder.matchTunnelId(Long.parseLong(segmentId));
PortNumber portNum = tunnelPortNumByNetType(networkType, osNode);
@@ -994,6 +1022,7 @@
switch (networkType) {
case VXLAN:
case GRE:
+ case GENEVE:
sBuilder.matchTunnelId(Long.parseLong(segmentId));
break;
case VLAN:
@@ -1034,6 +1063,7 @@
switch (networkType) {
case VXLAN:
case GRE:
+ case GENEVE:
sBuilder.matchTunnelId(Long.parseLong(segmentId));
break;
case VLAN: