diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java index 241b3c5a0b..d4a90a5f9e 100644 --- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java +++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java @@ -504,21 +504,20 @@ public class KubevirtNetworkHandler { MacAddress routerMacAddress = getRouterMacAddress(router); if (routerMacAddress == null) { - log.warn("Setting gateway default eggress rule to gateway for tenant internal network because " + - "there's no br-int port for device {}", gwDeviceId); + log.warn("Setting gateway default egress rule to gateway for tenant " + + "internal network because there's no br-int port for device {}", gwDeviceId); return; } KubevirtNode gwNode = kubevirtNodeService.node(gwDeviceId); if (gwNode == null) { - log.warn("Setting gateway default eggress rule to gateway for tenant internal network because " + - "there's no gateway node for device {}", gwDeviceId); + log.warn("Setting gateway default egress rule to gateway for tenant " + + "internal network because there's no gateway node for device {}", gwDeviceId); return; } - - PortNumber patchPortNumber = tunnelToTenantPort(workerNode, network); + PortNumber patchPortNumber = tunnelToTenantPort(deviceService, workerNode, network); if (patchPortNumber == null) { return; } @@ -608,7 +607,7 @@ public class KubevirtNetworkHandler { return; } - PortNumber tunToIntPortNum = portNumber(gwNode.tunBridge(), TUNNEL_TO_INTEGRATION); + PortNumber tunToIntPortNum = portNumber(deviceService, gwNode.tunBridge(), TUNNEL_TO_INTEGRATION); TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder() .matchTunnelId(Long.parseLong(network.segmentId())); diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSwitchingTenantHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSwitchingTenantHandler.java index 3967d6a225..3d0045ddc6 100644 --- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSwitchingTenantHandler.java +++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSwitchingTenantHandler.java @@ -152,14 +152,17 @@ public class KubevirtSwitchingTenantHandler { for (KubevirtNode localNode : kubevirtNodeService.completeNodes(WORKER)) { while (true) { - if (tunnelToTenantPort(localNode, network) != null) { + KubevirtNode updatedNode = kubevirtNodeService.node(localNode.hostname()); + if (tunnelToTenantPort(deviceService, updatedNode, network) != null) { break; } else { + log.info("Waiting for tunnel to tenant patch port creation " + + "on ingress rule setup on node {}", updatedNode); waitFor(3); } } - PortNumber patchPortNumber = tunnelToTenantPort(localNode, network); + PortNumber patchPortNumber = tunnelToTenantPort(deviceService, localNode, network); TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder() .matchTunnelId(Long.parseLong(network.segmentId())); @@ -182,11 +185,24 @@ public class KubevirtSwitchingTenantHandler { private void setIngressRules(KubevirtNode node, boolean install) { for (KubevirtNetwork network : kubevirtNetworkService.tenantNetworks()) { - PortNumber patchPortNumber = tunnelToTenantPort(node, network); - if (patchPortNumber == null) { + + if (node == null || node.type() != WORKER) { return; } + while (true) { + KubevirtNode updatedNode = kubevirtNodeService.node(node.hostname()); + if (tunnelToTenantPort(deviceService, updatedNode, network) != null) { + break; + } else { + log.info("Waiting for tunnel to tenant patch port creation " + + "on ingress rule setup on node {}", updatedNode); + waitFor(3); + } + } + + PortNumber patchPortNumber = tunnelToTenantPort(deviceService, node, network); + TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder() .matchTunnelId(Long.parseLong(network.segmentId())); @@ -236,11 +252,19 @@ public class KubevirtSwitchingTenantHandler { continue; } - PortNumber patchPortNumber = tunnelToTenantPort(remoteNode, network); - if (patchPortNumber == null) { - return; + while (true) { + KubevirtNode updatedNode = kubevirtNodeService.node(localNode.hostname()); + if (tunnelToTenantPort(deviceService, updatedNode, network) != null) { + break; + } else { + log.info("Waiting for tunnel to tenant patch port creation " + + "on egress rule setup on node {}", updatedNode); + waitFor(3); + } } + PortNumber patchPortNumber = tunnelToTenantPort(deviceService, remoteNode, network); + PortNumber tunnelPortNumber = tunnelPort(remoteNode, network); if (tunnelPortNumber == null) { return; diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java index 89ff8b2b51..21353b9c0a 100644 --- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java +++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java @@ -27,7 +27,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.net.util.SubnetUtils; import org.json.JSONException; import org.json.JSONObject; -import org.onlab.osgi.DefaultServiceDirectory; import org.onlab.packet.ARP; import org.onlab.packet.Ethernet; import org.onlab.packet.Ip4Address; @@ -405,11 +404,13 @@ public final class KubevirtNetworkingUtil { /** * Obtains the tunnel bridge to tenant bridge patch port number. * + * @param deviceService device service * @param node kubevirt node * @param network kubevirt network * @return patch port number */ - public static PortNumber tunnelToTenantPort(KubevirtNode node, KubevirtNetwork network) { + public static PortNumber tunnelToTenantPort(DeviceService deviceService, + KubevirtNode node, KubevirtNetwork network) { if (network.segmentId() == null) { return null; } @@ -419,7 +420,7 @@ public final class KubevirtNetworkingUtil { } String tunToTenantPortName = TUNNEL_TO_TENANT_PREFIX + segmentIdHex(network.segmentId()); - return portNumber(node.tunBridge(), tunToTenantPortName); + return portNumber(deviceService, node.tunBridge(), tunToTenantPortName); } /** @@ -463,8 +464,7 @@ public final class KubevirtNetworkingUtil { return ""; } - public static PortNumber portNumber(DeviceId deviceId, String portName) { - DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class); + public static PortNumber portNumber(DeviceService deviceService, DeviceId deviceId, String portName) { Port port = deviceService.getPorts(deviceId).stream() .filter(p -> p.isEnabled() && Objects.equals(p.annotations().value(PORT_NAME), portName))