import org.opendaylight.genius.mdsalutil.NwConstants;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
return null;
}
- public static boolean isTunnelType(Interface iface,org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState) {
- boolean isTunnelInterface = InterfaceManagerCommonUtils.isTunnelInterface(iface);
- if (!isTunnelInterface && ifState != null) {
- isTunnelInterface = IfmUtil.isTunnelType(ifState.getType());
- }
- return isTunnelInterface;
- }
-
- public static boolean isTunnelType(Class<? extends InterfaceType> ifType) {
- if( (ifType != null) && (ifType.isAssignableFrom(Tunnel.class)) ) {
- return true;
- }
- return false;
- }
-
public static InterfaceInfo.InterfaceType getInterfaceType(Interface iface) {
InterfaceInfo.InterfaceType interfaceType =
org.opendaylight.genius.interfacemanager.globals.InterfaceInfo.InterfaceType.UNKNOWN_INTERFACE;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
private static final Logger LOG = LoggerFactory.getLogger(InterfaceManagerCommonUtils.class);
private static ConcurrentHashMap<String, Interface> interfaceConfigMap = new ConcurrentHashMap<>();
private static ConcurrentHashMap<String, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> interfaceStateMap = new ConcurrentHashMap<>();
+ private static final String NOVA_OR_TUNNEL_PORT_REGEX = "(tap|vhu)[0-9a-f]{8}-[0-9a-f]{2}|tun[0-9a-f]{11}";
+ private static final Pattern pattern = Pattern.compile(NOVA_OR_TUNNEL_PORT_REGEX);
public static NodeConnector getNodeConnectorFromInventoryOperDS(NodeConnectorId nodeConnectorId,
DataBroker dataBroker) {
interfaceStateMap.remove(iface.getName());
}
- public static List<BigInteger> getListOfDpns(DataBroker broker) {
- List<BigInteger> dpnsList = new LinkedList<>();
- InstanceIdentifier<Nodes> nodesInstanceIdentifier = InstanceIdentifier.builder(Nodes.class).build();
- Optional<Nodes> nodesOptional = MDSALUtil.read(broker, LogicalDatastoreType.OPERATIONAL,
- nodesInstanceIdentifier);
- if (!nodesOptional.isPresent()) {
- return dpnsList;
- }
- Nodes nodes = nodesOptional.get();
- List<Node> nodeList = nodes.getNode();
- for (Node node : nodeList) {
- NodeId nodeId = node.getId();
- if (nodeId == null) {
- continue;
- }
- BigInteger dpnId = MDSALUtil.getDpnIdFromNodeName(nodeId);
- dpnsList.add(dpnId);
- }
- return dpnsList;
- }
+ public static boolean isNovaOrTunnelPort(String portName) {
- public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface getInterfaceStateForUnknownDpn(
- String interfaceName, DataBroker dataBroker) {
- String parentInterface;
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState = null;
- List<BigInteger> listOfDpns = InterfaceManagerCommonUtils.getListOfDpns(dataBroker);
- for (BigInteger dpnId : listOfDpns) {
- parentInterface = new StringBuilder().append(dpnId).append(IfmConstants.OF_URI_SEPARATOR)
- .append(interfaceName).toString();
- ifState = InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(parentInterface, dataBroker);
- if (ifState != null) {
- break;
- }
- }
- return ifState;
+ Matcher matcher = pattern.matcher(portName);
+ return matcher.matches();
}
- public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface getInterfaceStateFromDS(
- String interfaceName) {
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState = null;
- for (Map.Entry<String, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> entry : interfaceStateMap
- .entrySet()) {
- if (entry.getKey().contains(interfaceName)) {
- ifState = entry.getValue();
- }
- }
- return ifState;
- }
}
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
+import org.opendaylight.genius.interfacemanager.IfmConstants;
import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
import org.opendaylight.genius.interfacemanager.renderer.ovs.confighelpers.OvsInterfaceConfigAddHelper;
import org.opendaylight.genius.interfacemanager.renderer.ovs.confighelpers.OvsInterfaceConfigRemoveHelper;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.AlivenessMonitorService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefsBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
LOG.warn("parent refs not specified for {}",interfaceOld.getName());
return;
}
+ boolean isTunnelInterface = InterfaceManagerCommonUtils.isTunnelInterface(interfaceOld);
+ parentRefs = updateParentInterface(isTunnelInterface, parentRefs);
DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
RendererConfigRemoveWorker configWorker = new RendererConfigRemoveWorker(key, interfaceOld, ifName, parentRefs);
- String synchronizationKey = InterfaceManagerCommonUtils.isTunnelInterface(interfaceOld) ?
+ String synchronizationKey = isTunnelInterface ?
parentRefs.getDatapathNodeIdentifier().toString() : parentRefs.getParentInterface();
coordinator.enqueueJob(synchronizationKey, configWorker, MAX_RETRIES);
}
LOG.warn("parent refs not specified for {}",interfaceNew.getName());
return;
}
+ boolean isTunnelInterface = InterfaceManagerCommonUtils.isTunnelInterface(interfaceOld);
+ parentRefs = updateParentInterface(isTunnelInterface, parentRefs);
DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
RendererConfigUpdateWorker worker = new RendererConfigUpdateWorker(key, interfaceOld, interfaceNew, ifNameNew);
- String synchronizationKey = InterfaceManagerCommonUtils.isTunnelInterface(interfaceOld) ?
+ String synchronizationKey = isTunnelInterface ?
interfaceOld.getName() : parentRefs.getParentInterface();
coordinator.enqueueJob(synchronizationKey, worker, MAX_RETRIES);
}
LOG.warn("parent refs not specified for {}",interfaceNew.getName());
return;
}
+ boolean isTunnelInterface = InterfaceManagerCommonUtils.isTunnelInterface(interfaceNew);
+ parentRefs = updateParentInterface(isTunnelInterface, parentRefs);
DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
RendererConfigAddWorker configWorker = new RendererConfigAddWorker(key, interfaceNew, parentRefs, ifName);
- String synchronizationKey = InterfaceManagerCommonUtils.isTunnelInterface(interfaceNew) ?
+ String synchronizationKey = isTunnelInterface ?
interfaceNew.getName() : parentRefs.getParentInterface();
coordinator.enqueueJob(synchronizationKey, configWorker, MAX_RETRIES);
}
+ private static ParentRefs updateParentInterface(boolean isTunnelInterface, ParentRefs parentRefs) {
+ if (!isTunnelInterface && parentRefs.getDatapathNodeIdentifier() != null) {
+ StringBuilder parentInterface = new StringBuilder(parentRefs.getDatapathNodeIdentifier().toString());
+ parentInterface.append(IfmConstants.OF_URI_SEPARATOR);
+ parentInterface.append(parentRefs.getParentInterface());
+ parentRefs = new ParentRefsBuilder(parentRefs).setParentInterface(parentInterface.toString()).build();
+ }
+ return parentRefs;
+ }
+
private class RendererConfigAddWorker implements Callable<List<ListenableFuture<Void>>> {
InstanceIdentifier<Interface> key;
Interface interfaceNew;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
-import org.opendaylight.genius.interfacemanager.IfmUtil;
import org.opendaylight.genius.interfacemanager.IfmConstants;
+import org.opendaylight.genius.interfacemanager.IfmUtil;
import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
import org.opendaylight.genius.interfacemanager.commons.InterfaceMetaUtils;
import org.opendaylight.genius.interfacemanager.renderer.ovs.statehelpers.OvsInterfaceStateAddHelper;
import org.opendaylight.genius.interfacemanager.renderer.ovs.statehelpers.OvsInterfaceStateRemoveHelper;
import org.opendaylight.genius.interfacemanager.renderer.ovs.statehelpers.OvsInterfaceStateUpdateHelper;
import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.AlivenessMonitorService;
NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(key.firstIdentifierOf(NodeConnector.class)).getId();
//VM Migration: Skip OFPPR_DELETE event received after OFPPR_ADD for same interface from Older DPN
- Interface ifState = InterfaceManagerCommonUtils.getInterfaceStateFromDS(portName);
- NodeConnectorId nodeConnectorIdOld = IfmUtil.getNodeConnectorIdFromInterface(ifState);
- if(nodeConnectorIdOld != null && !nodeConnectorId.equals(nodeConnectorIdOld)) {
- LOG.debug("Dropping the NodeConnector Remove Event for the interface: {}, {}, {}", portName, nodeConnectorId, nodeConnectorIdOld);
- return;
+ NodeConnectorId nodeConnectorIdOld = IfmUtil.getNodeConnectorIdFromInterface(portName, dataBroker);
+ if (InterfaceManagerCommonUtils.isNovaOrTunnelPort(portName)) {
+ if(nodeConnectorIdOld != null && !nodeConnectorId.equals(nodeConnectorIdOld)) {
+ LOG.debug("Dropping the NodeConnector Remove Event for the interface: {}, {}, {}", portName, nodeConnectorId, nodeConnectorIdOld);
+ return;
+ }
+ } else {
+ portName = getDpnPrefixedPortName(nodeConnectorId, portName);
}
- remove(nodeConnectorId, nodeConnectorIdOld, flowCapableNodeConnectorOld, portName, ifState);
+ remove(nodeConnectorId, nodeConnectorIdOld, flowCapableNodeConnectorOld, portName);
}
@Override
NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(key.firstIdentifierOf(NodeConnector.class)).getId();
//VM Migration: Delete existing interface entry for older DPN
- Interface ifState = InterfaceManagerCommonUtils.getInterfaceStateFromDS(portName);
- NodeConnectorId nodeConnectorIdOld = IfmUtil.getNodeConnectorIdFromInterface(ifState);
- if (nodeConnectorIdOld != null && !nodeConnectorId.equals(nodeConnectorIdOld)) {
- LOG.debug("Triggering NodeConnector Remove Event for the interface: {}, {}, {}", portName, nodeConnectorId, nodeConnectorIdOld);
- remove(nodeConnectorId, nodeConnectorIdOld, fcNodeConnectorNew, portName, ifState);
+ if (InterfaceManagerCommonUtils.isNovaOrTunnelPort(portName)) {
+ NodeConnectorId nodeConnectorIdOld = IfmUtil.getNodeConnectorIdFromInterface(portName, dataBroker);
+ if (nodeConnectorIdOld != null && !nodeConnectorId.equals(nodeConnectorIdOld)) {
+ LOG.debug("Triggering NodeConnector Remove Event for the interface: {}, {}, {}", portName, nodeConnectorId, nodeConnectorIdOld);
+ remove(nodeConnectorId, nodeConnectorIdOld, fcNodeConnectorNew, portName);
+ }
+ } else {
+ portName = getDpnPrefixedPortName(nodeConnectorId, portName);
}
-
DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
InterfaceStateAddWorker ifStateAddWorker = new InterfaceStateAddWorker(idManager, nodeConnectorId,
fcNodeConnectorNew, portName);
}
private void remove(NodeConnectorId nodeConnectorIdNew, NodeConnectorId nodeConnectorIdOld,
- FlowCapableNodeConnector fcNodeConnectorNew, String portName, Interface ifState) {
+ FlowCapableNodeConnector fcNodeConnectorNew, String portName) {
DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
InterfaceStateRemoveWorker portStateRemoveWorker = new InterfaceStateRemoveWorker(idManager,
- nodeConnectorIdNew, nodeConnectorIdOld, fcNodeConnectorNew, portName, ifState);
+ nodeConnectorIdNew, nodeConnectorIdOld, fcNodeConnectorNew, portName);
coordinator.enqueueJob(portName, portStateRemoveWorker, 3);
}
+ private String getDpnPrefixedPortName(NodeConnectorId nodeConnectorId, String portName) {
+ portName = new StringBuilder(
+ IfmUtil.getDpnFromNodeConnectorId(nodeConnectorId))
+ .append(IfmConstants.OF_URI_SEPARATOR)
+ .append(portName).toString();
+ return portName;
+ }
private class InterfaceStateAddWorker implements Callable {
private final NodeConnectorId nodeConnectorId;
private final FlowCapableNodeConnector fcNodeConnectorNew;
// to call the respective helpers.
List<ListenableFuture<Void>> futures = OvsInterfaceStateAddHelper.addState(dataBroker, idManager, mdsalApiManager, alivenessMonitorService, nodeConnectorId,
interfaceName, fcNodeConnectorNew);
- List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(dataBroker, interfaceName, nodeConnectorId);
+ List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(dataBroker, interfaceName);
for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
InterfaceStateAddWorker interfaceStateAddWorker = new InterfaceStateAddWorker(idManager, nodeConnectorId,
fcNodeConnectorNew, interfaceChildEntry.getChildInterface());
// to call the respective helpers.
List<ListenableFuture<Void>> futures = OvsInterfaceStateUpdateHelper.updateState(key, alivenessMonitorService, dataBroker, interfaceName,
fcNodeConnectorNew, fcNodeConnectorOld);
- NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(key.firstIdentifierOf(NodeConnector.class)).getId();
- List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(dataBroker, interfaceName, nodeConnectorId);
+ List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(dataBroker, interfaceName);
for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
InterfaceStateUpdateWorker interfaceStateUpdateWorker = new InterfaceStateUpdateWorker(key, fcNodeConnectorOld,
fcNodeConnectorNew, interfaceChildEntry.getChildInterface());
FlowCapableNodeConnector fcNodeConnectorOld;
private final String interfaceName;
private final IdManagerService idManager;
- private final Interface ifState;
public InterfaceStateRemoveWorker(IdManagerService idManager, NodeConnectorId nodeConnectorIdNew,
NodeConnectorId nodeConnectorIdOld,
FlowCapableNodeConnector fcNodeConnectorOld,
- String portName,Interface ifState) {
+ String portName) {
this.nodeConnectorIdNew = nodeConnectorIdNew;
this.nodeConnectorIdOld = nodeConnectorIdOld;
this.fcNodeConnectorOld = fcNodeConnectorOld;
this.interfaceName = portName;
this.idManager = idManager;
- this.ifState = ifState;
}
@Override
// If another renderer(for eg : CSS) needs to be supported, check can be performed here
// to call the respective helpers.
List<ListenableFuture<Void>> futures = OvsInterfaceStateRemoveHelper.removeInterfaceStateConfiguration(idManager, mdsalApiManager, alivenessMonitorService,
- nodeConnectorIdNew, nodeConnectorIdOld, dataBroker, interfaceName, fcNodeConnectorOld, ifState);
+ nodeConnectorIdNew, nodeConnectorIdOld, dataBroker, interfaceName, fcNodeConnectorOld);
- List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(dataBroker, interfaceName, nodeConnectorIdNew);
+ List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(dataBroker, interfaceName);
for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
// Fetch all interfaces on this port and trigger remove worker for each of them
InterfaceStateRemoveWorker interfaceStateRemoveWorker = new InterfaceStateRemoveWorker(idManager,
- nodeConnectorIdNew, nodeConnectorIdOld, fcNodeConnectorOld, interfaceChildEntry.getChildInterface(),
- InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(interfaceChildEntry.getChildInterface(), dataBroker));
+ nodeConnectorIdNew, nodeConnectorIdOld, fcNodeConnectorOld, interfaceChildEntry.getChildInterface());
DataStoreJobCoordinator.getInstance().enqueueJob(interfaceName, interfaceStateRemoveWorker);
}
return futures;
}
}
- public static List<InterfaceChildEntry> getInterfaceChildEntries(DataBroker dataBroker, String interfaceName, NodeConnectorId nodeConnectorId) {
+ public static List<InterfaceChildEntry> getInterfaceChildEntries(DataBroker dataBroker, String interfaceName) {
InterfaceParentEntry interfaceParentEntry =
InterfaceMetaUtils.getInterfaceParentEntryFromConfigDS(interfaceName, dataBroker);
if (interfaceParentEntry != null && interfaceParentEntry.getInterfaceChildEntry() != null) {
return interfaceParentEntry.getInterfaceChildEntry();
}
- StringBuilder parentInterface = new StringBuilder(IfmUtil.getDpnFromNodeConnectorId(nodeConnectorId));
- parentInterface.append(IfmConstants.OF_URI_SEPARATOR);
- parentInterface.append(interfaceName);
- interfaceParentEntry = InterfaceMetaUtils.getInterfaceParentEntryFromConfigDS(parentInterface.toString(), dataBroker);
- if (interfaceParentEntry != null && interfaceParentEntry.getInterfaceChildEntry() != null) {
- return interfaceParentEntry.getInterfaceChildEntry();
- }
return new ArrayList<>();
}
}
\ No newline at end of file
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.genius.interfacemanager.IfmConstants;
import org.opendaylight.genius.interfacemanager.IfmUtil;
import org.opendaylight.genius.interfacemanager.commons.AlivenessMonitorUtils;
import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
if (ifL2vlan == null || (IfL2vlan.L2vlanMode.Trunk != ifL2vlan.getL2vlanMode() && IfL2vlan.L2vlanMode.Transparent != ifL2vlan.getL2vlanMode())) {
return;
}
- String parentInterface = null;
- if (parentRefs.getDatapathNodeIdentifier() != null) {
- parentInterface = new StringBuilder().append(parentRefs.getDatapathNodeIdentifier()).append(IfmConstants.OF_URI_SEPARATOR).append(parentRefs.getParentInterface()).toString();
- } else {
- parentInterface = parentRefs.getParentInterface();
- }
WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
if(!InterfaceManagerCommonUtils.createInterfaceChildEntryIfNotPresent(dataBroker, transaction,
- parentInterface, interfaceNew.getName())){
+ parentRefs.getParentInterface(), interfaceNew.getName())){
return;
}
LOG.debug("adding vlan configuration for {}",interfaceNew.getName());
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState = null;
- if (parentInterface.contains(IfmConstants.OF_URI_SEPARATOR)) {
- ifState = InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(parentInterface, dataBroker);
- } else {
- ifState = InterfaceManagerCommonUtils.getInterfaceStateForUnknownDpn(parentRefs.getParentInterface(), dataBroker);
- }
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState =
+ InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(parentRefs.getParentInterface(), dataBroker);
InterfaceManagerCommonUtils.addStateEntry(interfaceNew.getName(), transaction, dataBroker, idManager, ifState);
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.genius.interfacemanager.IfmConstants;
import org.opendaylight.genius.interfacemanager.IfmUtil;
import org.opendaylight.genius.interfacemanager.commons.AlivenessMonitorUtils;
import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
return;
}
LOG.debug("removing vlan configuration for {}",interfaceName);
- if (parentRefs.getDatapathNodeIdentifier() != null) {
- parentRefs = new ParentRefsBuilder(parentRefs).setParentInterface(new StringBuilder().append(parentRefs.getDatapathNodeIdentifier())
- .append(IfmConstants.OF_URI_SEPARATOR).append(parentRefs.getParentInterface()).toString())
- .build();
- }
InterfaceManagerCommonUtils.deleteInterfaceStateInformation(interfaceName, transaction, idManagerService);
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState =
import com.google.common.util.concurrent.ListenableFuture;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.genius.interfacemanager.IfmConstants;
import org.opendaylight.genius.interfacemanager.IfmUtil;
import org.opendaylight.genius.interfacemanager.commons.AlivenessMonitorUtils;
import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface iface =
InterfaceManagerCommonUtils.getInterfaceFromConfigDS(interfaceKey, dataBroker);
- boolean isTunnelInterface = InterfaceManagerCommonUtils.isTunnelInterface(iface);
- if (!isTunnelInterface && fcNodeConnectorNew!=null && interfaceName.equals(fcNodeConnectorNew.getName())) {
- interfaceName = new StringBuilder(IfmUtil.getDpnFromNodeConnectorId(nodeConnectorId)).append(IfmConstants.OF_URI_SEPARATOR).append(interfaceName).toString();
- }
Interface ifState = InterfaceManagerCommonUtils.addStateEntry(iface, interfaceName, transaction, idManager,
physAddress, operStatus, adminStatus, nodeConnectorId);
// If this interface is a tunnel interface, create the tunnel ingress flow,and start tunnel monitoring
- if (isTunnelInterface) {
+ if (InterfaceManagerCommonUtils.isTunnelInterface(iface)) {
handleTunnelMonitoringAddition(futures, dataBroker, mdsalApiManager, alivenessMonitorService,
nodeConnectorId, transaction, ifState.getIfIndex(), iface.getAugmentation(IfTunnel.class), interfaceName);
return futures;
import com.google.common.util.concurrent.ListenableFuture;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.genius.interfacemanager.IfmConstants;
import org.opendaylight.genius.interfacemanager.IfmUtil;
import org.opendaylight.genius.interfacemanager.commons.AlivenessMonitorUtils;
import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
import org.opendaylight.genius.interfacemanager.servicebindings.flowbased.utilities.FlowBasedServicesUtils;
import org.opendaylight.genius.mdsalutil.NwConstants;
import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.AlivenessMonitorService;
AlivenessMonitorService alivenessMonitorService,
NodeConnectorId nodeConnectorIdNew, NodeConnectorId nodeConnectorIdOld,
DataBroker dataBroker, String interfaceName,
- FlowCapableNodeConnector fcNodeConnectorOld,
- Interface ifState) {
+ FlowCapableNodeConnector fcNodeConnectorOld) {
LOG.debug("Removing interface-state information for interface: {}", interfaceName);
List<ListenableFuture<Void>> futures = new ArrayList<>();
WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
//Remove event is because of connection lost between controller and switch, or switch shutdown.
// Hence, dont remove the interface but set the status as "unknown"
OvsInterfaceStateUpdateHelper.updateInterfaceStateOnNodeRemove(interfaceName, fcNodeConnectorOld, dataBroker,
- alivenessMonitorService, transaction, dpId.toString());
+ alivenessMonitorService, transaction);
}else{
-
+ InterfaceManagerCommonUtils.deleteStateEntry(interfaceName, transaction);
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface iface =
InterfaceManagerCommonUtils.getInterfaceFromConfigDS(interfaceName, dataBroker);
- boolean isTunnelInterface = IfmUtil.isTunnelType(iface, ifState);
- if (!isTunnelInterface && fcNodeConnectorOld!=null && interfaceName.equals(fcNodeConnectorOld.getName())) {
- interfaceName = new StringBuilder().append(dpId).append(IfmConstants.OF_URI_SEPARATOR).append(interfaceName).toString();
- }
- InterfaceManagerCommonUtils.deleteStateEntry(interfaceName, transaction);
if(iface != null) {
// If this interface is a tunnel interface, remove the tunnel ingress flow and stop lldp monitoring
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.genius.interfacemanager.IfmConstants;
import org.opendaylight.genius.interfacemanager.IfmUtil;
import org.opendaylight.genius.interfacemanager.commons.AlivenessMonitorUtils;
import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
PhysAddress physAddress = new PhysAddress(macAddressNew.getValue());
ifaceBuilder.setPhysAddress(physAddress);
}
- NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(key.firstIdentifierOf(NodeConnector.class)).getId();
- String dpnId = IfmUtil.getDpnFromNodeConnectorId(nodeConnectorId);
// modify the attributes in interface operational DS
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface iface =
handleInterfaceStateUpdates(interfaceName, transaction, dataBroker,
- ifaceBuilder, opstateModified, flowCapableNodeConnectorNew.getName(), operStatusNew, dpnId);
+ ifaceBuilder, opstateModified, flowCapableNodeConnectorNew.getName(), operStatusNew);
// start/stop monitoring based on opState
if(modifyTunnel(iface, opstateModified)){
public static void updateInterfaceStateOnNodeRemove(String interfaceName, FlowCapableNodeConnector flowCapableNodeConnector,
DataBroker dataBroker, AlivenessMonitorService alivenessMonitorService,
- WriteTransaction transaction, String dpnId){
+ WriteTransaction transaction){
LOG.debug("Updating interface oper-status to UNKNOWN for : {}", interfaceName);
InterfaceBuilder ifaceBuilder = new InterfaceBuilder();
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface iface =
handleInterfaceStateUpdates(interfaceName,transaction, dataBroker,
ifaceBuilder, true, flowCapableNodeConnector.getName(),
- Interface.OperStatus.Unknown, dpnId);
+ Interface.OperStatus.Unknown);
if (InterfaceManagerCommonUtils.isTunnelInterface(iface)){
handleTunnelMonitoringUpdates(alivenessMonitorService, dataBroker, iface.getAugmentation(IfTunnel.class),
interfaceName, Interface.OperStatus.Unknown);
handleInterfaceStateUpdates(String interfaceName, WriteTransaction transaction,
DataBroker dataBroker, InterfaceBuilder ifaceBuilder, boolean opStateModified,
String portName,
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus opState,String dpnId){
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus opState){
LOG.debug("updating interface state entry for {}", interfaceName);
- boolean isParentInterface = (interfaceName.equals(portName))?true:false;
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface iface =
- InterfaceManagerCommonUtils.getInterfaceFromConfigDS(interfaceName, dataBroker);
- if (!IfmUtil.isTunnelType(iface, null) && isParentInterface) {
- interfaceName = new StringBuilder(dpnId).append(IfmConstants.OF_URI_SEPARATOR).append(interfaceName).toString();
- }
InstanceIdentifier<Interface> ifStateId = IfmUtil.buildStateInterfaceId(interfaceName);
ifaceBuilder.setKey(new InterfaceKey(interfaceName));
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface iface =
+ InterfaceManagerCommonUtils.getInterfaceFromConfigDS(interfaceName, dataBroker);
// if interface config DS is null, do the update only for the lower-layer-interfaces
// which have no corresponding config entries
- if(iface == null && !isParentInterface){
+ if(iface == null && interfaceName != portName){
return null;
}
if (modifyOpState(iface, opStateModified)) {
BigInteger dpn) {
InterfaceBuilder builder = new InterfaceBuilder().setKey(new InterfaceKey(ifName)).setName(ifName)
.setDescription(desc).setEnabled(enabled).setType((Class<? extends InterfaceType>) ifType);
- ParentRefs parentRefs = new ParentRefsBuilder().setParentInterface(ifName).build();
+ ParentRefs parentRefs = new ParentRefsBuilder().setDatapathNodeIdentifier(dpn).setParentInterface(ifName).build();
builder.addAugmentation(ParentRefs.class, parentRefs);
if(ifType.equals(L2vlan.class)){
IfL2vlan l2vlan = new IfL2vlanBuilder().setVlanId(VlanId.getDefaultInstance("0"))
doReturn(Futures.immediateFuture(RpcResultBuilder.<Void>success().build())).when(idManager).releaseId(getIdInput);
removeHelper.removeInterfaceStateConfiguration(idManager, mdsalManager, alivenessMonitorService, nodeConnectorId,
- nodeConnectorId, dataBroker, InterfaceManagerTestUtil.interfaceName, fcNodeConnectorNew,
- InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(InterfaceManagerTestUtil.interfaceName, dataBroker));
+ nodeConnectorId, dataBroker, InterfaceManagerTestUtil.interfaceName, fcNodeConnectorNew);
verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
LogicalDatastoreType.OPERATIONAL, nodeInstanceIdentifier);
removeHelper.removeInterfaceStateConfiguration(idManager, mdsalManager, alivenessMonitorService, nodeConnectorId,
- nodeConnectorId, dataBroker, InterfaceManagerTestUtil.interfaceName, fcNodeConnectorNew,
- InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(InterfaceManagerTestUtil.interfaceName, dataBroker));
+ nodeConnectorId, dataBroker, InterfaceManagerTestUtil.interfaceName, fcNodeConnectorNew);
}
OvsVlanMemberConfigUpdateHelper memberConfigUpdateHelper;
NodeConnectorId nodeConnectorId;
- Nodes nodes;
- Node node;
- List<Node> nodeList = new ArrayList<>();
- List<NodeConnector> nodeConnectorList = new ArrayList<>();
NodeConnector nodeConnector;
Interface vlanInterfaceEnabled;
Interface vlanInterfaceDisabled;
InstanceIdentifier<Interface> interfaceInstanceIdentifier;
InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier;
- InstanceIdentifier<Nodes> nodesInstanceIdentifier = InstanceIdentifier.builder(Nodes.class).build();
InstanceIdentifier<InterfaceParentEntry> interfaceParentEntryIdentifier = null;
InterfaceParentEntry interfaceParentEntry;
InterfaceChildEntry interfaceChildEntry = null;
InstanceIdentifier<InterfaceChildEntry> interfaceChildEntryInstanceIdentifier;
InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> interfaceStateIdentifier;
- InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
- .state.Interface> interfaceStateIdentifierNew;
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateInterface;
@Before
private void setupMocks() {
nodeConnectorId = InterfaceManagerTestUtil.buildNodeConnectorId(BigInteger.valueOf(1), 1);
nodeConnector = InterfaceManagerTestUtil.buildNodeConnector(nodeConnectorId);
- nodeConnectorList.add(nodeConnector);
- node = new NodeBuilder().setId(NodeId.getDefaultInstance("openflow:1:1")).setKey(new NodeKey(NodeId
- .getDefaultInstance("openflow:1:1"))).build();
- nodeList.add(node);
- nodes = new NodesBuilder().setNode(nodeList).build();
vlanInterfaceEnabled = InterfaceManagerTestUtil.buildInterface(InterfaceManagerTestUtil.interfaceName, "Test Vlan Interface1", true, L2vlan.class, BigInteger.valueOf(1));
vlanInterfaceDisabled = InterfaceManagerTestUtil.buildInterface(InterfaceManagerTestUtil.interfaceName, "Test Vlan Interface1", false, L2vlan.class, BigInteger.valueOf(1));
interfaceInstanceIdentifier = IfmUtil.buildId(InterfaceManagerTestUtil.interfaceName);
nodeConnectorInstanceIdentifier = InterfaceManagerTestUtil.getNcIdent("openflow:1", nodeConnectorId);
interfaceStateIdentifier = IfmUtil.buildStateInterfaceId(vlanInterfaceEnabled.getName());
- interfaceStateIdentifierNew = IfmUtil.buildStateInterfaceId("1:s1-eth1");
stateInterface = InterfaceManagerTestUtil.buildStateInterface(InterfaceManagerTestUtil.interfaceName, nodeConnectorId);
AllocateIdOutput output = new AllocateIdOutputBuilder().setIdValue((long)1).build();
RpcResultBuilder<AllocateIdOutput> allocateIdRpcBuilder = RpcResultBuilder.success();
@Test
public void testAddVlanInterfaceWhenSwitchIsNotConnected() {
-
- Optional<Nodes> nodesOptional = Optional.of(nodes);
Optional<Interface> expectedInterface = Optional.of(vlanInterfaceEnabled);
- Optional.of(stateInterface);
+ Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateInterface = Optional.of(stateInterface);
- doReturn(Futures.immediateCheckedFuture(nodesOptional)).when(mockReadTx).read(LogicalDatastoreType
- .OPERATIONAL, nodesInstanceIdentifier);
doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
- LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
+ LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
- LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifierNew);
+ LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
LogicalDatastoreType.CONFIGURATION, interfaceParentEntryIdentifier);
@Test
public void testAddVlanInterfaceWhenSwitchIsConnected() {
- Optional<Nodes> nodesOptional = Optional.of(nodes);
Optional<Interface> expectedInterface = Optional.of(vlanInterfaceEnabled);
Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface>
expectedStateInterface = Optional.of(stateInterface);
- doReturn(Futures.immediateCheckedFuture(nodesOptional)).when(mockReadTx).read(LogicalDatastoreType
- .OPERATIONAL, nodesInstanceIdentifier);
doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
doReturn(Futures.immediateCheckedFuture(expectedStateInterface)).when(mockReadTx).read(
- LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifierNew);
+ LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
LogicalDatastoreType.CONFIGURATION, interfaceParentEntryIdentifier);
@Test
public void testAddVlanInterfaceWhenAdminStateDisabled() {
- Optional<Nodes> nodesOptional = Optional.of(nodes);
Optional<Interface> expectedInterface = Optional.of(vlanInterfaceEnabled);
Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateInterface =
Optional.of(stateInterface);
- doReturn(Futures.immediateCheckedFuture(nodesOptional)).when(mockReadTx).read(LogicalDatastoreType
- .OPERATIONAL, nodesInstanceIdentifier);
doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
doReturn(Futures.immediateCheckedFuture(expectedStateInterface)).when(mockReadTx).read(
- LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifierNew);
+ LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
LogicalDatastoreType.CONFIGURATION, interfaceParentEntryIdentifier);
Optional<NodeConnector> expectedNc = Optional.of(nodeConnector);
Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateIf = Optional.of(stateInterface);
doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
- LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
+ LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
doReturn(Futures.immediateCheckedFuture(expectedNc)).when(mockReadTx).read(
- LogicalDatastoreType.OPERATIONAL, nodeConnectorInstanceIdentifier);
+ LogicalDatastoreType.OPERATIONAL, nodeConnectorInstanceIdentifier);
doReturn(Futures.immediateCheckedFuture(expectedStateIf)).when(mockReadTx).read(
- LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
+ LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
LogicalDatastoreType.CONFIGURATION, interfaceParentEntryIdentifier);