X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=hwvtepsouthbound%2Fhwvtepsouthbound-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fhwvtepsouthbound%2Ftransactions%2Fmd%2FUcastMacsRemoteUpdateCommand.java;h=7ebe81a2e471954db211a982373308059e618fb7;hb=f3e348263b4ad6f3ca1a7def9d6a251f394ea4ec;hp=cac4a0af38a66a951d288d990556377065f6ffe9;hpb=760c8e69516c043092115621f2450f7ea6364b67;p=ovsdb.git diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/UcastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/UcastMacsRemoteUpdateCommand.java index cac4a0af3..7ebe81a2e 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/UcastMacsRemoteUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/UcastMacsRemoteUpdateCommand.java @@ -8,34 +8,103 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance; +import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundMapper; +import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundUtil; import org.opendaylight.ovsdb.lib.message.TableUpdates; import org.opendaylight.ovsdb.lib.notation.UUID; import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils; +import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch; +import org.opendaylight.ovsdb.schema.hardwarevtep.PhysicalLocator; import org.opendaylight.ovsdb.schema.hardwarevtep.UcastMacsRemote; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +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.yang.types.rev130715.MacAddress; +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.HwvtepGlobalAugmentationBuilder; +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.HwvtepPhysicalLocatorRef; +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.RemoteUcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteUcastMacsBuilder; +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.NodeBuilder; +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.InstanceIdentifier; + +import com.google.common.base.Optional; public class UcastMacsRemoteUpdateCommand extends AbstractTransactionCommand { - private static final Logger LOG = LoggerFactory.getLogger(UcastMacsRemoteUpdateCommand.class); - private Map updatedUMacsRemoteRows; - private Map oldUMacsRemoteRows; + private final Map updatedUMacsRemoteRows; + private final Map updatedPLocRows; + private final Map updatedLSRows; - public UcastMacsRemoteUpdateCommand(HwvtepConnectionInstance key, TableUpdates updates, - DatabaseSchema dbSchema) { + public UcastMacsRemoteUpdateCommand(HwvtepConnectionInstance key, TableUpdates updates, DatabaseSchema dbSchema) { super(key, updates, dbSchema); - updatedUMacsRemoteRows = TyperUtils.extractRowsUpdated(UcastMacsRemote.class, getUpdates(),getDbSchema()); - oldUMacsRemoteRows = TyperUtils.extractRowsOld(UcastMacsRemote.class, getUpdates(),getDbSchema()); + updatedUMacsRemoteRows = TyperUtils.extractRowsUpdated(UcastMacsRemote.class, getUpdates(), getDbSchema()); + updatedPLocRows = TyperUtils.extractRowsUpdated(PhysicalLocator.class, getUpdates(), getDbSchema()); + updatedLSRows = TyperUtils.extractRowsUpdated(LogicalSwitch.class, getUpdates(), getDbSchema()); } @Override public void execute(ReadWriteTransaction transaction) { - // TODO Auto-generated method stub + for (UcastMacsRemote ucastMacsRemote : updatedUMacsRemoteRows.values()) { + updateUcastMacsRemote(transaction, ucastMacsRemote); + } + } + + private void updateUcastMacsRemote(ReadWriteTransaction transaction, UcastMacsRemote ucastMacsRemote) { + final InstanceIdentifier connectionIId = getOvsdbConnectionInstance().getInstanceIdentifier(); + Optional connection = HwvtepSouthboundUtil.readNode(transaction, connectionIId); + if (connection.isPresent()) { + Node connectionNode = buildConnectionNode(ucastMacsRemote); + transaction.merge(LogicalDatastoreType.OPERATIONAL, connectionIId, connectionNode); + //TODO: Handle any deletes + } + } + + private Node buildConnectionNode(UcastMacsRemote uMacRemote) { + NodeBuilder connectionNode = new NodeBuilder(); + connectionNode.setNodeId(getOvsdbConnectionInstance().getNodeId()); + InstanceIdentifier nodeIid = getOvsdbConnectionInstance().getInstanceIdentifier(); + HwvtepGlobalAugmentationBuilder hgAugmentationBuilder = new HwvtepGlobalAugmentationBuilder(); + List remoteUMacs = new ArrayList<>(); + RemoteUcastMacsBuilder rumBuilder = new RemoteUcastMacsBuilder(); + rumBuilder.setMacEntryKey(new MacAddress(uMacRemote.getMac())); + if (uMacRemote.getIpAddr() != null && !uMacRemote.getIpAddr().isEmpty()) { + rumBuilder.setIpaddr(new IpAddress(uMacRemote.getIpAddr().toCharArray())); + } + if (uMacRemote.getLocatorColumn() != null + && uMacRemote.getLocatorColumn().getData() != null) { + UUID pLocUUID = uMacRemote.getLocatorColumn().getData(); + PhysicalLocator physicalLocator = updatedPLocRows.get(pLocUUID); + if (physicalLocator != null) { + InstanceIdentifier plIid = HwvtepSouthboundMapper.createInstanceIdentifier(nodeIid, + physicalLocator); + rumBuilder.setLocatorRef(new HwvtepPhysicalLocatorRef(plIid)); + } + } + if (uMacRemote.getLogicalSwitchColumn() != null + && uMacRemote.getLogicalSwitchColumn().getData() != null) { + UUID lsUUID = uMacRemote.getLogicalSwitchColumn().getData(); + final LogicalSwitch logicalSwitch = updatedLSRows.get(lsUUID); + if (logicalSwitch != null) { + InstanceIdentifier lSwitchIid = + HwvtepSouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(), logicalSwitch); + rumBuilder.setLogicalSwitchRef(new HwvtepLogicalSwitchRef(lSwitchIid)); + } + } + remoteUMacs.add(rumBuilder.build()); + hgAugmentationBuilder.setRemoteUcastMacs(remoteUMacs); + connectionNode.addAugmentation(HwvtepGlobalAugmentation.class, hgAugmentationBuilder.build()); + return connectionNode.build(); } }