Split tunneling behavior into a separated tunnel bridge
Change-Id: I4de5f21ac9eaf286479f619c960a2319b597a819
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
index 18b9a11..fd0dff0 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
@@ -111,6 +111,7 @@
import static org.onosproject.k8snetworking.api.Constants.SHIFTED_IP_PREFIX;
import static org.onosproject.k8snetworking.api.Constants.SRC;
import static org.onosproject.k8snetworking.api.Constants.STAT_EGRESS_TABLE;
+import static org.onosproject.k8snetworking.api.Constants.TUN_ENTRY_TABLE;
import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_CIDR;
import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_IP_CIDR_DEFAULT;
import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_IP_NAT_MODE;
@@ -645,16 +646,33 @@
}
tBuilder.transition(STAT_EGRESS_TABLE);
} else {
- PortNumber portNum = tunnelPortNumByNetId(network.networkId(),
- k8sNetworkService, n);
K8sNode localNode = k8sNodeService.node(network.name());
- tBuilder.extension(buildExtension(
- deviceService,
- n.intgBridge(),
- localNode.dataIp().getIp4Address()),
- n.intgBridge())
- .setOutput(portNum);
+ tBuilder.setOutput(n.intgToTunPortNum());
+
+ PortNumber portNum = tunnelPortNumByNetId(network.networkId(),
+ k8sNetworkService, n);
+
+ // install rules into tunnel bridge
+ TrafficTreatment treatmentToRemote = DefaultTrafficTreatment.builder()
+ .extension(buildExtension(
+ deviceService,
+ n.tunBridge(),
+ localNode.dataIp().getIp4Address()),
+ n.tunBridge())
+ .setTunnelId(Long.valueOf(network.segmentId()))
+ .setOutput(portNum)
+ .build();
+
+ k8sFlowRuleService.setRule(
+ appId,
+ n.tunBridge(),
+ sBuilder.build(),
+ treatmentToRemote,
+ PRIORITY_CIDR_RULE,
+ TUN_ENTRY_TABLE,
+ install
+ );
}
k8sFlowRuleService.setRule(