Enhance the RM logic for Kubevirt Networking App
Change-Id: I84fa678c75ba1e738c68c72ffbc89c54e5309997
(cherry picked from commit 842b3031e5b82a95d1f292fc952e8f091cc1e20b)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingArpHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingArpHandler.java
index 1e5260b..40f492d 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingArpHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingArpHandler.java
@@ -235,8 +235,10 @@
eventExecutor.execute(() -> processRouterExternalNetAttachedOrGwAttached(event.subject()));
break;
case KUBEVIRT_ROUTER_REMOVED:
+ eventExecutor.execute(() -> processRouterRemoved(event.subject()));
+ break;
case KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED:
- eventExecutor.execute(() -> processRouterRemovedOrExternalNetDetached(event.subject(),
+ eventExecutor.execute(() -> processRouterExternalNetDetached(event.subject(),
event.externalIp(), event.externalPeerRouterIp()));
break;
case KUBEVIRT_GATEWAY_NODE_DETACHED:
@@ -273,8 +275,9 @@
}
}
- private void processRouterRemovedOrExternalNetDetached(KubevirtRouter router, String routerSnatIp,
- String peerRouterIp) {
+ private void processRouterExternalNetDetached(KubevirtRouter router, String routerSnatIp,
+ String peerRouterIp) {
+ log.info("processRouterRemovedOrExternalNetDetached called");
if (!isRelevantHelper()) {
return;
}
@@ -294,13 +297,42 @@
IpAddress.valueOf(peerRouterIp), gatewayNode.hostname(), false);
}
+
+ private void processRouterRemoved(KubevirtRouter router) {
+ if (!isRelevantHelper()) {
+ return;
+ }
+ if (router.electedGateway() == null) {
+ return;
+ }
+ KubevirtNode gatewayNode = kubevirtNodeService.node(router.electedGateway());
+ if (gatewayNode == null) {
+ return;
+ }
+
+ String routerSnatIp = router.external().keySet().stream().findAny().orElse(null);
+ if (routerSnatIp == null) {
+ return;
+ }
+
+ IpAddress peerRouterIp = router.peerRouter().ipAddress();
+ if (peerRouterIp == null) {
+ return;
+ }
+
+ setRuleArpRequestToController(IpAddress.valueOf(routerSnatIp),
+ peerRouterIp, gatewayNode.hostname(), false);
+ }
+
private void processRouterGatewayNodeDetached(KubevirtRouter router, String detachedGatewayNode) {
if (!isRelevantHelper()) {
return;
}
+
if (detachedGatewayNode == null) {
return;
}
+
String routerSnatIp = router.external().keySet().stream().findAny().orElse(null);
if (routerSnatIp == null) {
return;