Initial import of CFM and SOAM api
Change-Id: Icf5cc2d5fb34b75460e80e8cced0d70265bcd33b
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepEntry.java b/incubator/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepEntry.java
new file mode 100644
index 0000000..1fa255e
--- /dev/null
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/l2monitoring/cfm/DefaultMepEntry.java
@@ -0,0 +1,392 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.incubator.net.l2monitoring.cfm;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.onlab.packet.MacAddress;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
+import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
+import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry;
+import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementEntry;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.Lists;
+
+/**
+ * The default implementation of {@link org.onosproject.incubator.net.l2monitoring.cfm.MepEntry}.
+ */
+public final class DefaultMepEntry extends DefaultMep implements MepEntry {
+
+ private final MacAddress macAddress;
+ private final FngState fngState;
+ private final FaultDefectType highestPriorityDefect;
+ private final boolean activeRdiCcmDefect;
+ private final boolean activeMacStatusDefect;
+ private final boolean activeRemoteCcmDefect;
+ private final boolean activeErrorCcmDefect;
+ private final boolean activeXconCcmDefect;
+ private final byte[] lastErrorCcm;
+ private final byte[] lastXconCcm;
+ private final int ccmSequenceErrorCount;
+ private final int totalCcmsTransmitted;
+ private final MepLbEntry loopbackAttributes;
+ private final MepLtEntry linktraceAttributes;
+ private final Collection<RemoteMepEntry> activeRemoteMepList;
+ private final Collection<DelayMeasurementEntry> delayMeasurementList;
+ private final Collection<LossMeasurementEntry> lossMeasurementList;
+
+ private DefaultMepEntry(DefaultMepEntryBuilder mepEntryBuilder) throws CfmConfigException {
+ super((DefaultMepBuilder) DefaultMep.builder(
+ mepEntryBuilder.mepId,
+ mepEntryBuilder.deviceId,
+ mepEntryBuilder.port,
+ mepEntryBuilder.direction,
+ mepEntryBuilder.mdId,
+ mepEntryBuilder.maId)
+ .administrativeState(mepEntryBuilder.administrativeState)
+ .cciEnabled(mepEntryBuilder.cciEnabled)
+ .ccmLtmPriority(mepEntryBuilder.ccmLtmPriority));
+
+ this.macAddress = mepEntryBuilder.macAddress;
+ this.fngState = mepEntryBuilder.fngState;
+ this.highestPriorityDefect = mepEntryBuilder.highestPriorityDefect;
+ this.activeRdiCcmDefect = mepEntryBuilder.activeRdiCcmDefect;
+ this.activeMacStatusDefect = mepEntryBuilder.activeMacStatusDefect;
+ this.activeRemoteCcmDefect = mepEntryBuilder.activeRemoteCcmDefect;
+ this.activeErrorCcmDefect = mepEntryBuilder.activeErrorCcmDefect;
+ this.activeXconCcmDefect = mepEntryBuilder.activeXconCcmDefect;
+ this.lastErrorCcm = mepEntryBuilder.lastErrorCcm;
+ this.lastXconCcm = mepEntryBuilder.lastXconCcm;
+ this.ccmSequenceErrorCount = mepEntryBuilder.ccmSequenceErrorCount;
+ this.totalCcmsTransmitted = mepEntryBuilder.totalCcmsTransmitted;
+ this.loopbackAttributes = mepEntryBuilder.loopbackAttributes;
+ this.linktraceAttributes = mepEntryBuilder.linktraceAttributes;
+ this.activeRemoteMepList = mepEntryBuilder.activeRemoteMepList;
+ this.delayMeasurementList = mepEntryBuilder.delayMeasurementList;
+ this.lossMeasurementList = mepEntryBuilder.lossMeasurementList;
+ }
+
+ @Override
+ public MacAddress macAddress() {
+ return macAddress;
+ }
+
+ @Override
+ public FngState fngState() {
+ return fngState;
+ }
+
+ @Override
+ public FaultDefectType getHighestPriorityDefect() {
+ return highestPriorityDefect;
+ }
+
+ @Override
+ public boolean activeRdiCcmDefect() {
+ return activeRdiCcmDefect;
+ }
+
+ @Override
+ public boolean activeMacStatusDefect() {
+ return activeMacStatusDefect;
+ }
+
+ @Override
+ public boolean activeRemoteCcmDefect() {
+ return activeRemoteCcmDefect;
+ }
+
+ @Override
+ public boolean activeErrorCcmDefect() {
+ return activeErrorCcmDefect;
+ }
+
+ @Override
+ public boolean activeXconCcmDefect() {
+ return activeXconCcmDefect;
+ }
+
+ @Override
+ public byte[] lastErrorCcm() {
+ return lastErrorCcm;
+ }
+
+ @Override
+ public byte[] lastXconCcm() {
+ return lastXconCcm;
+ }
+
+ @Override
+ public int ccmSequenceErrorCount() {
+ return ccmSequenceErrorCount;
+ }
+
+ @Override
+ public int totalCcmsTransmitted() {
+ return totalCcmsTransmitted;
+ }
+
+ @Override
+ public MepLbEntry loopbackAttributes() {
+ return loopbackAttributes;
+ }
+
+ @Override
+ public MepLtEntry linktraceAttributes() {
+ return linktraceAttributes;
+ }
+
+ @Override
+ public List<RemoteMepEntry> activeRemoteMepList() {
+ if (activeRemoteMepList == null) {
+ return null;
+ } else {
+ return Lists.newArrayList(activeRemoteMepList);
+ }
+ }
+
+ @Override
+ public Collection<DelayMeasurementEntry> delayMeasurementList() {
+ return delayMeasurementList;
+ }
+
+ @Override
+ public Collection<LossMeasurementEntry> lossMeasurementList() {
+ return lossMeasurementList;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + mepId.value();
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ DefaultMepEntry other = (DefaultMepEntry) obj;
+ if (mepId != other.mepId) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(getClass()).add("id", mepId).toString();
+ }
+
+ public static MepEntryBuilder builder(
+ MepId mepId,
+ DeviceId deviceId,
+ PortNumber port,
+ MepDirection direction,
+ MdId mdName,
+ MaIdShort maName)
+ throws CfmConfigException {
+ return new DefaultMepEntryBuilder(mepId, deviceId, port, direction, mdName, maName);
+ }
+
+ public static MepEntryBuilder builder(Mep mep) throws CfmConfigException {
+ return new DefaultMepEntryBuilder(mep);
+ }
+
+ private static final class DefaultMepEntryBuilder
+ extends DefaultMep.DefaultMepBuilder implements MepEntry.MepEntryBuilder {
+ private MacAddress macAddress;
+ private FngState fngState;
+ private FaultDefectType highestPriorityDefect;
+ private boolean activeRdiCcmDefect;
+ private boolean activeMacStatusDefect;
+ private boolean activeRemoteCcmDefect;
+ private boolean activeErrorCcmDefect;
+ private boolean activeXconCcmDefect;
+ private byte[] lastErrorCcm;
+ private byte[] lastXconCcm;
+ private int ccmSequenceErrorCount;
+ private int totalCcmsTransmitted;
+ private MepLbEntry loopbackAttributes;
+ private MepLtEntry linktraceAttributes;
+ private Collection<RemoteMepEntry> activeRemoteMepList;
+ private Collection<DelayMeasurementEntry> delayMeasurementList;
+ private Collection<LossMeasurementEntry> lossMeasurementList;
+
+ private DefaultMepEntryBuilder(MepId mepId, DeviceId deviceId, PortNumber port, MepDirection direction,
+ MdId mdName, MaIdShort maName)
+ throws CfmConfigException {
+ super(mepId, deviceId, port, direction, mdName, maName);
+
+ activeRemoteMepList = new ArrayList<>();
+ delayMeasurementList = new ArrayList<>();
+ lossMeasurementList = new ArrayList<>();
+ }
+
+ private DefaultMepEntryBuilder(MepEntry mepEntry) throws CfmConfigException {
+ super(mepEntry.mepId(), mepEntry.deviceId(),
+ mepEntry.port(), mepEntry.direction(), mepEntry.mdId(), mepEntry.maId());
+ this.macAddress = mepEntry.macAddress();
+ this.fngState = mepEntry.fngState();
+ this.highestPriorityDefect = mepEntry.getHighestPriorityDefect();
+ this.activeRdiCcmDefect = mepEntry.activeRdiCcmDefect();
+ this.activeMacStatusDefect = mepEntry.activeMacStatusDefect();
+ this.activeRemoteCcmDefect = mepEntry.activeRemoteCcmDefect();
+ this.activeErrorCcmDefect = mepEntry.activeErrorCcmDefect();
+ this.activeXconCcmDefect = mepEntry.activeXconCcmDefect();
+ this.lastErrorCcm = mepEntry.lastErrorCcm();
+ this.lastXconCcm = mepEntry.lastXconCcm();
+ this.ccmSequenceErrorCount = mepEntry.ccmSequenceErrorCount();
+ this.totalCcmsTransmitted = mepEntry.totalCcmsTransmitted();
+ this.loopbackAttributes = mepEntry.loopbackAttributes();
+ this.linktraceAttributes = mepEntry.linktraceAttributes();
+ this.activeRemoteMepList = Lists.newArrayList(mepEntry.activeRemoteMepList());
+ this.delayMeasurementList = Lists.newArrayList(mepEntry.delayMeasurementList());
+ this.lossMeasurementList = Lists.newArrayList(mepEntry.lossMeasurementList());
+ }
+
+ private DefaultMepEntryBuilder(Mep mep) throws CfmConfigException {
+ super(mep.mepId(), mep.deviceId(),
+ mep.port(), mep.direction(),
+ mep.mdId(), mep.maId());
+ }
+
+ @Override
+ public MepEntryBuilder macAddress(MacAddress macAddress) {
+ this.macAddress = macAddress;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder fngState(FngState fngState) {
+ this.fngState = fngState;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder highestPriorityDefect(FaultDefectType highestPriorityDefect) {
+ this.highestPriorityDefect = highestPriorityDefect;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder activeRdiCcmDefect(boolean activeRdiCcmDefect) {
+ this.activeRdiCcmDefect = activeRdiCcmDefect;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder activeMacStatusDefect(boolean activeMacStatusDefect) {
+ this.activeMacStatusDefect = activeMacStatusDefect;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder activeRemoteCcmDefect(boolean activeRemoteCcmDefect) {
+ this.activeRemoteCcmDefect = activeRemoteCcmDefect;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder activeErrorCcmDefect(boolean activeErrorCcmDefect) {
+ this.activeErrorCcmDefect = activeErrorCcmDefect;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder activeXconCcmDefect(boolean activeXconCcmDefect) {
+ this.activeXconCcmDefect = activeXconCcmDefect;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder lastErrorCcm(byte[] lastErrorCcm) {
+ this.lastErrorCcm = lastErrorCcm;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder lastXconCcm(byte[] lastXconCcm) {
+ this.lastXconCcm = lastXconCcm;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder ccmSequenceErrorCount(int ccmSequenceErrorCount) {
+ this.ccmSequenceErrorCount = ccmSequenceErrorCount;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder totalCcmsTransmitted(int totalCcmsTransmitted) {
+ this.totalCcmsTransmitted = totalCcmsTransmitted;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder loopbackAttributes(MepLbEntry loopbackAttributes) {
+ this.loopbackAttributes = loopbackAttributes;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder linktraceAttributes(MepLtEntry linktraceAttributes) {
+ this.linktraceAttributes = linktraceAttributes;
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder addToActiveRemoteMepList(
+ RemoteMepEntry activeRemoteMep) {
+ this.activeRemoteMepList.add(activeRemoteMep);
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder addToDelayMeasurementList(
+ DelayMeasurementEntry delayMeasurement) {
+ this.delayMeasurementList.add(delayMeasurement);
+ return this;
+ }
+
+ @Override
+ public MepEntryBuilder addToLossMeasurementList(
+ LossMeasurementEntry lossMeasurement) {
+ this.lossMeasurementList.add(lossMeasurement);
+ return this;
+ }
+
+ @Override
+ public MepEntry buildEntry() throws CfmConfigException {
+ return new DefaultMepEntry(this);
+ }
+ }
+}