boolean sourceTunnelStatus = false;
boolean destTunnelStatus = false;
+ boolean isSrcinNw = tenantNetworkManager.isTenantNetworkPresentInNode(srcBridgeNode, segmentationId);
for (Node dstNode : nodes.values()) {
InetAddress src = configurationService.getTunnelEndPoint(srcNode);
InetAddress dst = configurationService.getTunnelEndPoint(dstNode);
Node dstBridgeNode = southbound.getBridgeNode(dstNode,
configurationService.getIntegrationBridgeName());
- if (dstBridgeNode != null){
+ if (dstBridgeNode != null) {
destTunnelStatus = addTunnelPort(dstBridgeNode, networkType, dst, src);
}
if (sourceTunnelStatus) {
- programTunnelRules(networkType, segmentationId, dst, srcBridgeNode, intf, true);
+ boolean isDestinNw = tenantNetworkManager.isTenantNetworkPresentInNode(dstBridgeNode, segmentationId);
+ //Check whether the network is present in src & dst node
+ //If only present , add vxlan ports in TunnelRules for both nodes (bug# 5614)
+ if (isSrcinNw && isDestinNw) {
+ programTunnelRules(networkType, segmentationId, dst, srcBridgeNode, intf, true);
+ programTunnelRules(networkType, segmentationId, src, dstBridgeNode, intf, true);
+ }
}
if (destTunnelStatus) {
programTunnelRules(networkType, segmentationId, src, dstBridgeNode, intf, false);
nodes.remove(southbound.extractBridgeOvsdbNodeId(srcNode));
LOG.info("Delete intf " + intf.getName() + " isLastInstanceOnNode " + isLastInstanceOnNode);
+ String segmentationId = network.getProviderSegmentationID();
List<String> phyIfName = bridgeConfigurationManager.getAllPhysicalInterfaceNames(srcNode);
if (southbound.isTunnel(intf)) {
// Delete tunnel port
deletePhysicalPort(srcNode, intf.getName());
} else {
// delete all other interfaces
- removeLocalRules(network.getProviderNetworkType(), network.getProviderSegmentationID(),
+ removeLocalRules(network.getProviderNetworkType(), segmentationId,
srcNode, intf);
if (isVlan(network.getProviderNetworkType())) {
removeVlanRules(network, srcNode, intf, isLastInstanceOnNode);
} else if (isTunnel(network.getProviderNetworkType())) {
+ Node srcBridgeNode = southbound.getBridgeNode(srcNode, configurationService.getIntegrationBridgeName());
for (Node dstNode : nodes.values()) {
InetAddress src = configurationService.getTunnelEndPoint(srcNode);
InetAddress dst = configurationService.getTunnelEndPoint(dstNode);
if ((src != null) && (dst != null)) {
LOG.info("Remove tunnel rules for interface "
+ intf.getName() + " on srcNode " + srcNode.getNodeId().getValue());
- removeTunnelRules(tunnelType, network.getProviderSegmentationID(),
+ removeTunnelRules(tunnelType, segmentationId,
dst, srcNode, intf, true, isLastInstanceOnNode);
Node dstBridgeNode = southbound.getBridgeNode(dstNode, Constants.INTEGRATION_BRIDGE);
- if (dstBridgeNode != null){
+ //While removing last instance , check whether the network present in src node
+ //If network is not present in src node , remove the vxlan port of src from dst node in TunnelRules(Bug# 5614)
+ boolean isSrcinNw = tenantNetworkManager.isTenantNetworkPresentInNode(srcBridgeNode, segmentationId);
+ if (dstBridgeNode != null) {
+ if (!isSrcinNw) {
+ removeTunnelRules(tunnelType, segmentationId,
+ src, dstBridgeNode, intf, true, isLastInstanceOnNode);
+ }
LOG.info("Remove tunnel rules for interface "
+ intf.getName() + " on dstNode " + dstNode.getNodeId().getValue());
- removeTunnelRules(tunnelType, network.getProviderSegmentationID(),
- src, dstBridgeNode, intf, false, isLastInstanceOnNode);
+ removeTunnelRules(tunnelType, segmentationId, src,
+ dstBridgeNode, intf, false, isLastInstanceOnNode);
}
} else {
LOG.warn("Tunnel end-point configuration missing. Please configure it in "
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyShort;
import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.same;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class));
MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class));
+ TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
+ MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider, tenantNetworkManager);
+ when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), eq(ID))).thenReturn(true);
+
assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class)));
PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class)));
PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class));
- PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("programTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
+ PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
}
private static final String INTF = "interface";
PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
+ TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
+ MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider, tenantNetworkManager);
+ when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), eq(ID))).thenReturn(true);
+
when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_GRE);
when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(node);
MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class, boolean.class));
assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, node, intf, false));
- PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("removeTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), any(boolean.class), any(boolean.class));
+ PowerMockito.verifyPrivate(of13Provider, times(3)).invoke("removeTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), any(boolean.class), any(boolean.class));
}
// Problem with methods signatures: initializeFlowRules(Node) has the same signature than initializeFlowRules(Node, String)