Initial support GRE tunnel at SONA
Change-Id: I86536a3ed23d8df45e1dc4033c3068a4dfc9ec73
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
index a6e9915..66d1f2a 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
@@ -50,6 +50,7 @@
import org.onlab.packet.VlanId;
import org.onosproject.cfg.ConfigProperty;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.flow.TrafficTreatment;
@@ -155,6 +156,7 @@
private static final String ERR_FLOW = "Failed set flows for floating IP %s: ";
private static final String VXLAN = "VXLAN";
+ private static final String GRE = "GRE";
private static final String VLAN = "VLAN";
private static final String DL_DST = "dl_dst=";
private static final String NW_DST = "nw_dst=";
@@ -768,6 +770,7 @@
String modifiedDstIp = dstIp;
if (osNetService.networkType(srcInstancePort.networkId()).equals(VXLAN) ||
+ osNetService.networkType(srcInstancePort.networkId()).equals(GRE) ||
osNetService.networkType(srcInstancePort.networkId()).equals(VLAN)) {
if (srcIp.equals(dstIp)) {
modifiedDstIp = osNetService.gatewayIp(srcInstancePort.portId());
@@ -795,6 +798,7 @@
.append(COMMA);
if (osNetService.networkType(srcInstancePort.networkId()).equals(VXLAN) ||
+ osNetService.networkType(srcInstancePort.networkId()).equals(GRE) ||
osNetService.networkType(srcInstancePort.networkId()).equals(VLAN)) {
requestStringBuilder.append(TUN_ID)
.append(osNetService.segmentId(srcInstancePort.networkId()))
@@ -1045,6 +1049,44 @@
.findAny().get().getIpAddress());
}
+ /**
+ * Returns the tunnel port number with specified net ID and openstack node.
+ *
+ * @param netId network ID
+ * @param netService network service
+ * @param osNode openstack node
+ * @return tunnel port number
+ */
+ public static PortNumber tunnelPortNumByNetId(String netId,
+ OpenstackNetworkService netService,
+ OpenstackNode osNode) {
+ String netType = netService.networkType(netId);
+
+ if (netType == null) {
+ return null;
+ }
+
+ return tunnelPortNumByNetType(netType, osNode);
+ }
+
+ /**
+ * Returns the tunnel port number with specified net type and openstack node.
+ *
+ * @param netType network type
+ * @param osNode openstack node
+ * @return tunnel port number
+ */
+ public static PortNumber tunnelPortNumByNetType(String netType, OpenstackNode osNode) {
+ switch (netType) {
+ case VXLAN:
+ return osNode.vxlanTunnelPortNum();
+ case GRE:
+ return osNode.greTunnelPortNum();
+ default:
+ return null;
+ }
+ }
+
private static Router getRouterFromSubnet(Subnet subnet,
OpenstackRouterService osRouterService) {
RouterInterface osRouterIface = osRouterService.routerInterfaces().stream()