import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch;
import org.opendaylight.ovsdb.schema.hardwarevtep.PhysicalPort;
import org.opendaylight.ovsdb.schema.hardwarevtep.PhysicalSwitch;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepLogicalSwitchRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepNodeName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.Switches;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.VlanBindings;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.VlanBindingsBuilder;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
+import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Optional<Node> node = HwvtepSouthboundUtil.readNode(transaction, connectionIId);
if (node.isPresent()) {
updateTerminationPoints(transaction, node.get());
- //TODO: Handle Deletion of VLAN Bindings
+ // TODO: Handle Deletion of VLAN Bindings
}
}
buildTerminationPoint(tpAugmentationBuilder, pPortUpdate);
tpBuilder.addAugmentation(HwvtepPhysicalPortAugmentation.class, tpAugmentationBuilder.build());
if (oldPPRows.containsKey(pPortUpdateEntry.getKey())) {
- transaction.merge(LogicalDatastoreType.OPERATIONAL,
- tpPath, tpBuilder.build());
+ transaction.merge(LogicalDatastoreType.OPERATIONAL, tpPath, tpBuilder.build());
} else {
- transaction.put(LogicalDatastoreType.OPERATIONAL,
- tpPath, tpBuilder.build());
+ transaction.put(LogicalDatastoreType.OPERATIONAL, tpPath, tpBuilder.build());
+ }
+ // Update with Deleted VlanBindings
+ if (oldPPRows.get(pPortUpdateEntry.getKey()) != null) {
+ List<InstanceIdentifier<VlanBindings>> vBIiList = new ArrayList<>();
+ Map<Long, UUID> oldVb = oldPPRows.get(pPortUpdateEntry.getKey()).getVlanBindingsColumn().getData();
+ Map<Long, UUID> updatedVb = pPortUpdateEntry.getValue().getVlanBindingsColumn().getData();
+ for (Map.Entry<Long, UUID> oldVbEntry : oldVb.entrySet()) {
+ Long key = oldVbEntry.getKey();
+ if (!updatedVb.containsKey(key)) {
+ VlanBindings vBindings = createVlanBinding(key, oldVbEntry.getValue());
+ InstanceIdentifier<VlanBindings> vBid = getInstanceIdentifier(tpPath, vBindings);
+ vBIiList.add(vBid);
+ }
+ deleteEntries(transaction, vBIiList);
+ }
}
}
}
}
- private void buildTerminationPoint(
- HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder, PhysicalPort portUpdate) {
+ private <T extends DataObject> void deleteEntries(ReadWriteTransaction transaction,
+ List<InstanceIdentifier<T>> entryIids) {
+ for (InstanceIdentifier<T> entryIid : entryIids) {
+ transaction.delete(LogicalDatastoreType.OPERATIONAL, entryIid);
+ }
+ }
+
+ private InstanceIdentifier<VlanBindings> getInstanceIdentifier(InstanceIdentifier<TerminationPoint> tpPath,
+ VlanBindings vBindings) {
+ return HwvtepSouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(), tpPath, vBindings);
+ }
+
+ private void buildTerminationPoint(HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder,
+ PhysicalPort portUpdate) {
updatePhysicalPortId(portUpdate, tpAugmentationBuilder);
updatePort(portUpdate, tpAugmentationBuilder);
}
- private void updatePort(
- PhysicalPort portUpdate, HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder) {
+ private void updatePort(PhysicalPort portUpdate, HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder) {
updateVlanBindings(portUpdate, tpAugmentationBuilder);
+ tpAugmentationBuilder.setPhysicalPortUuid(new Uuid(portUpdate.getUuid().toString()));
}
- private void updatePhysicalPortId(
- PhysicalPort portUpdate, HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder) {
+ private void updatePhysicalPortId(PhysicalPort portUpdate,
+ HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder) {
tpAugmentationBuilder.setHwvtepNodeName(new HwvtepNodeName(portUpdate.getName()));
if (portUpdate.getDescription() != null) {
tpAugmentationBuilder.setHwvtepNodeDescription(portUpdate.getDescription());
}
}
- private void updateVlanBindings(
- PhysicalPort portUpdate, HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder) {
+ private void updateVlanBindings(PhysicalPort portUpdate,
+ HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder) {
Map<Long, UUID> vlanBindings = portUpdate.getVlanBindingsColumn().getData();
if (vlanBindings != null && !vlanBindings.isEmpty()) {
List<VlanBindings> vlanBindingsList = new ArrayList<>();
}
private HwvtepLogicalSwitchRef getLogicalSwitchRef(UUID switchUUID) {
- if (lSwitchUpdatedRows.get(switchUUID) != null) {
- return new HwvtepLogicalSwitchRef(lSwitchUpdatedRows.get(switchUUID).getName());
+ LogicalSwitch logicalSwitch = lSwitchUpdatedRows.get(switchUUID);
+ if (logicalSwitch != null) {
+ InstanceIdentifier<LogicalSwitches> lSwitchIid =
+ HwvtepSouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(), logicalSwitch);
+ return new HwvtepLogicalSwitchRef(lSwitchIid);
}
return null;
}
return Optional.absent();
}
- private Optional<InstanceIdentifier<Node>> getTerminationPointSwitch(
- final ReadWriteTransaction transaction, Node node, String tpName) {
+ private Optional<InstanceIdentifier<Node>> getTerminationPointSwitch(final ReadWriteTransaction transaction,
+ Node node, String tpName) {
HwvtepGlobalAugmentation hwvtepNode = node.getAugmentation(HwvtepGlobalAugmentation.class);
List<Switches> switchNodes = hwvtepNode.getSwitches();
for (Switches managedNodeEntry : switchNodes) {
@SuppressWarnings("unchecked")
- Node switchNode = HwvtepSouthboundUtil.readNode(transaction,
- (InstanceIdentifier<Node>) managedNodeEntry.getSwitchRef().getValue()).get();
+ Node switchNode = HwvtepSouthboundUtil
+ .readNode(transaction, (InstanceIdentifier<Node>) managedNodeEntry.getSwitchRef().getValue()).get();
TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
TerminationPointKey tpKey = new TerminationPointKey(new TpId(tpName));
tpBuilder.setKey(tpKey);