import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.ovsdb.southbound.OvsdbClientKey;
import org.opendaylight.ovsdb.southbound.SouthboundMapper;
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.rev150105.OvsdbBridgeAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.external.ids.attributes.ExternalIds;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.external.ids.attributes.ExternalIdsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Trunks;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.TrunksBuilder;
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.TpId;
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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
-import org.opendaylight.yangtools.yang.binding.Augmentation;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
- private static final Logger LOG = LoggerFactory
- .getLogger(OvsdbPortUpdateCommand.class);
+ private static final Logger LOG = LoggerFactory.getLogger(OvsdbPortUpdateCommand.class);
public OvsdbPortUpdateCommand(OvsdbClientKey key, TableUpdates updates,
DatabaseSchema dbSchema) {
UUID portUUID = bridgePorts.next();
for (Port port : portUpdatedRows) {
if (portUUID.equals(port.getUuid())) {
+ Collection<Long> vlanId = port.getTagColumn().getData();
+ Set<Long> portTrunks = port.getTrunksColumn().getData();
bridgeName = bridge.getName();
NodeId bridgeId = SouthboundMapper.createManagedNodeId(
getKey(), new OvsdbBridgeName(bridgeName));
NodeBuilder nodeBuilder = new NodeBuilder();
nodeBuilder.setNodeId(bridgeId);
- OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder = new OvsdbTerminationPointAugmentationBuilder();
+ OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder
+ = new OvsdbTerminationPointAugmentationBuilder();
List<TerminationPoint> tpList = new ArrayList<TerminationPoint>();
TerminationPointBuilder entry = new TerminationPointBuilder();
TpId tpId = SouthboundMapper
.setName(port.getName());
ovsdbTerminationPointBuilder.setPortUuid(new Uuid(
port.getUuid().toString()));
+ if (vlanId.size() > 0) {
+ Iterator<Long> itr = vlanId.iterator();
+ // There are no loops here, just get the first element.
+ int id = itr.next().intValue();
+ ovsdbTerminationPointBuilder.setVlanTag(new VlanId(id));
+ }
+ List<Trunks> modelTrunks = new ArrayList<Trunks>();
+ for (Long trunk: portTrunks) {
+ if (trunk != null) {
+ modelTrunks.add(new TrunksBuilder().setTrunk(new VlanId(trunk.intValue())).build());
+ }
+ }
+ ovsdbTerminationPointBuilder.setTrunks(modelTrunks);
Column<GenericTableSchema, Set<UUID>> iface = port.getInterfacesColumn();
Set<UUID> ifUuid = iface.getData();
- Collection<Interface> ifUpdateRows = TyperUtils.extractRowsUpdated(Interface.class, getUpdates(), getDbSchema()).values();
+ Collection<Interface> ifUpdateRows = TyperUtils.extractRowsUpdated(
+ Interface.class, getUpdates(), getDbSchema()).values();
for (UUID ifIter : ifUuid) {
for (Interface interfIter : ifUpdateRows) {
Column<GenericTableSchema, String> typeColumn = interfIter.getTypeColumn();
String type = typeColumn.getData();
if ((interfIter.getUuid()).equals(ifIter)) {
- ovsdbTerminationPointBuilder.setInterfaceUuid(new Uuid(interfIter.getUuid().toString()));
- ovsdbTerminationPointBuilder.setInterfaceType(SouthboundMapper.createInterfaceType(type));
+ ovsdbTerminationPointBuilder.setInterfaceUuid(
+ new Uuid(interfIter.getUuid().toString()));
+ ovsdbTerminationPointBuilder.setInterfaceType(
+ SouthboundMapper.createInterfaceType(type));
+ Set<Long> ofPorts = interfIter.getOpenFlowPortColumn().getData();
+ if (ofPorts != null && !ofPorts.isEmpty()) {
+ Iterator<Long> ofPortsIter = ofPorts.iterator();
+ long ofPort = ofPortsIter.next();
+ if (ofPort >= 0) {
+ ovsdbTerminationPointBuilder
+ .setOfport(ofPort);
+ } else {
+ LOG.debug("Received negative value for ofPort from ovsdb for {} {} {}",
+ bridge.getName(), interfIter.getName(),ofPort);
+ }
+ }
+ Set<Long> ofPortRequests = interfIter
+ .getOpenFlowPortRequestColumn().getData();
+ if (ofPortRequests != null && !ofPortRequests.isEmpty()) {
+ Iterator<Long> ofPortRequestsIter = ofPortRequests.iterator();
+ int ofPort = ofPortRequestsIter.next().intValue();
+ if (ofPort >= 0) {
+ ovsdbTerminationPointBuilder
+ .setOfportRequest(ofPort);
+ } else {
+ LOG.debug("Received negative value for ofPort from ovsdb for {} {} {}",
+ bridge.getName(), interfIter.getName(),ofPort);
+ }
+ }
+
+ Map<String, String> externalIds = interfIter.getExternalIdsColumn().getData();
+ if (externalIds != null && !externalIds.isEmpty()) {
+ Set<String> externalIdKeys = externalIds.keySet();
+ ArrayList<ExternalIds> externalIdsList = new ArrayList<ExternalIds>();
+ String externalIdValue;
+ for (String externalIdKey : externalIdKeys) {
+ externalIdValue = externalIds.get(externalIdKey);
+ if (externalIdKey != null && externalIdValue != null) {
+ externalIdsList.add(new ExternalIdsBuilder()
+ .setExternalIdKey(externalIdKey)
+ .setExternalIdValue(externalIdValue).build());
+ }
+ }
+ ovsdbTerminationPointBuilder.setExternalIds(externalIdsList);
+ }
+
break;
}
}
}
entry.addAugmentation(
- (Class<? extends Augmentation<TerminationPoint>>) OvsdbTerminationPointAugmentation.class,
+ OvsdbTerminationPointAugmentation.class,
ovsdbTerminationPointBuilder.build());
tpList.add(entry.build());