Support to resolve external hosts' MAC address from k8s POD
1. Do not remove flow rules if we receive invalid service IP.
Change-Id: I88319f1b10c25b68271e6dcd01ea384c191c3224
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sRoutingArpHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sRoutingArpHandler.java
index f11aab4..8313b81 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sRoutingArpHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sRoutingArpHandler.java
@@ -58,6 +58,7 @@
import static org.onlab.util.Tools.groupedThreads;
import static org.onosproject.k8snetworking.api.Constants.EXT_ENTRY_TABLE;
import static org.onosproject.k8snetworking.api.Constants.K8S_NETWORKING_APP_ID;
+import static org.onosproject.k8snetworking.api.Constants.PRIORITY_ARP_POD_RULE;
import static org.onosproject.k8snetworking.api.Constants.PRIORITY_ARP_REPLY_RULE;
import static org.slf4j.LoggerFactory.getLogger;
@@ -180,6 +181,50 @@
);
}
+ private void setPodArpRequestRule(K8sNode k8sNode, boolean install) {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchInPort(k8sNode.extToIntgPatchPortNum())
+ .matchEthType(Ethernet.TYPE_ARP)
+ .matchArpOp(ARP.OP_REQUEST)
+ .build();
+
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setOutput(k8sNode.extBridgePortNum())
+ .build();
+
+ k8sFlowRuleService.setRule(
+ appId,
+ k8sNode.extBridge(),
+ selector,
+ treatment,
+ PRIORITY_ARP_POD_RULE,
+ EXT_ENTRY_TABLE,
+ install
+ );
+ }
+
+ private void setPodArpReplyRule(K8sNode k8sNode, boolean install) {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchInPort(k8sNode.extBridgePortNum())
+ .matchEthType(Ethernet.TYPE_ARP)
+ .matchArpOp(ARP.OP_REPLY)
+ .build();
+
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setOutput(k8sNode.extToIntgPatchPortNum())
+ .build();
+
+ k8sFlowRuleService.setRule(
+ appId,
+ k8sNode.extBridge(),
+ selector,
+ treatment,
+ PRIORITY_ARP_POD_RULE,
+ EXT_ENTRY_TABLE,
+ install
+ );
+ }
+
private class InternalK8sNodeListener implements K8sNodeListener {
private boolean isRelevantHelper() {
@@ -204,6 +249,8 @@
}
setArpReplyRule(k8sNode, true);
+ setPodArpRequestRule(k8sNode, true);
+ setPodArpReplyRule(k8sNode, true);
try {
sleep(SLEEP_MS);