import org.opendaylight.ovsdb.lib.table.Bridge;
import org.opendaylight.ovsdb.lib.table.Interface;
import org.opendaylight.ovsdb.lib.table.Port;
-import org.opendaylight.ovsdb.lib.table.internal.Table;
+import org.opendaylight.ovsdb.lib.table.Table;
import org.opendaylight.ovsdb.neutron.NetworkHandler;
import org.opendaylight.ovsdb.neutron.IAdminConfigManager;
import org.opendaylight.ovsdb.neutron.IInternalNetworkManager;
srcNode, (network != null) ? network.getProviderNetworkType() : "",
intf.getName(), intf.getType(), isLastInstanceOnNode);
+ List<String> phyIfName = adminConfigManager.getAllPhysicalInterfaceNames(srcNode);
if ((network != null) && network.getProviderNetworkType().equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_VLAN)) {
if (isLastInstanceOnNode) {
this.removeVlanRules(network, srcNode, intf);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
+ } else if (phyIfName.contains(intf.getName())) {
+ deletePhysicalPort(srcNode, intf.getName());
} else {
/* delete all other interfaces */
IConnectionServiceInternal connectionService = (IConnectionServiceInternal)ServiceHelper.getGlobalInstance(IConnectionServiceInternal.class, this);
}
}
}
-
return status;
}
return false;
}
- private String getTunnelPortUuid(Node node, String tunnelName, String bridgeUUID) throws Exception {
+ private String getPortUuid(Node node, String portName, String bridgeUUID) throws Exception {
OVSDBConfigService ovsdbTable = (OVSDBConfigService)ServiceHelper.getGlobalInstance(OVSDBConfigService.class, this);
Bridge bridge = (Bridge)ovsdbTable.getRow(node, Bridge.NAME.getName(), bridgeUUID);
if (bridge != null) {
Set<UUID> ports = bridge.getPorts();
for (UUID portUUID : ports) {
Port port = (Port)ovsdbTable.getRow(node, Port.NAME.getName(), portUUID.toString());
- if (port != null && port.getName().equalsIgnoreCase(tunnelName)) return portUUID.toString();
+ if (port != null && port.getName().equalsIgnoreCase(portName)) return portUUID.toString();
}
}
return null;
}
}
- private Status deleteTunnelPort (Node node, String tunnelType, InetAddress src, InetAddress dst, String key) {
+ private Status deletePort(Node node, String bridgeName, String portName) {
try {
String bridgeUUID = null;
- String tunnelBridgeName = adminConfigManager.getNetworkBridgeName();
OVSDBConfigService ovsdbTable = (OVSDBConfigService)ServiceHelper.getGlobalInstance(OVSDBConfigService.class, this);
Map<String, Table<?>> bridgeTable = ovsdbTable.getRows(node, Bridge.NAME.getName());
if (bridgeTable != null) {
for (String uuid : bridgeTable.keySet()) {
Bridge bridge = (Bridge)bridgeTable.get(uuid);
- if (bridge.getName().equals(tunnelBridgeName)) {
+ if (bridge.getName().equals(bridgeName)) {
bridgeUUID = uuid;
break;
}
}
}
if (bridgeUUID == null) {
- logger.debug("Could not find Bridge {} in {}", tunnelBridgeName, node);
+ logger.debug("Could not find Bridge {} in {}", bridgeName, node);
return new Status(StatusCode.SUCCESS);
}
- String portName = getTunnelName(tunnelType, key, dst);
- String tunnelPortUUID = this.getTunnelPortUuid(node, portName, bridgeUUID);
- Status status = ovsdbTable.deleteRow(node, Port.NAME.getName(), tunnelPortUUID);
- if (!status.isSuccess()) {
- logger.error("Failed to delete Tunnel port {} in {} status : {}", portName, bridgeUUID, status);
- return status;
+ String portUUID = this.getPortUuid(node, portName, bridgeUUID);
+ Status status = new Status(StatusCode.SUCCESS);
+ if (portUUID != null) {
+ status = ovsdbTable.deleteRow(node, Port.NAME.getName(), portUUID);
+ if (!status.isSuccess()) {
+ logger.error("Failed to delete port {} in {} status : {}", portName, bridgeUUID, status);
+ return status;
+ }
+ logger.debug("Port {} delete status : {}", portName, status);
}
-
- logger.debug("Tunnel {} delete status : {}", portName, status);
return status;
} catch (Exception e) {
logger.error("Exception in deleteTunnelPort", e);
}
}
+ private Status deleteTunnelPort (Node node, String tunnelType, InetAddress src, InetAddress dst, String key) {
+ String tunnelBridgeName = adminConfigManager.getNetworkBridgeName();
+ String portName = getTunnelName(tunnelType, key, dst);
+ Status status = deletePort(node, tunnelBridgeName, portName);
+ return status;
+ }
+
+ private Status deletePhysicalPort(Node node, String phyIntfName) {
+ String netBridgeName = adminConfigManager.getNetworkBridgeName();
+ Status status = deletePort(node, netBridgeName, phyIntfName);
+ return status;
+ }
+
@Override
public Status handleInterfaceUpdate(String tunnelType, String tunnelKey) {
IConnectionServiceInternal connectionService = (IConnectionServiceInternal)ServiceHelper.getGlobalInstance(IConnectionServiceInternal.class, this);