--- /dev/null
+/*
+ * Copyright (c) 2016 Applied Broadband, Inc. All Rights Reserved
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.pcmm.gates.impl;
+
+import org.pcmm.base.impl.PCMMBaseObject;
+import org.pcmm.gates.ITrafficProfile;
+import org.pcmm.utils.PCMMUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.nio.ByteBuffer;
+
+/**
+ * The DOCSIS Flow Spec object defines the Flow Spec Traffic Profile of a Gate.
+ *
+ */
+public class DOCSISFlowSpecTrafficProfile extends PCMMBaseObject implements ITrafficProfile {
+
+ private final Logger logger = LoggerFactory.getLogger(DOCSISFlowSpecTrafficProfile.class);
+ public static final byte STYPE = 1;
+ public static final byte SERVICE_NUMBER = 2;
+
+ /**
+ * The envelope
+ */
+ private final byte envelope;
+ private final int tokenBucketRate;
+ private final int tokenBucketSize;
+ private final int peakDataRate;
+ private final int minimumPolicedUnit;
+ private final int maximumPacketSize;
+ private final int rate;
+ private final int slackTerm;
+
+ /**
+ * Constructor using the default envelope values
+ * @param tokenBucketRate - Token Bucket Rate value [r]
+ * @param tokenBucketSize - Token Bucket Size value [b]
+ * @param peakDataRate - Peak Data Rate value [p]
+ * @param minimumPolicedUnit - Minimum Policed Unit value [m]
+ * @param maximumPacketSize - Maximum Packet Size value [M]
+ * @param rate - Rate value [R]
+ * @param slackTerm - Slack Term value [S]
+ */
+ public DOCSISFlowSpecTrafficProfile(final int tokenBucketRate,
+ final int tokenBucketSize,
+ final int peakDataRate,
+ final int minimumPolicedUnit,
+ final int maximumPacketSize,
+ final int rate,
+ final int slackTerm ) {
+ this(DEFAULT_ENVELOP, tokenBucketRate, tokenBucketSize, peakDataRate,
+ minimumPolicedUnit, maximumPacketSize, rate, slackTerm);
+ }
+
+ /**
+ * Constructor to set all values
+ * @param envelope - the envelope value
+ * @param tokenBucketRate - Token Bucket Rate value [r]
+ * @param tokenBucketSize - Token Bucket Size value [b]
+ * @param peakDataRate - Peak Data Rate value [p]
+ * @param minimumPolicedUnit - Minimum Policed Unit value [m]
+ * @param maximumPacketSize - Maximum Packet Size value [M]
+ * @param rate - Rate value [R]
+ * @param slackTerm - Slack Term value [S]
+ */
+ protected DOCSISFlowSpecTrafficProfile(final byte envelope,
+ final int tokenBucketRate,
+ final int tokenBucketSize,
+ final int peakDataRate,
+ final int minimumPolicedUnit,
+ final int maximumPacketSize,
+ final int rate,
+ final int slackTerm) {
+ super(SNum.TRAFFIC_PROFILE, STYPE);
+ this.tokenBucketRate = tokenBucketRate;
+ this.tokenBucketSize = tokenBucketSize;
+ this.peakDataRate = peakDataRate;
+ this.minimumPolicedUnit = minimumPolicedUnit;
+ this.maximumPacketSize = maximumPacketSize;
+ this.rate = rate;
+ this.slackTerm = slackTerm;
+ this.envelope = envelope;
+ }
+
+ @Override
+ public byte getEnvelop() {
+ return envelope;
+ }
+
+ /**
+ * Returns the token bucket rate value
+ * @return - the token bucket rate value
+ */
+ public int getTokenBucketRate() {
+ return tokenBucketRate;
+ }
+
+ /**
+ * Returns the token bucket size value
+ * @return - the token bucket size value
+ */
+ public int getTokenBucketSize() {
+ return tokenBucketSize;
+ }
+
+ /**
+ * Returns the peak data rate value
+ * @return - the peak data rate value
+ */
+ public int getPeakDataRate() {
+ return peakDataRate;
+ }
+
+ /**
+ * Returns the minimum policed unit value
+ * @return - the minimum policed unit value
+ */
+ public int getMinimumPolicedUnit() {
+ return minimumPolicedUnit;
+ }
+
+ /**
+ * Returns the maximum packet size value
+ * @return - the maximum packet size value
+ */
+ public int getMaximumPacketSize() {
+ return maximumPacketSize;
+ }
+
+ /**
+ * Returns the rate value
+ * @return - the rate value
+ */
+ public int getRate() {
+ return rate;
+ }
+
+ /**
+ * Returns the slack term value
+ * @return - the slack term value
+ */
+ public int getSlackTerm() {
+ return slackTerm;
+ }
+
+ @Override
+ protected byte[] getBytes() {
+ final byte[] data = new byte[4+(4*7*3)];
+
+ float fTokenBucketRate = tokenBucketRate;
+ float fTokenBucketSize = tokenBucketSize;
+ float fPeakDataRate = peakDataRate;
+ float fRate = rate;
+
+ //
+ // Ok I know this looks crazy but PCMM Flow Spec encodes some values as floats
+ // even though they do not contain fractional values, so we 'integerize' them
+ // in the constructor and class internals
+ //
+ Arrays.fill(data, (byte) 0);
+ data[0] = envelope;
+ data[1] = SERVICE_NUMBER;
+ data[2] = 0; // reserved
+ data[3] = 0; // reserved
+
+ // Authorized Envelope
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketRate).array(), 0, data, 4, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketSize).array(), 0, data, 8, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fPeakDataRate).array(), 0, data, 12, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(minimumPolicedUnit).array(), 0, data, 16, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(maximumPacketSize).array(), 0, data, 20, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fRate).array(), 0, data, 24, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(slackTerm).array(), 0, data, 28, 4);
+
+ // Reserved Envelope
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketRate).array(), 0, data, 32, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketSize).array(), 0, data, 36, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fPeakDataRate).array(), 0, data, 40, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(minimumPolicedUnit).array(), 0, data, 44, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(maximumPacketSize).array(), 0, data, 48, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fRate).array(), 0, data, 52, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(slackTerm).array(), 0, data, 56, 4);
+
+ // Committed Envelope
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketRate).array(), 0, data, 60, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketSize).array(), 0, data, 64, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fPeakDataRate).array(), 0, data, 68, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(minimumPolicedUnit).array(), 0, data, 72, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(maximumPacketSize).array(), 0, data, 76, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putFloat(fRate).array(), 0, data, 80, 4);
+ System.arraycopy(ByteBuffer.allocate(4).putInt(slackTerm).array(), 0, data, 84, 4);
+ return data;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof DOCSISFlowSpecTrafficProfile)) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+ final DOCSISFlowSpecTrafficProfile that = (DOCSISFlowSpecTrafficProfile) o;
+ return (envelope == that.envelope) &&
+ (tokenBucketRate == that.tokenBucketRate) &&
+ (tokenBucketSize == that.tokenBucketSize) &&
+ (peakDataRate == that.peakDataRate) &&
+ (minimumPolicedUnit == that.minimumPolicedUnit) &&
+ (maximumPacketSize == that.maximumPacketSize) &&
+ (rate == that.rate) &&
+ (slackTerm == that.slackTerm);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + tokenBucketRate;
+ result = 31 * result + tokenBucketSize;
+ result = 31 * result + peakDataRate;
+ result = 31 * result + minimumPolicedUnit;
+ result = 31 * result + maximumPacketSize;
+ result = 31 * result + rate;
+ result = 31 * result + slackTerm;
+ result = 31 * result + (int) envelope;
+ return result;
+ }
+
+ private static int byteToInt(final byte[] data, int start) {
+ return (int)(data[start] << 24 |
+ data[start+1] << 16 |
+ data[start+2] << 8 |
+ data[start+3]);
+ }
+
+ private static float byteToFloat(final byte[] data, int start) {
+ return (float)(data[start] << 24 |
+ data[start+1] << 16 |
+ data[start+2] << 8 |
+ data[start+3]);
+ }
+
+ /**
+ * Returns a DOCSISFlowSpecTrafficProfile object from a byte array
+ * @param data - the data to parse
+ * @return - the object
+ * TODO - make me more robust as RuntimeExceptions can be thrown here.
+ */
+ public static DOCSISFlowSpecTrafficProfile parse(final byte[] data) {
+ byte env = 0;
+ int mpu=0,mps=0,st=0;
+ float tbr=0,tbs=0,pdr=0,r=0;
+
+ env = data[0];
+
+ tbr = byteToFloat(data, 4);
+ tbs = byteToFloat(data, 8);
+ pdr = byteToFloat(data, 12);
+ mpu = byteToInt(data, 16);
+ mps = byteToInt(data, 20);
+ r = byteToFloat(data, 24);
+ st = byteToInt(data, 28);
+ //
+ // Ok I know this looks crazy but PCMM Flow Spec encodes some values as floats
+ // even though they do not contain fractional values, so we 'integerize' them
+ // in the constructor and class internals
+ //
+ int itbr = Math.round(tbr), itbs = Math.round(tbs),
+ ipdr = Math.round(pdr), ir = Math.round(r);
+
+ return new DOCSISFlowSpecTrafficProfile(env, itbr, itbs, ipdr,
+ mpu, mps, ir, st);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String toString() {
+ final int sbSize = 1000;
+ final String variableSeparator = "\n";
+ final StringBuffer sb = new StringBuffer(sbSize);
+
+ sb.append("Envelope: ").append(envelope);
+ sb.append(variableSeparator);
+ sb.append("TokenBucketRate: ").append(tokenBucketRate);
+ sb.append(variableSeparator);
+ sb.append("TokenBucketSize: ").append(tokenBucketSize);
+ sb.append(variableSeparator);
+ sb.append("PeakDataRate: ").append(peakDataRate);
+ sb.append(variableSeparator);
+ sb.append("MinimumPolicedUnit: ").append(minimumPolicedUnit);
+ sb.append(variableSeparator);
+ sb.append("MaximumPacketSize: ").append(maximumPacketSize);
+ sb.append(variableSeparator);
+ sb.append("Rate: ").append(rate);
+ sb.append(variableSeparator);
+ sb.append("SlackTerm: ").append(slackTerm);
+
+ return sb.toString();
+ }
+}
import com.google.common.primitives.Bytes;
import java.util.Collections;
import org.pcmm.base.impl.PCMMBaseObject.SNum;
-import org.pcmm.gates.*;
+import org.pcmm.gates.IAMID;
+import org.pcmm.gates.IClassifier;
+import org.pcmm.gates.ISubscriberID;
+import org.pcmm.gates.ITransactionID;
+import org.pcmm.gates.IGateSpec;
+import org.pcmm.gates.IGateTimeInfo;
+import org.pcmm.gates.ITrafficProfile;
+import org.pcmm.gates.IPCMMError;
+import org.pcmm.gates.IPCMMGate;
+import org.pcmm.gates.IGateID;
+import org.pcmm.gates.IExtendedClassifier;
+import org.pcmm.gates.IIPv6Classifier;
+import org.pcmm.gates.IGateState;
+import org.pcmm.gates.IGateUsageInfo;
+import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
+import org.pcmm.gates.impl.DOCSISFlowSpecTrafficProfile;
+import org.pcmm.gates.impl.BestEffortService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
final int dataIndx = offset + 4;
byte[] dataBuffer = Arrays.copyOfRange(data, dataIndx, dataIndx + len - 4);
switch (sNum) {
- case GATE_ID:
- gateID = GateID.parse(dataBuffer);
+ case GATE_ID:
+ gateID = GateID.parse(dataBuffer);
+ break;
+ case AMID:
+ amid = AMID.parse(dataBuffer);
+ break;
+ case SUBSCRIBER_ID:
+ subscriberID = SubscriberID.parse(dataBuffer);
+ break;
+ case TRANSACTION_ID:
+ transactionID = TransactionID.parse(dataBuffer);
+ break;
+ case GATE_SPEC:
+ gateSpec = GateSpec.parse(dataBuffer);
+ break;
+ case TRAFFIC_PROFILE:
+ switch (sType) {
+ case DOCSISServiceClassNameTrafficProfile.STYPE:
+ trafficProfile = DOCSISServiceClassNameTrafficProfile.parse(dataBuffer);
break;
- case AMID:
- amid = AMID.parse(dataBuffer);
+ case DOCSISFlowSpecTrafficProfile.STYPE:
+ trafficProfile = DOCSISFlowSpecTrafficProfile.parse(dataBuffer);
break;
- case SUBSCRIBER_ID:
- subscriberID = SubscriberID.parse(dataBuffer);
+ case BestEffortService.STYPE:
+ trafficProfile = BestEffortService.parse(dataBuffer);
break;
- case TRANSACTION_ID:
- transactionID = TransactionID.parse(dataBuffer);
+ }
+ break;
+ case CLASSIFIERS:
+ switch (sType) {
+ case IClassifier.STYPE:
+ classifiers.add(Classifier.parse(dataBuffer));
break;
- case GATE_SPEC:
- gateSpec = GateSpec.parse(dataBuffer);
+ case IExtendedClassifier.STYPE:
+ classifiers.add(ExtendedClassifier.parse(dataBuffer));
break;
- case TRAFFIC_PROFILE:
- switch (sType) {
- case DOCSISServiceClassNameTrafficProfile.STYPE:
- trafficProfile = DOCSISServiceClassNameTrafficProfile.parse(dataBuffer);
- break;
- case BestEffortService.STYPE:
- trafficProfile = BestEffortService.parse(dataBuffer);
- break;
- }
- break;
- case CLASSIFIERS:
- switch (sType) {
- case IClassifier.STYPE:
- classifiers.add(Classifier.parse(dataBuffer));
- break;
- case IExtendedClassifier.STYPE:
- classifiers.add(ExtendedClassifier.parse(dataBuffer));
- break;
- case IIPv6Classifier.STYPE:
- classifiers.add(IPv6Classifier.parse(dataBuffer));
- break;
- }
- break;
- case PCMM_ERROR:
- error = PCMMError.parse(dataBuffer);
+ case IIPv6Classifier.STYPE:
+ classifiers.add(IPv6Classifier.parse(dataBuffer));
break;
+ }
+ break;
+ case PCMM_ERROR:
+ error = PCMMError.parse(dataBuffer);
+ break;
//adding GATE_STATE
- case GATE_STATE:
- gateState = GateState.parse(dataBuffer);
- break;
+ case GATE_STATE:
+ gateState = GateState.parse(dataBuffer);
+ break;
//adding GATE_TIME_INFO
- case GATE_TIME_INFO:
- gateTimeInfo = GateTimeInfo.parse(dataBuffer);
- logger.info("Gate Time Info: "+gateTimeInfo);
- break;
+ case GATE_TIME_INFO:
+ gateTimeInfo = GateTimeInfo.parse(dataBuffer);
+ logger.info("Gate Time Info: "+gateTimeInfo);
+ break;
//adding GATE_USAGE_INFO
- case GATE_USAGE_INFO:
- gateUsageInfo = GateUsageInfo.parse(dataBuffer);
- logger.info("Gate Usage Info: "+gateUsageInfo);
- break;
+ case GATE_USAGE_INFO:
+ gateUsageInfo = GateUsageInfo.parse(dataBuffer);
+ logger.info("Gate Usage Info: "+gateUsageInfo);
+ break;
default:
logger.warn("Unhandled Object skept : S-NUM=" + sNum
- + " S-TYPE=" + sType + " LEN=" + len);
+ + " S-TYPE=" + sType + " LEN=" + len);
}
offset += len;
}
import org.pcmm.gates.ITransactionID;
import org.pcmm.gates.impl.AMID;
import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
+import org.pcmm.gates.impl.DOCSISFlowSpecTrafficProfile;
import org.pcmm.gates.impl.GateID;
import org.pcmm.gates.impl.GateSpec;
import org.pcmm.gates.impl.GateState;
case GATE_INFO:
processGateInfo(gateReq, socket);
break;
+ case GATE_DELETE:
+ processGateDelete(gateReq, socket);
+ break;
default:
logger.error("Emulator does not support gate command: {}",
gateReq.getTransactionID().getGateCommandType());
}
}
else {
- // Traffic profile
-
- if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
+ // Traffic profile type check
+ if (!(gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) &&
+ !(gateReq.getTrafficProfile() instanceof DOCSISFlowSpecTrafficProfile)) {
+ logger.error("Currently only DOCSIS Service Class Name and Flow Spec Traffic Profiles are supported: attempted ",
+ gateReq.getTrafficProfile().getClass().getName());
+ return new PCMMError(ErrorCode.OTHER_UNSPECIFIED);
+ }
+ // ServiceClassName match check
+ else if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
final DOCSISServiceClassNameTrafficProfile scnTrafficProfile =
(DOCSISServiceClassNameTrafficProfile) gateReq.getTrafficProfile();
if (!directionSCNs.contains(scnTrafficProfile.getScnName())) {
return new PCMMError(ErrorCode.UNDEF_SCN_NAME);
}
- } else {
- // TODO remote this after other profiles are supported
- logger.error("Currently only DOCSIS Service Class Name Traffic Profiles are supported: attempted {}",
- gateReq.getTrafficProfile().getClass().getName());
- return new PCMMError(ErrorCode.OTHER_UNSPECIFIED);
}
// number of classifiers
}
}
-
-
// SubscriberID
String subId = gateReq.getSubscriberID().getSourceIPAddress().getHostAddress();
if(!config.getModemStatus().containsKey(subId) || !config.getModemStatus().get(subId)) {
}
}
-
-
-
return null;
}
return error;
}
-
return null;
}
final Direction gateDir = gateReq.getGateSpec().getDirection();
final String serviceClassName;
- if ((gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile)) {
- serviceClassName = ((DOCSISServiceClassNameTrafficProfile) gateReq.getTrafficProfile()).getScnName();
+ if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
+ serviceClassName = ((DOCSISServiceClassNameTrafficProfile)gateReq.getTrafficProfile()).getScnName();
+ logger.info("Processing ServiceClassName[" + serviceClassName + "] gate set with direction [" + gateDir + ']');
+ } else if (gateReq.getTrafficProfile() instanceof DOCSISFlowSpecTrafficProfile) {
+ serviceClassName = null;
+ logger.info("Processing FlowSpec gate set with direction [" + gateDir + ']');
} else {
serviceClassName = null;
+ logger.error("Unknown Traffic Profile type: " + gateReq.getTrafficProfile().getClass().getName());
}
final IPCMMError error = getGateError(gateReq);
sendReport(reportType, copsClientSI, socket);
}
+ private void processGateDelete(final PCMMGateReq gateReq, final Socket socket) throws COPSException {
+ logger.info("GateDelete");
+
+ final TransactionID transactionID;
+ final ReportType reportType;
+ transactionID = new TransactionID(gateReq.getTransactionID().getTransactionIdentifier(),
+ ITransactionID.GateCommandType.GATE_DELETE_ACK);
+ reportType = ReportType.SUCCESS;
+
+ final List<Byte> data = new ArrayList<>();
+ addBytesToList(transactionID.getAsBinaryArray(), data);
+ addBytesToList(gateReq.getAMID().getAsBinaryArray(), data);
+ addBytesToList(gateReq.getSubscriberID().getAsBinaryArray(), data);
+ addBytesToList(gateReq.getGateID().getAsBinaryArray(), data);
+
+ GateMetaData exisitingGate = gateStateMap.get(gateReq.getGateID());
+ gateStateMap.remove(gateReq.getGateID());
+
+ GateState gateState = new GateState(IGateState.GateStateType.COMMITTED,
+ IGateState.GateStateReasonType.OTHER);
+ addBytesToList(gateState.getAsBinaryArray(), data);
+
+ logger.info("Deleting " + reportType + " for gate delete request on gate " + exisitingGate.getGateReq().getGateID() );
+
+ final byte[] csiArr = Bytes.toArray(data);
+ COPSClientSI copsClientSI = new COPSClientSI(CNum.CSI, CType.DEF, new COPSData(csiArr, 0, csiArr.length));
+
+ sendReport(reportType, copsClientSI, socket);
+ }
+
private void sendReport(ReportType reportType, COPSClientSI copsClientSI, final Socket socket)
throws COPSPepException {
logger.info("Returning {} for gate request", reportType);
description "This module contains the PCMM Converged Cable Access Platform (CCAP) definitions";
organization "OpenDaylight Project";
+ revision 2016-12-19 {
+ description "Added support for flow-spec traffic profile";
+ }
revision 2016-11-28 {
description "Added support for activation-state, session-class-id and inactivity-timer";
}
grouping pcmm-qos-traffic-profile {
container traffic-profile {
+ choice traffic-profile-choice {
+ case service-class-name-choice {
+ uses pcmm-serviceclass-name-profile;
+ }
+ case flow-spec-choice {
+ uses pcmm-flow-spec-profile;
+ }
+ }
+ }
+ }
+
+ grouping pcmm-serviceclass-name-profile {
+ container service-class-name-profile {
leaf service-class-name {
type service-class-name;
description "The Service Class Name (SCN). This SCN must be pre-provisioned on the target CCAP";
}
}
- grouping tp-port-match-ranges {
+ grouping pcmm-flow-spec-profile {
+ container flow-spec-profile {
+ leaf token-bucket-rate {
+ type int32;
+ description "Token Bucket Rate value [r]";
+ mandatory true;
+ }
+ leaf token-bucket-size {
+ type int32;
+ description "Token Bucket Size value [b]";
+ mandatory true;
+ }
+ leaf peak-data-rate {
+ type int32;
+ description "Peak Data Rate value [p]";
+ mandatory true;
+ }
+ leaf minimum-policed-unit {
+ type int32;
+ description "Minimum Policed Unit value [m]";
+ mandatory true;
+ }
+ leaf maximum-packet-size {
+ type int32;
+ description "Maximum Packet Size value [M]";
+ mandatory true;
+ }
+ leaf rate {
+ type int32;
+ description "Rate value [R]";
+ mandatory true;
+ }
+ leaf slack-term {
+ type int32;
+ description "Slack Term value [S]";
+ mandatory true;
+ }
+ }
+ }
+
+ grouping tp-port-match-ranges {
leaf srcPort-start {
type inet:port-number;
description "TCP/UDP source port range start.";
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.flow.spec.profile.FlowSpecProfile;
import org.pcmm.gates.IClassifier;
import org.pcmm.gates.IClassifier.Protocol;
import org.pcmm.gates.IExtendedClassifier;
import org.pcmm.gates.ITrafficProfile;
import org.pcmm.gates.impl.AMID;
import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
+import org.pcmm.gates.impl.DOCSISFlowSpecTrafficProfile;
import org.pcmm.gates.impl.GateID;
import org.pcmm.gates.impl.GateState;
import org.pcmm.gates.impl.GateTimeInfo;
import org.pcmm.gates.impl.TransactionID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+
/**
* Build PCMM gate requests from API QoS Gate objects
*/
}
public void setTrafficProfile(final TrafficProfile qosTrafficProfile) {
- if (qosTrafficProfile.getServiceClassName() != null) {
- trafficProfile =
- new DOCSISServiceClassNameTrafficProfile(qosTrafficProfile.getServiceClassName().getValue());
+ TrafficProfileChoice choice = qosTrafficProfile.getTrafficProfileChoice();
+
+ if (choice instanceof ServiceClassNameChoice) {
+ ServiceClassNameProfile scnp = ((ServiceClassNameChoice)choice).getServiceClassNameProfile();
+ trafficProfile = new DOCSISServiceClassNameTrafficProfile(scnp.getServiceClassName().getValue());
+ }
+ else if (choice instanceof FlowSpecChoice) {
+ FlowSpecProfile fsp = ((FlowSpecChoice)choice).getFlowSpecProfile();
+ trafficProfile = new DOCSISFlowSpecTrafficProfile(fsp.getTokenBucketRate(),
+ fsp.getTokenBucketSize(),
+ fsp.getPeakDataRate(),
+ fsp.getMinimumPolicedUnit(),
+ fsp.getMaximumPacketSize(),
+ fsp.getRate(),
+ fsp.getSlackTerm());
+ }
+ else {
+ logger.debug("PCMMGateReq().setTrafficProfile() Unsupported Traffic Profile: " + choice.getClass().getName());
}
}
import javax.annotation.concurrent.ThreadSafe;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
import org.pcmm.PCMMPdpAgent;
import org.pcmm.PCMMPdpDataProcess;
import org.pcmm.PCMMPdpMsgSender;
import javax.annotation.Nonnull;
import javax.annotation.concurrent.ThreadSafe;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.AppContext;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapContext;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapPollConnectionInput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapPollConnectionOutput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapPollConnectionOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapSetConnectionInput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapSetConnectionOutput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapSetConnectionOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.PacketcableService;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Qos;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.QosPollGatesInput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.QosPollGatesOutput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.QosPollGatesOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.ConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.CcapBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpecBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.AppBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.AppKey;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.SubscribersBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.SubscriberKey;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.AppContext;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapContext;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapPollConnectionInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapPollConnectionOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapPollConnectionOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapSetConnectionInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapSetConnectionOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapSetConnectionOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.PacketcableService;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Qos;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.QosPollGatesInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.QosPollGatesOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.QosPollGatesOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.CcapBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.AppBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.AppKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.SubscribersBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.SubscriberKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
import org.pcmm.gates.IGateSpec.Direction;
+import org.pcmm.gates.impl.DOCSISFlowSpecTrafficProfile;
+import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
import org.pcmm.rcd.IPCMMClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
gateBuilder.setGateId(newGate.getGateId())
.setGatePath(newGatePathStr)
.setCcapId(ccap.getCcapId())
- .setTrafficProfile(newGate.getTrafficProfile())
.setClassifiers(newGate.getClassifiers())
.setGateSpec(newGate.getGateSpec())
.setCopsGateState("")
.setCopsGateTimeInfo("")
.setCopsGateUsageInfo("");
- //
- // Right now only ServiceClassName traffic Profile is supported. This logic needs to
- // be updated when the yang traffic-profile is extended to support new types
- // Override requested Direction using the Ccap configuration information about SCNs and
- // their configured direction.
- //
- final ServiceClassName scn = newGate.getTrafficProfile().getServiceClassName();
- final ServiceFlowDirection scnDirection = findScnOnCcap(scn, ccap);
- if (scnDirection == null) {
- final String msg =
+ ServiceFlowDirection scnDirection = null;
+
+ if (newGate.getTrafficProfile().getTrafficProfileChoice() instanceof ServiceClassNameChoice) {
+ final ServiceClassName scn =
+ ((ServiceClassNameChoice)newGate.getTrafficProfile()
+ .getTrafficProfileChoice())
+ .getServiceClassNameProfile()
+ .getServiceClassName();
+ scnDirection = findScnOnCcap(scn, ccap);
+ if (scnDirection == null) {
+ final String msg =
String.format("SCN %s not found on CCAP %s for %s", scn, ccap.getCcapId(), newGatePathStr);
- logger.error(msg);
- saveGateError(gateIID, newGatePathStr, msg);
- return;
+ logger.error(msg);
+ saveGateError(gateIID, newGatePathStr, msg);
+ return;
+ }
+ ServiceClassNameProfileBuilder scnBuilder = new ServiceClassNameProfileBuilder();
+ scnBuilder.setServiceClassName(scn);
+ ServiceClassNameProfile scnProfile = scnBuilder.build();
+ ServiceClassNameChoiceBuilder scncBuilder = new ServiceClassNameChoiceBuilder();
+ scncBuilder.setServiceClassNameProfile(scnProfile);
+ ServiceClassNameChoice scnChoice = scncBuilder.build();
+ TrafficProfileBuilder trafficProfileBuilder = new TrafficProfileBuilder();
+ trafficProfileBuilder.setTrafficProfileChoice(scnChoice);
+ TrafficProfile trafficProfile = trafficProfileBuilder.build();
+ gateBuilder.setTrafficProfile(trafficProfile);
}
-
+ else {
+ gateBuilder.setTrafficProfile(newGate.getTrafficProfile());
+ }
+
//
// since we may be modifying the contents of the original request GateSpec
// to update flow direction (based on the ccap SCN configuration) we need to
}
DateAndTime connectionDateAndTime = getNowTimeStamp();
- org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.set.connection.output.ccap.ConnectionBuilder
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.ccap.ConnectionBuilder
connectionRpcOutput =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.set.connection.output.ccap.ConnectionBuilder()
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.ccap.ConnectionBuilder()
.setConnected(effectiveIsConnected)
.setError(outputError)
.setTimestamp(connectionDateAndTime);
- org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.set.connection.output.CcapBuilder ccapRpcOutput =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.set.connection.output.CcapBuilder().setCcapId(
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.CcapBuilder ccapRpcOutput =
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.CcapBuilder().setCcapId(
ccapId).setConnection(connectionRpcOutput.build());
PCMMService pcmmService = pcmmServiceMap.get(ccapId);
Boolean effectiveIsConnected = true;
String response = null;
- org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.ccap.ConnectionBuilder
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder
connectionRpcOutput =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.ccap.ConnectionBuilder();
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder();
if (pcmmService != null) {
if (pcmmService.getPcmmPdpSocket()) {
CcapBuilder responseCcapBuilder = new CcapBuilder().setCcapId(ccapId).setConnection(connectionOps.build());
connectionRpcOutput =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.ccap.ConnectionBuilder()
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder()
.setConnected(effectiveIsConnected)
.setError(outputError)
.setTimestamp(connectionDateAndTime);
DateAndTime rpcDateAndTime = getNowTimeStamp();
- org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.CcapBuilder ccapRpcOutput =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.CcapBuilder().setCcapId(
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.CcapBuilder ccapRpcOutput =
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.CcapBuilder().setCcapId(
ccapId).setConnection(connectionRpcOutput.build());
CcapPollConnectionOutputBuilder outputBuilder =
String rpcResponse = null;
- org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.qos.poll.gates.output.GateBuilder gateOutputBuilder =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.qos.poll.gates.output.GateBuilder();
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.qos.poll.gates.output.GateBuilder gateOutputBuilder =
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.qos.poll.gates.output.GateBuilder();
GateBuilder gateBuilder = new GateBuilder();
@Override
public void run() {
- org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.qos.poll.gates.output.GateBuilder gateOutputBuilder =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.qos.poll.gates.output.GateBuilder();
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.qos.poll.gates.output.GateBuilder gateOutputBuilder =
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.qos.poll.gates.output.GateBuilder();
GateBuilder gateBuilder = new GateBuilder();
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.CcapValidator;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.CcapsValidator;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.ConnectionValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
/**
* A ValidatorProviderFactory that can provide validators for types under packetcable:ccaps.
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.ClassifiersValidator;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.ExtClassifierValidator;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.Ipv6ClassifierValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
/**
* * A ValidatorProviderFactory that can provide validators for types under packetcable:qos.
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.ClassifiersValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
/**
* @author rvail
*/
public class TrafficProfileValidator extends AbstractValidator<TrafficProfile> {
+ private static final String FS = "flow-spec-profile";
private static final String SCN = "service-class-name";
+ private static final String SCP = "service-class-name-profile";
@Override
protected void doValidate(final TrafficProfile trafficProfile, final Extent extent) {
if (trafficProfile == null) {
getErrorMessages().add("traffic-profile must exist");
return;
- }
-
- mustExist(trafficProfile.getServiceClassName(), SCN);
-
+ }
+ if (trafficProfile.getTrafficProfileChoice() instanceof ServiceClassNameChoice) {
+ mustExist(((ServiceClassNameChoice)trafficProfile.getTrafficProfileChoice()).getServiceClassNameProfile(), SCP);
+ mustExist(((ServiceClassNameChoice)trafficProfile.getTrafficProfileChoice()).getServiceClassNameProfile().getServiceClassName(), SCN);
+ } else if (trafficProfile.getTrafficProfileChoice() instanceof FlowSpecChoice) {
+ mustExist(((FlowSpecChoice)trafficProfile.getTrafficProfileChoice()).getFlowSpecProfile(), SCP);
+ } else {
+ getErrorMessages().add("Unknown traffic profile");
+ return;
+ }
}
}
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
/**
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
/**
* @author rvail
package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
/**
* @author rvail
/*
* (c) 2015 Cable Television Laboratories, Inc. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.controller.packetcable.provider;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
import org.pcmm.PCMMPdpAgent;
import org.pcmm.gates.IPCMMGate;
import org.pcmm.rcd.IPCMMClient;
when(gateSpec.getDirection()).thenReturn(direction);
// TODO - make sure to write a test when this value is not null
when(gateSpec.getDscpTosOverwrite()).thenReturn(null);
+
+ // TODO - refactor to add flowspec profile testing as well
final TrafficProfile trafficProfile = mock(TrafficProfile.class);
- final ServiceClassName scn = mock(ServiceClassName.class);
- when(scn.getValue()).thenReturn(scnValue);
- when(trafficProfile.getServiceClassName()).thenReturn(scn);
+ final ServiceClassNameChoice serviceClassNameChoice = mock(ServiceClassNameChoice.class);
+ final ServiceClassNameProfile serviceClassNameProfile = mock(ServiceClassNameProfile.class);
+ final ServiceClassName serviceClassName = mock(ServiceClassName.class);
+ when(serviceClassName.getValue()).thenReturn(scnValue);
+ when(serviceClassNameProfile.getServiceClassName()).thenReturn(serviceClassName);
+ when(serviceClassNameChoice.getServiceClassNameProfile()).thenReturn(serviceClassNameProfile);
+ when(trafficProfile.getTrafficProfileChoice()).thenReturn(serviceClassNameChoice);
when(gate.getTrafficProfile()).thenReturn(trafficProfile);
// TODO - write tests when this is null and ExtClassifier or Ipv6Classifier objects are not null
gateBuilder.setAmId(ccap.getAmId());
gateBuilder.setSubscriberId(addrSubId);
// force gateSpec.Direction to align with SCN direction
- final ServiceClassName scn = gateReq.getTrafficProfile().getServiceClassName();
+ final ServiceClassName scn =
+ ((ServiceClassNameChoice)gateReq.getTrafficProfile().getTrafficProfileChoice()).getServiceClassNameProfile().getServiceClassName();
if (scn != null) {
gateBuilder.setGateSpec(gateReq.getGateSpec(), direction);
} else {
import java.util.Map;
import org.junit.Test;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.CcapValidatorTest;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.junit.Test;
import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
/**
* @author rvail
import org.junit.Test;
import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
/**
* @author rvail
import org.junit.Test;
import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.validation.Validator;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.ConnectionValidator;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.ConnectionValidatorTest;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmIdBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.CcapBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.CcapBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapsBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapsBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
/**
* @author rvail
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.ConnectionBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.AppBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.AppBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.AppsBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.AppsBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpecBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.ClassifiersValidatorTest;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.SubscribersBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.SubscribersBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfileBuilder;
/**
* @author rvail
validator.validate(buildValidTrafficProfile(), null);
}
- @Test
+ @Test(expected = ValidationException.class)
public void nullServiceClassName() throws ValidationException {
- final TrafficProfile trafficProfile = new TrafficProfileBuilder(buildValidTrafficProfile())
- .setServiceClassName(null)
- .build();
- validator.validate(buildValidTrafficProfile(), extentParams.getCurrentParam());
+ final ServiceClassNameProfile serviceClassNameProfile = new ServiceClassNameProfileBuilder().setServiceClassName(null).build();
+ final TrafficProfile trafficProfile =
+ new TrafficProfileBuilder().setTrafficProfileChoice(new ServiceClassNameChoiceBuilder().setServiceClassNameProfile(serviceClassNameProfile).build()).build();
+ validator.validate(trafficProfile, extentParams.getCurrentParam());
}
@Test
public static TrafficProfile buildValidTrafficProfile() {
- return new TrafficProfileBuilder()
- .setServiceClassName(new ServiceClassName("unit-test-scn"))
- .build();
+ final ServiceClassNameProfile serviceClassNameProfile = new ServiceClassNameProfileBuilder().setServiceClassName(new ServiceClassName("unit-test-scn")).build();
+ return new TrafficProfileBuilder().setTrafficProfileChoice(new ServiceClassNameChoiceBuilder().setServiceClassNameProfile(serviceClassNameProfile).build()).build();
}
}
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoiceBuilder;
import org.opendaylight.yangtools.yang.binding.DataContainer;
/**
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainerBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainerBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.validation.Validator;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.ClassifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.ClassifierBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.test.rules.Params;
import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.ClassifiersBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.ClassifiersBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.validation.Validator;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ClassifierActivationState;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ClassifierActivationState;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifierBuilder;
/**
* @author rvail
import org.opendaylight.controller.packetcable.provider.validation.Validator;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ClassifierActivationState;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6ClassifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ClassifierActivationState;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6ClassifierBuilder;
/**
* @author rvail