mirror of
https://github.com/opennetworkinglab/onos.git
synced 2026-05-05 20:26:16 +02:00
Fix: ensure to install rules while waiting for patch port creation
Change-Id: I0a7aa8ebd34a85bed6b8feb3ade5551b36be18cf (cherry picked from commit c59f83c4dc333357680d22ca731f10340fab24b7)
This commit is contained in:
parent
6cb4867a83
commit
34fff804f0
@ -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()));
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user