OpenFlow port values are uint32, correcting the size in the model for that
[ovsdb.git] / southbound / southbound-impl / src / main / java / org / opendaylight / ovsdb / southbound / transactions / md / OvsdbPortUpdateCommand.java
index 03bd1d6460a8787b2d0471d9036fa51069ff0231..3332999dc894995acbb9e0e34cec44979257d778 100644 (file)
@@ -12,6 +12,7 @@ import java.util.ArrayList;
 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;
@@ -34,6 +35,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 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;
@@ -69,6 +74,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
                 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));
@@ -102,14 +108,17 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
                                     port.getUuid().toString()));
                             if (vlanId.size() > 0) {
                                 Iterator<Long> itr = vlanId.iterator();
-                                if (itr.next() != null) {
-                                    int id = itr.next().intValue();
-                                    ovsdbTerminationPointBuilder.setVlanTag(new VlanId(id));
-                                    // TODO: re-visit this iteration when expecting more than 1 vlan tag
-                                    //       per ovsdb termination point.
-                                    break;
+                                // 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(
@@ -123,6 +132,48 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
                                                 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;
                                     }
                                 }