import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.unimgr.impl.UnimgrConstants;
-import org.opendaylight.unimgr.impl.UnimgrMapper;
import org.opendaylight.unimgr.impl.UnimgrUtils;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.EvcAugmentation;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniDest;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniSource;
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;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
public class EvcDeleteCommand extends AbstractDeleteCommand {
- private static final Logger LOG = LoggerFactory.getLogger(EvcDeleteCommand.class);
-
public EvcDeleteCommand(DataBroker dataBroker,
AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
super.changes = changes;
UnimgrUtils.readNode(dataBroker,
LogicalDatastoreType.OPERATIONAL,
source.getUni());
- deleteEvcData(optionalSourceUniNode);
+ UnimgrUtils.deleteEvcData(dataBroker, optionalSourceUniNode);
}
}
}
UnimgrUtils.readNode(dataBroker,
LogicalDatastoreType.OPERATIONAL,
dest.getUni());
- deleteEvcData(optionalDestUniNode);
+ UnimgrUtils.deleteEvcData(dataBroker, optionalDestUniNode);
}
}
}
}
}
}
-
- private void deleteEvcData(Optional<Node> optionalUni) {
- if (optionalUni.isPresent()) {
- UniAugmentation uniAugmentation =
- optionalUni
- .get()
- .getAugmentation(UniAugmentation.class);
- InstanceIdentifier<Node> ovsdbNodeIid =
- uniAugmentation
- .getOvsdbNodeRef()
- .getValue()
- .firstIdentifierOf(Node.class);
- Optional<Node> optionalOvsdNode =
- UnimgrUtils.readNode(dataBroker,
- LogicalDatastoreType.OPERATIONAL,
- ovsdbNodeIid);
- if (optionalOvsdNode.isPresent()) {
- Node ovsdbNode = optionalOvsdNode.get();
- OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
- for (ManagedNodeEntry managedNodeEntry: ovsdbNodeAugmentation.getManagedNodeEntry()) {
- InstanceIdentifier<Node> bridgeIid = managedNodeEntry
- .getBridgeRef()
- .getValue()
- .firstIdentifierOf(Node.class);
- Optional<Node> optBridgeNode = UnimgrUtils.readNode(dataBroker, bridgeIid);
- if (optBridgeNode.isPresent()) {
- Node bridgeNode = optBridgeNode.get();
- InstanceIdentifier<TerminationPoint> iidGreTermPoint = UnimgrMapper.getTerminationPointIid(bridgeNode,
- UnimgrConstants.DEFAULT_GRE_TUNNEL_NAME);
- InstanceIdentifier<TerminationPoint> iidEthTermPoint = UnimgrMapper.getTerminationPointIid(bridgeNode,
- UnimgrConstants.DEFAULT_TUNNEL_IFACE);
- UnimgrUtils.deleteNode(dataBroker, iidGreTermPoint, LogicalDatastoreType.CONFIGURATION);
- UnimgrUtils.deleteNode(dataBroker, iidEthTermPoint, LogicalDatastoreType.CONFIGURATION);
- }
- }
- }
- } else {
- LOG.info("Unable to retrieve UNI from the EVC.");
- }
- }
}
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.ExecutionException;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.unimgr.impl.UnimgrConstants;
import org.opendaylight.unimgr.impl.UnimgrMapper;
import org.opendaylight.unimgr.impl.UnimgrUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.EvcAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
public class EvcUpdateCommand extends AbstractUpdateCommand {
@Override
public void execute() {
- for (final Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
- if (created.getValue() != null && created.getValue() instanceof EvcAugmentation) {
- final EvcAugmentation evc = (EvcAugmentation) created.getValue();
- final InstanceIdentifier<?> evcKey = created.getKey();
+ for (final Entry<InstanceIdentifier<?>, DataObject> updated : changes.entrySet()) {
+ if (updated.getValue() != null && updated.getValue() instanceof EvcAugmentation) {
+ final EvcAugmentation evc = (EvcAugmentation) updated.getValue();
+ final InstanceIdentifier<?> evcKey = updated.getKey();
// FIXME: For now, we assume that there is 1 uni per
// source/destination
LOG.error("Source UNI cannot be null.");
break;
}
- LOG.trace("New EVC created, source IP: {} destination IP {}.",
- evc.getUniSource().iterator().next().getIpAddress().getIpv4Address(),
- evc.getUniDest().iterator().next().getIpAddress().getIpv4Address());
+
+ final Ipv4Address laterUni1Ip = evc.getUniSource().iterator().next().getIpAddress().getIpv4Address();
+ final Ipv4Address laterUni2Ip = evc.getUniDest().iterator().next().getIpAddress().getIpv4Address();
+ LOG.trace("New EVC created, source IP: {} destination IP {}.", laterUni1Ip, laterUni2Ip);
+
+
+ final ReadTransaction readTransac = dataBroker.newReadOnlyTransaction();
+ final CheckedFuture<?, ReadFailedException> retFormerEvc = readTransac.read(LogicalDatastoreType.OPERATIONAL, evcKey);
+ EvcAugmentation formerEvc;
+ try {
+ formerEvc = (EvcAugmentation) ((Optional<EvcAugmentation>) retFormerEvc.checkedGet()).get();
+ final Ipv4Address formerUni1ip = formerEvc.getUniDest().iterator().next().getIpAddress().getIpv4Address();
+ final Ipv4Address formerUni2ip = formerEvc.getUniDest().iterator().next().getIpAddress().getIpv4Address();
+
+ if (formerUni1ip.equals(laterUni1Ip)) {
+ // do nothing
+ } else if (formerUni1ip.equals(laterUni2Ip)) {
+ // do nothing
+ } else {
+ LOG.info("{} is not part of the EVC, removing configuration", formerUni1ip);
+ final InstanceIdentifier<?> formerUniIID = UnimgrMapper.getUniIid(dataBroker, new IpAddress(formerUni1ip), LogicalDatastoreType.OPERATIONAL);
+ final Optional<Node> formerUni = UnimgrUtils.readNode(dataBroker, LogicalDatastoreType.OPERATIONAL, formerUniIID);
+ UnimgrUtils.deleteEvcData(dataBroker, formerUni);
+ }
+ if (formerUni2ip.equals(laterUni1Ip)) {
+ // do nothing
+ } else if (formerUni2ip.equals(laterUni2Ip)) {
+ // do nothing
+ } else {
+ LOG.info("{} is not part of the EVC, removing configuration", formerUni1ip);
+ final InstanceIdentifier<?> formerUniIID = UnimgrMapper.getUniIid(dataBroker, new IpAddress(formerUni1ip), LogicalDatastoreType.OPERATIONAL);
+ final Optional<Node> formerUni = UnimgrUtils.readNode(dataBroker, LogicalDatastoreType.OPERATIONAL, formerUniIID);
+ UnimgrUtils.deleteEvcData(dataBroker, formerUni);
+ }
+ } catch (ReadFailedException e) {
+ LOG.error("Failed to retrieve former EVC {}", evcKey, e);
+ }
+
InstanceIdentifier<Node> sourceUniIid;
InstanceIdentifier<Node> destinationUniIid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniSource;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniSourceBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniSourceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.Speed;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.speed.Speed100M;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.speed.Speed10G;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.speed.Speed10M;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.speed.Speed1G;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.Speed;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
return result;
}
+ public static void deleteEvcData(DataBroker dataBroker, Optional<Node> optionalUni) {
+ if (optionalUni.isPresent()) {
+ UniAugmentation uniAugmentation =
+ optionalUni
+ .get()
+ .getAugmentation(UniAugmentation.class);
+ InstanceIdentifier<Node> ovsdbNodeIid =
+ uniAugmentation
+ .getOvsdbNodeRef()
+ .getValue()
+ .firstIdentifierOf(Node.class);
+ Optional<Node> optionalOvsdNode =
+ UnimgrUtils.readNode(dataBroker,
+ LogicalDatastoreType.OPERATIONAL,
+ ovsdbNodeIid);
+ if (optionalOvsdNode.isPresent()) {
+ Node ovsdbNode = optionalOvsdNode.get();
+ OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
+ for (ManagedNodeEntry managedNodeEntry: ovsdbNodeAugmentation.getManagedNodeEntry()) {
+ InstanceIdentifier<Node> bridgeIid = managedNodeEntry
+ .getBridgeRef()
+ .getValue()
+ .firstIdentifierOf(Node.class);
+ Optional<Node> optBridgeNode = UnimgrUtils.readNode(dataBroker, bridgeIid);
+ if (optBridgeNode.isPresent()) {
+ Node bridgeNode = optBridgeNode.get();
+ InstanceIdentifier<TerminationPoint> iidGreTermPoint = UnimgrMapper.getTerminationPointIid(bridgeNode,
+ UnimgrConstants.DEFAULT_GRE_TUNNEL_NAME);
+ InstanceIdentifier<TerminationPoint> iidEthTermPoint = UnimgrMapper.getTerminationPointIid(bridgeNode,
+ UnimgrConstants.DEFAULT_TUNNEL_IFACE);
+ UnimgrUtils.deleteNode(dataBroker, iidGreTermPoint, LogicalDatastoreType.CONFIGURATION);
+ UnimgrUtils.deleteNode(dataBroker, iidEthTermPoint, LogicalDatastoreType.CONFIGURATION);
+ }
+ }
+ }
+ } else {
+ LOG.info("Unable to retrieve UNI from the EVC.");
+ }
+ }
+
/**
* Deletes a termination Point from the configuration data store.
* @param dataBroker The instance of the data broker to create transactions