X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=southbound%2Fsouthbound-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fsouthbound%2Ftransactions%2Fmd%2FOvsdbPortUpdateCommand.java;h=148f3cdde536884954eda008453fe0787665f76b;hb=50e7f939993fa9da3c80a1c8d166629a4868af9c;hp=0bfb3e22cecd573f850e7a5ffbf25d00985b1f14;hpb=36cf00957d29ccd1b57ca4fc7b2b28d0019cfeab;p=ovsdb.git diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java index 0bfb3e22c..148f3cdde 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java @@ -8,6 +8,9 @@ package org.opendaylight.ovsdb.southbound.transactions.md; +import static org.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog; + +import com.google.common.base.Optional; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -15,7 +18,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; - import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; @@ -30,18 +32,22 @@ import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils; import org.opendaylight.ovsdb.schema.openvswitch.Bridge; import org.opendaylight.ovsdb.schema.openvswitch.Interface; import org.opendaylight.ovsdb.schema.openvswitch.Port; +import org.opendaylight.ovsdb.schema.openvswitch.Qos; import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance; import org.opendaylight.ovsdb.southbound.SouthboundConstants; import org.opendaylight.ovsdb.southbound.SouthboundMapper; import org.opendaylight.ovsdb.southbound.SouthboundUtil; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; 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.OvsdbNodeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbQosRef; 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.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.QosEntriesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfd; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdKey; @@ -62,6 +68,9 @@ 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.ovsdb.port._interface.attributes.PortExternalIdsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigs; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.QosEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.QosEntryBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.QosEntryKey; 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.NetworkTopology; @@ -78,8 +87,6 @@ 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 Map portUpdatedRows; @@ -87,6 +94,8 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { private Map interfaceUpdatedRows; private Map interfaceOldRows; private Map bridgeUpdatedRows; + private Map qosUpdatedRows; + public OvsdbPortUpdateCommand(OvsdbConnectionInstance key, TableUpdates updates, DatabaseSchema dbSchema) { super(key, updates, dbSchema); @@ -95,6 +104,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { interfaceUpdatedRows = TyperUtils.extractRowsUpdated(Interface.class, updates, dbSchema); interfaceOldRows = TyperUtils.extractRowsOld(Interface.class, updates, dbSchema); bridgeUpdatedRows = TyperUtils.extractRowsUpdated(Bridge.class, updates, dbSchema); + qosUpdatedRows = TyperUtils.extractRowsUpdated(Qos.class, updates, dbSchema); } @Override @@ -109,6 +119,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { updateTerminationPoints(transaction, node.get()); } } + private void updateTerminationPoints(ReadWriteTransaction transaction, Node node) { for (Entry portUpdate : portUpdatedRows.entrySet()) { String portName = null; @@ -127,13 +138,12 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { getInstanceIdentifier(bridgeIid.get(), portUpdate.getValue()); OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder = new OvsdbTerminationPointAugmentationBuilder(); - buildTerminationPoint(tpAugmentationBuilder,portUpdate.getValue()); - UUID interfaceUUID = (UUID)portUpdate.getValue().getInterfacesColumn().getData().toArray()[0]; - if (interfaceUpdatedRows.containsKey(interfaceUUID)) { - buildTerminationPoint(tpAugmentationBuilder, - interfaceUpdatedRows.get(interfaceUUID)); - interfaceUpdatedRows.remove(interfaceUUID); - interfaceOldRows.remove(interfaceUUID); + buildTerminationPoint(transaction, tpPath, tpAugmentationBuilder, node, portUpdate); + UUID interfaceUuid = (UUID)portUpdate.getValue().getInterfacesColumn().getData().toArray()[0]; + if (interfaceUpdatedRows.containsKey(interfaceUuid)) { + buildTerminationPoint(tpAugmentationBuilder, interfaceUpdatedRows.get(interfaceUuid)); + interfaceUpdatedRows.remove(interfaceUuid); + interfaceOldRows.remove(interfaceUuid); } tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build()); if (portOldRows.containsKey(portUpdate.getKey()) && !portQosCleared(portUpdate)) { @@ -150,13 +160,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { interfaceName = interfaceUpdatedRows.get(interfaceUpdate.getKey()).getNameColumn().getData(); Optional> bridgeIid = getTerminationPointBridge( transaction, node, interfaceName); if (bridgeIid.isPresent()) { - NodeId bridgeId = SouthboundMapper.createManagedNodeId(bridgeIid.get()); TerminationPointKey tpKey = new TerminationPointKey(new TpId(interfaceName)); - InstanceIdentifier tpPath = InstanceIdentifier - .create(NetworkTopology.class) - .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID)) - .child(Node.class,new NodeKey(bridgeId)) - .child(TerminationPoint.class,tpKey); TerminationPointBuilder tpBuilder = new TerminationPointBuilder(); tpBuilder.setKey(tpKey); tpBuilder.setTpId(tpKey.getTpId()); @@ -164,20 +168,29 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { new OvsdbTerminationPointAugmentationBuilder(); buildTerminationPoint(tpAugmentationBuilder, interfaceUpdate.getValue()); tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build()); + NodeId bridgeId = SouthboundMapper.createManagedNodeId(bridgeIid.get()); + InstanceIdentifier tpPath = InstanceIdentifier + .create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID)) + .child(Node.class,new NodeKey(bridgeId)) + .child(TerminationPoint.class,tpKey); transaction.merge(LogicalDatastoreType.OPERATIONAL, tpPath, tpBuilder.build()); } } } - private void buildTerminationPoint(OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder, - Port portUpdate) { + + private void buildTerminationPoint(ReadWriteTransaction transaction, + InstanceIdentifier tpPath, + OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder, + Node node, Entry portUpdate) { tpAugmentationBuilder - .setName(portUpdate.getName()); + .setName(portUpdate.getValue().getName()); tpAugmentationBuilder.setPortUuid(new Uuid( - portUpdate.getUuid().toString())); - updatePort(portUpdate, tpAugmentationBuilder); + portUpdate.getValue().getUuid().toString())); + updatePort(transaction, node, tpPath, portUpdate, tpAugmentationBuilder); } private void buildTerminationPoint(OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder, @@ -203,30 +216,29 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { return node; } - private Optional> getTerminationPointBridge( UUID portUUID) { - for (UUID bridgeUUID : this.bridgeUpdatedRows.keySet()) { - if (this.bridgeUpdatedRows.get(bridgeUUID).getPortsColumn().getData().contains(portUUID)) { + private Optional> getTerminationPointBridge(UUID portUuid) { + for (UUID bridgeUuid : this.bridgeUpdatedRows.keySet()) { + if (this.bridgeUpdatedRows.get(bridgeUuid).getPortsColumn().getData().contains(portUuid)) { return Optional.of(SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(), - this.bridgeUpdatedRows.get(bridgeUUID))); + this.bridgeUpdatedRows.get(bridgeUuid))); } } return Optional.absent(); } + + @SuppressWarnings("unchecked") private Optional> getTerminationPointBridge( final ReadWriteTransaction transaction, Node node, String tpName) { OvsdbNodeAugmentation ovsdbNode = node.getAugmentation(OvsdbNodeAugmentation.class); List managedNodes = ovsdbNode.getManagedNodeEntry(); + TpId tpId = new TpId(tpName); for ( ManagedNodeEntry managedNodeEntry : managedNodes ) { - @SuppressWarnings("unchecked") - Node managedNode = readNode(transaction - ,(InstanceIdentifier)managedNodeEntry.getBridgeRef().getValue()).get(); - TerminationPointBuilder tpBuilder = new TerminationPointBuilder(); - TerminationPointKey tpKey = new TerminationPointKey(new TpId(tpName)); - tpBuilder.setKey(tpKey); - if (managedNode.getTerminationPoint().contains(tpBuilder.build())) { - OvsdbBridgeAugmentation ovsdbNodeAugment - = managedNode.getAugmentation(OvsdbBridgeAugmentation.class); - return Optional.of((InstanceIdentifier)managedNodeEntry.getBridgeRef().getValue()); + Node managedNode = readNode(transaction, + (InstanceIdentifier)managedNodeEntry.getBridgeRef().getValue()).get(); + for (TerminationPoint tpEntry : managedNode.getTerminationPoint()) { + if (tpId.equals(tpEntry.getTpId())) { + return Optional.of((InstanceIdentifier)managedNodeEntry.getBridgeRef().getValue()); + } } } return Optional.absent(); @@ -240,15 +252,16 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { updateInterface(interfaceUpdate, type,ovsdbTerminationPointBuilder); } - private void updatePort(final Port port, + private void updatePort(final ReadWriteTransaction transaction, final Node node, + final InstanceIdentifier tpPath, final Entry port, final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) { - updateVlan(port, ovsdbTerminationPointBuilder); - updateVlanTrunks(port, ovsdbTerminationPointBuilder); - updateVlanMode(port, ovsdbTerminationPointBuilder); - updateQos(port, ovsdbTerminationPointBuilder); - updatePortExternalIds(port, ovsdbTerminationPointBuilder); - updatePortOtherConfig(port, ovsdbTerminationPointBuilder); + updateVlan(port.getValue(), ovsdbTerminationPointBuilder); + updateVlanTrunks(port.getValue(), ovsdbTerminationPointBuilder); + updateVlanMode(port.getValue(), ovsdbTerminationPointBuilder); + updateQos(transaction, node, tpPath, port, ovsdbTerminationPointBuilder); + updatePortExternalIds(port.getValue(), ovsdbTerminationPointBuilder); + updatePortOtherConfig(port.getValue(), ovsdbTerminationPointBuilder); } private void updateInterface(final Interface interf, @@ -267,6 +280,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { updateInterfaceLldp(interf, ovsdbTerminationPointBuilder); updateInterfaceBfd(interf, ovsdbTerminationPointBuilder); updateInterfaceBfdStatus(interf, ovsdbTerminationPointBuilder); + updateInterfacePolicing(interf, ovsdbTerminationPointBuilder); } private void updateVlan(final Port port, @@ -304,16 +318,16 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { if (!vlanMode.isEmpty()) { Iterator itr = vlanMode.iterator(); String vlanType = itr.next(); - if (vlanType.equals(SouthboundConstants.VLANMODES.ACCESS.getMode())) { + if (vlanType.equals(SouthboundConstants.VlanModes.ACCESS.getMode())) { ovsdbTerminationPointBuilder .setVlanMode(OvsdbPortInterfaceAttributes.VlanMode.Access); - } else if (vlanType.equals(SouthboundConstants.VLANMODES.NATIVE_TAGGED.getMode())) { + } else if (vlanType.equals(SouthboundConstants.VlanModes.NATIVE_TAGGED.getMode())) { ovsdbTerminationPointBuilder .setVlanMode(OvsdbPortInterfaceAttributes.VlanMode.NativeTagged); - } else if (vlanType.equals(SouthboundConstants.VLANMODES.NATIVE_UNTAGGED.getMode())) { + } else if (vlanType.equals(SouthboundConstants.VlanModes.NATIVE_UNTAGGED.getMode())) { ovsdbTerminationPointBuilder .setVlanMode(OvsdbPortInterfaceAttributes.VlanMode.NativeUntagged); - } else if (vlanType.equals(SouthboundConstants.VLANMODES.TRUNK.getMode())) { + } else if (vlanType.equals(SouthboundConstants.VlanModes.TRUNK.getMode())) { ovsdbTerminationPointBuilder .setVlanMode(OvsdbPortInterfaceAttributes.VlanMode.Trunk); } else { @@ -322,17 +336,83 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { } } - private void updateQos(final Port port, - final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) { - if (port.getQosColumn() == null) { + @SuppressWarnings("unchecked") + private void updateQos(final ReadWriteTransaction transaction, final Node node, + InstanceIdentifier tpPath, final Entry port, + final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) { + if (port.getValue() == null) { return; } - Collection qosUuidCol = port.getQosColumn().getData(); + Collection qosUuidCol = port.getValue().getQosColumn().getData(); if (!qosUuidCol.isEmpty()) { - Iterator itr = qosUuidCol.iterator(); - UUID qosUuid = itr.next(); + UUID qosUuid = qosUuidCol.iterator().next(); ovsdbTerminationPointBuilder.setQos(new Uuid(qosUuid.toString())); + + NodeId nodeId = node.getNodeId(); + OvsdbNodeAugmentation ovsdbNode = node.getAugmentation(OvsdbNodeAugmentation.class); + + // Delete an older QoS entry + if (portOldRows.containsKey(port.getKey()) && portOldRows.get(port.getKey()).getQosColumn() != null) { + Collection oldQos = portOldRows.get(port.getKey()).getQosColumn().getData(); + if (!oldQos.isEmpty()) { + UUID oldQosUuid = oldQos.iterator().next(); + if (!oldQosUuid.equals(qosUuid)) { + InstanceIdentifier oldQosIid = getQosIid(nodeId, ovsdbNode, oldQosUuid); + if (oldQosIid != null) { + InstanceIdentifier oldPortQosIid = tpPath + .augmentation(OvsdbTerminationPointAugmentation.class) + .child(QosEntry.class, + new QosEntryKey(new Long(SouthboundConstants.PORT_QOS_LIST_KEY))); +// new QosEntryKey(new OvsdbQosRef(oldQosIid))); + transaction.delete(LogicalDatastoreType.OPERATIONAL, oldPortQosIid); + } + } + } + } + + InstanceIdentifier qosIid = getQosIid(nodeId, ovsdbNode, qosUuid); + if (qosIid != null) { + List qosList = new ArrayList<>(); + OvsdbQosRef qosRef = new OvsdbQosRef(qosIid); + qosList.add(new QosEntryBuilder() + .setKey(new QosEntryKey(new Long(SouthboundConstants.PORT_QOS_LIST_KEY))) + .setQosRef(qosRef).build()); + ovsdbTerminationPointBuilder.setQosEntry(qosList); + } + } + } + + @SuppressWarnings("unchecked") + private InstanceIdentifier getQosIid(NodeId nodeId, OvsdbNodeAugmentation ovsdbNode, UUID qosUuid) { + // Search for the QoS entry first in the operational datastore + for (QosEntries qosEntry : ovsdbNode.getQosEntries()) { + if (qosEntry.getQosUuid().equals(new Uuid(qosUuid.toString()))) { + return SouthboundMapper.createInstanceIdentifier(nodeId) + .augmentation(OvsdbNodeAugmentation.class) + .child(QosEntries.class, new QosEntriesKey(qosEntry.getQosId())); + } + } + + // Search for the QoS entry in the current OVS updates + for (Entry qosUpdate : qosUpdatedRows.entrySet()) { + Qos qos = qosUpdate.getValue(); + if (qos.getUuid().equals(qosUuid)) { + if (qos.getExternalIdsColumn().getData().containsKey(SouthboundConstants.IID_EXTERNAL_ID_KEY)) { + return (InstanceIdentifier) SouthboundUtil.deserializeInstanceIdentifier( + qos.getExternalIdsColumn().getData().get(SouthboundConstants.IID_EXTERNAL_ID_KEY)); + } else { + return SouthboundMapper.createInstanceIdentifier(nodeId) + .augmentation(OvsdbNodeAugmentation.class) + .child(QosEntries.class, new QosEntriesKey( + new Uri(SouthboundConstants.QOS_URI_PREFIX + "://" + qosUuid.toString()))); + } + } } + LOG.debug("QoS UUID {} assigned to port not found in operational node {} or QoS updates", qosUuid, ovsdbNode); + return SouthboundMapper.createInstanceIdentifier(nodeId) + .augmentation(OvsdbNodeAugmentation.class) + .child(QosEntries.class, new QosEntriesKey( + new Uri(SouthboundConstants.QOS_URI_PREFIX + "://" + qosUuid.toString()))); } private void updateOfPort(final Interface interf, @@ -465,7 +545,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { List interfaceLldpList = new ArrayList<>(); for (String interfaceLldpKeyString : interfaceLldpMap.keySet()) { String interfaceLldpValueString = interfaceLldpMap.get(interfaceLldpKeyString); - if (interfaceLldpKeyString != null && interfaceLldpValueString!=null) { + if (interfaceLldpKeyString != null && interfaceLldpValueString != null) { interfaceLldpList.add(new InterfaceLldpBuilder() .setKey(new InterfaceLldpKey(interfaceLldpKeyString)) .setLldpKey(interfaceLldpKeyString) @@ -476,8 +556,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { ovsdbTerminationPointBuilder.setInterfaceLldp(interfaceLldpList); } } catch (SchemaVersionMismatchException e) { - // We don't care about the exception stack trace here - LOG.debug("lldp column for Interface Table unsupported for this version of ovsdb schema. {}", e.getMessage()); + schemaMismatchLog("lldp", "Interface", e); } } @@ -509,7 +588,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { List interfaceBfdStatusList = new ArrayList<>(); for (String interfaceBfdStatusKeyString : interfaceBfdStatusMap.keySet()) { String interfaceBfdStatusValueString = interfaceBfdStatusMap.get(interfaceBfdStatusKeyString); - if (interfaceBfdStatusKeyString != null && interfaceBfdStatusValueString!=null) { + if (interfaceBfdStatusKeyString != null && interfaceBfdStatusValueString != null) { interfaceBfdStatusList.add(new InterfaceBfdStatusBuilder() .setKey(new InterfaceBfdStatusKey(interfaceBfdStatusKeyString)) .setBfdStatusKey(interfaceBfdStatusKeyString) @@ -520,8 +599,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { ovsdbTerminationPointBuilder.setInterfaceBfdStatus(interfaceBfdStatusList); } } catch (SchemaVersionMismatchException e) { - // We don't care about the exception stack trace here - LOG.debug("bfd-status column for Interface Table unsupported for this version of ovsdb schema. {}", e.getMessage()); + schemaMismatchLog("bfd", "Interface", e); } } @@ -534,7 +612,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { List interfaceBfdList = new ArrayList<>(); for (String interfaceBfdKeyString : interfaceBfdMap.keySet()) { String interfaceBfdValueString = interfaceBfdMap.get(interfaceBfdKeyString); - if (interfaceBfdKeyString != null && interfaceBfdValueString!=null) { + if (interfaceBfdKeyString != null && interfaceBfdValueString != null) { interfaceBfdList.add(new InterfaceBfdBuilder() .setKey(new InterfaceBfdKey(interfaceBfdKeyString)) .setBfdKey(interfaceBfdKeyString) @@ -545,8 +623,40 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { ovsdbTerminationPointBuilder.setInterfaceBfd(interfaceBfdList); } } catch (SchemaVersionMismatchException e) { - // We don't care about the exception stack trace here - LOG.debug("bfd column for Interface Table unsupported for this version of ovsdb schema. {}", e.getMessage()); + schemaMismatchLog("bfd", "Interface", e); + + } + } + + private void updateInterfacePolicing(final Interface interf, + final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) { + + Long ingressPolicingRate = null; + if (interf.getIngressPolicingRateColumn() != null) { + ingressPolicingRate = interf.getIngressPolicingRateColumn().getData(); + } + if (ingressPolicingRate != null) { + if (ingressPolicingRate >= 0) { + ovsdbTerminationPointBuilder + .setIngressPolicingRate(ingressPolicingRate); + } else { + LOG.debug("Received negative value for ingressPolicingRate from ovsdb for {} {}", + interf.getName(),ingressPolicingRate); + } + } + + Long ingressPolicingBurst = null; + if (interf.getIngressPolicingBurstColumn() != null) { + ingressPolicingBurst = interf.getIngressPolicingBurstColumn().getData(); + } + if (ingressPolicingBurst != null) { + if (ingressPolicingBurst >= 0) { + ovsdbTerminationPointBuilder + .setIngressPolicingBurst(ingressPolicingBurst); + } else { + LOG.debug("Received negative value for ingressPolicingBurst from ovsdb for {} {}", + interf.getName(),ingressPolicingBurst); + } } } @@ -567,6 +677,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { } } + @SuppressWarnings("unchecked") private InstanceIdentifier getInstanceIdentifier(InstanceIdentifier bridgeIid,Port port) { if (port.getExternalIdsColumn() != null && port.getExternalIdsColumn().getData() != null