@Override
protected byte[] getBytes() {
final byte[] data = new byte[4+(4*7*3)];
+ ByteBuffer buffer = ByteBuffer.wrap(data);
- 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
+ final float fTokenBucketRate = tokenBucketRate;
+ final float fTokenBucketSize = tokenBucketSize;
+ final float fPeakDataRate = peakDataRate;
+ final float fRate = rate;
+
+ buffer.put(envelope);
+ buffer.put(SERVICE_NUMBER);
+ buffer.put((byte)0); // reserved
+ buffer.put((byte)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);
+ buffer.putFloat(fTokenBucketRate);
+ buffer.putFloat(fTokenBucketSize);
+ buffer.putFloat(fPeakDataRate);
+ buffer.putInt(minimumPolicedUnit);
+ buffer.putInt(maximumPacketSize);
+ buffer.putFloat(fRate);
+ buffer.putInt(slackTerm);
// 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);
+ buffer.putFloat(fTokenBucketRate);
+ buffer.putFloat(fTokenBucketSize);
+ buffer.putFloat(fPeakDataRate);
+ buffer.putInt(minimumPolicedUnit);
+ buffer.putInt(maximumPacketSize);
+ buffer.putFloat(fRate);
+ buffer.putInt(slackTerm);
// 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);
+ buffer.putFloat(fTokenBucketRate);
+ buffer.putFloat(fTokenBucketSize);
+ buffer.putFloat(fPeakDataRate);
+ buffer.putInt(minimumPolicedUnit);
+ buffer.putInt(maximumPacketSize);
+ buffer.putFloat(fRate);
+ buffer.putInt(slackTerm);
+
+ if (buffer.hasRemaining()) {
+ logger.error("Original buffer too large");
+ }
+
return data;
}
--- /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 RTP object defines the RTP Traffic Profile of a Gate.
+ *
+ */
+public class DOCSISRTPTrafficProfile extends PCMMBaseObject implements ITrafficProfile {
+
+ private final Logger logger = LoggerFactory.getLogger(DOCSISRTPTrafficProfile.class);
+ public static final byte STYPE = 5;
+
+ /**
+ * The envelope
+ */
+ private final byte envelope;
+ private final int requestTransmissionPolicy;
+ private final int maximumSustainedTrafficRate;
+ private final int maximumTrafficBurst;
+ private final int minimumReservedTrafficRate;
+ private final int amrtrPacketSize;
+ private final int maximumConcatenatedBurst;
+ private final int nominalPollingInterval;
+ private final int toleratedPollJitter;
+ private final int upstreamPeakTrafficRate;
+ private final int requiredAttributeMask;
+ private final int forbiddenAttributeMask;
+ private final int attributeAggregationRuleMask;
+
+ /**
+ * Constructor using the default envelope values
+ * @param requestTransmissionPolicy - Request Transmission Policy
+ * @param maximumSustainedTrafficRate - Maximum Sustained Traffic Rate
+ * @param maximumTrafficBurst - Maximum Traffic Burst
+ * @param minimumReservedTrafficRate - Minimum Reserved Traffic Rate
+ * @param amrtrPacketSize - Assumed Minimum Reserved Traffic Rate Packet Size
+ * @param maximumConcatenatedBurst - Maximum Concatenated Burst
+ * @param nominalPollingInterval - Nominal Polling Interval
+ * @param toleratedPollJitter - Tolerated Poll Jitter
+ * @param upstreamPeakTrafficRate - Upstream Peak Traffic Rate
+ * @param requiredAttributeMask - Required Attribute Mask
+ * @param forbiddenAttributeMask - Forbidden Attribute Mask
+ * @param attributeAggregationRuleMask - Attribute Aggregation Rule Mask
+ */
+ public DOCSISRTPTrafficProfile(final Long requestTransmissionPolicy,
+ final Long maximumSustainedTrafficRate,
+ final Long maximumTrafficBurst,
+ final Long minimumReservedTrafficRate,
+ final Long amrtrPacketSize,
+ final Long maximumConcatenatedBurst,
+ final Long nominalPollingInterval,
+ final Long toleratedPollJitter,
+ final Long upstreamPeakTrafficRate,
+ final Long requiredAttributeMask,
+ final Long forbiddenAttributeMask,
+ final Long attributeAggregationRuleMask ) {
+
+ this(DEFAULT_ENVELOP,
+ requestTransmissionPolicy.intValue(),
+ maximumSustainedTrafficRate.intValue(),
+ maximumTrafficBurst.intValue(),
+ minimumReservedTrafficRate.intValue(),
+ amrtrPacketSize.intValue(),
+ maximumConcatenatedBurst.intValue(),
+ nominalPollingInterval.intValue(),
+ toleratedPollJitter.intValue(),
+ upstreamPeakTrafficRate.intValue(),
+ requiredAttributeMask.intValue(),
+ forbiddenAttributeMask.intValue(),
+ attributeAggregationRuleMask.intValue());
+ }
+
+ /**
+ * Constructor to set all values
+ * @param envelope - the envelope value
+ * @param requestTransmissionPolicy - Request Transmission Policy
+ * @param maximumSustainedTrafficRate - Maximum Sustained Traffic Rate
+ * @param maximumTrafficBurst - Maximum Traffic Burst
+ * @param minimumReservedTrafficRate - Minimum Reserved Traffic Rate
+ * @param amrtrPacketSize - Assumed Minimum Reserved Traffic Rate Packet Size
+ * @param maximumConcatenatedBurst - Maximum Concatenated Burst
+ * @param nominalPollingInterval - Nominal Polling Interval
+ * @param toleratedPollJitter - Tolerated Poll Jitter
+ * @param upstreamPeakTrafficRate - Upstream Peak Traffic Rate
+ * @param requiredAttributeMask - Required Attribute Mask
+ * @param forbiddenAttributeMask - Forbidden Attribute Mask
+ * @param attributeAggregationRuleMask - Attribute Aggregation Rule Mask
+ */
+ protected DOCSISRTPTrafficProfile(final byte envelope,
+ final int requestTransmissionPolicy,
+ final int maximumSustainedTrafficRate,
+ final int maximumTrafficBurst,
+ final int minimumReservedTrafficRate,
+ final int amrtrPacketSize,
+ final int maximumConcatenatedBurst,
+ final int nominalPollingInterval,
+ final int toleratedPollJitter,
+ final int upstreamPeakTrafficRate,
+ final int requiredAttributeMask,
+ final int forbiddenAttributeMask,
+ final int attributeAggregationRuleMask ) {
+ super(SNum.TRAFFIC_PROFILE, STYPE);
+ this.requestTransmissionPolicy = requestTransmissionPolicy;
+ this.maximumSustainedTrafficRate = maximumSustainedTrafficRate;
+ this.maximumTrafficBurst = maximumTrafficBurst;
+ this.minimumReservedTrafficRate = minimumReservedTrafficRate;
+ this.amrtrPacketSize = amrtrPacketSize;
+ this.maximumConcatenatedBurst = maximumConcatenatedBurst;
+ this.nominalPollingInterval = nominalPollingInterval;
+ this.toleratedPollJitter = toleratedPollJitter;
+ this.upstreamPeakTrafficRate = upstreamPeakTrafficRate;
+ this.requiredAttributeMask = requiredAttributeMask;
+ this.forbiddenAttributeMask = forbiddenAttributeMask;
+ this.attributeAggregationRuleMask = attributeAggregationRuleMask;
+ this.envelope = envelope;
+ }
+
+ @Override
+ public byte getEnvelop() {
+ return envelope;
+ }
+
+ /**
+ * Returns the Request Transmission Policy value
+ * @return - the Request Transmission Policy value
+ */
+ public int getRequestTransmissionPolicy() {
+ return requestTransmissionPolicy;
+ }
+
+ /**
+ * Returns the Maximum Sustained Traffic Rate value
+ * @return - the Maximum Sustained Traffic Rate value
+ */
+ public int getMaximumSustainedTrafficRate() {
+ return maximumSustainedTrafficRate;
+ }
+
+ /**
+ * Returns the Maximum Traffic Burst value
+ * @return - the Maximum Traffic Burst value
+ */
+ public int getMaximumTrafficBurst() {
+ return maximumTrafficBurst;
+ }
+
+ /**
+ * Returns the Minimum Reserved Traffic Rate value
+ * @return - the Minimum Reserved Traffic Rate value
+ */
+ public int getMinimumReservedTrafficRate() {
+ return minimumReservedTrafficRate;
+ }
+
+ /**
+ * Returns the Assumed Minimum Reserved Traffic Rate Packet Size value
+ * @return - the Assumed Minimum Reserved Traffic Rate Packet Size value
+ */
+ public int getAmrtrPacketSize() {
+ return amrtrPacketSize;
+ }
+
+ /**
+ * Returns the Maximum Concatenated Burst value
+ * @return - the Maximum Concatenated Burst value
+ */
+ public int getMaximumConcatenatedBurst() {
+ return maximumConcatenatedBurst;
+ }
+
+ /**
+ * Returns the Nominal Polling Interval value
+ * @return - the Nominal Polling Interval value
+ */
+ public int getNominalPollingInterval() {
+ return nominalPollingInterval;
+ }
+
+ /**
+ * Returns the Tolerated Poll Jitter value
+ * @return - the Tolerated Poll Jitter value
+ */
+ public int getToleratedPollJitter() {
+ return toleratedPollJitter;
+ }
+
+ /**
+ * Returns the Upstream Peak Traffic Rate value
+ * @return - the maximum packet size value
+ */
+ public int getUpstreamPeakTrafficRate() {
+ return upstreamPeakTrafficRate;
+ }
+
+ /**
+ * Returns the Required Attribute Mask value
+ * @return - the Required Attribute Mask value
+ */
+ public int getRequiredAttributeMask() {
+ return requiredAttributeMask;
+ }
+
+ /**
+ * Returns the Forbidden Attribute Mask value
+ * @return - the Forbidden Attribute Mask value
+ */
+ public int getForbiddenAttributeMask() {
+ return forbiddenAttributeMask;
+ }
+
+ /**
+ * Returns the Attribute Aggregation Rule Mask value
+ * @return - the Attribute Aggregation Rule Mask value
+ */
+ public int getAttributeAggregationRuleMask() {
+ return attributeAggregationRuleMask;
+ }
+
+ @Override
+ protected byte[] getBytes() {
+ final byte[] data = new byte[4+(4*10*3)];
+ ByteBuffer buffer = ByteBuffer.wrap(data);
+
+ buffer.put(envelope);
+ buffer.put((byte)0); // reserved
+ buffer.put((byte)0); // reserved
+ buffer.put((byte)0); // reserved
+
+ final int value = ((int)amrtrPacketSize<<16) | (int)maximumConcatenatedBurst;
+
+ // Authorized Envelope
+ buffer.putInt(requestTransmissionPolicy);
+ buffer.putInt(maximumSustainedTrafficRate);
+ buffer.putInt(maximumTrafficBurst);
+ buffer.putInt(minimumReservedTrafficRate);
+ buffer.putInt(value);
+ buffer.putInt(nominalPollingInterval);
+ buffer.putInt(toleratedPollJitter);
+ buffer.putInt(requiredAttributeMask);
+ buffer.putInt(forbiddenAttributeMask);
+ buffer.putInt(attributeAggregationRuleMask);
+
+ // Reserved Envelope
+ buffer.putInt(requestTransmissionPolicy);
+ buffer.putInt(maximumSustainedTrafficRate);
+ buffer.putInt(maximumTrafficBurst);
+ buffer.putInt(minimumReservedTrafficRate);
+ buffer.putInt(value);
+ buffer.putInt(nominalPollingInterval);
+ buffer.putInt(toleratedPollJitter);
+ buffer.putInt(requiredAttributeMask);
+ buffer.putInt(forbiddenAttributeMask);
+ buffer.putInt(attributeAggregationRuleMask);
+
+ // Committed Envelope
+ buffer.putInt(requestTransmissionPolicy);
+ buffer.putInt(maximumSustainedTrafficRate);
+ buffer.putInt(maximumTrafficBurst);
+ buffer.putInt(minimumReservedTrafficRate);
+ buffer.putInt(value);
+ buffer.putInt(nominalPollingInterval);
+ buffer.putInt(toleratedPollJitter);
+ buffer.putInt(requiredAttributeMask);
+ buffer.putInt(forbiddenAttributeMask);
+ buffer.putInt(attributeAggregationRuleMask);
+
+ if (buffer.hasRemaining()) {
+ logger.error("Original buffer too large");
+ }
+
+ return data;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof DOCSISRTPTrafficProfile)) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+ final DOCSISRTPTrafficProfile that = (DOCSISRTPTrafficProfile) o;
+ return (envelope == that.envelope) &&
+ (requestTransmissionPolicy == that.requestTransmissionPolicy) &&
+ (maximumSustainedTrafficRate == that.maximumSustainedTrafficRate) &&
+ (maximumTrafficBurst == that.maximumTrafficBurst) &&
+ (minimumReservedTrafficRate == that.minimumReservedTrafficRate) &&
+ (amrtrPacketSize == that.amrtrPacketSize) &&
+ (maximumConcatenatedBurst == that.maximumConcatenatedBurst) &&
+ (nominalPollingInterval == that.nominalPollingInterval) &&
+ (toleratedPollJitter == that.toleratedPollJitter) &&
+ (upstreamPeakTrafficRate == that.upstreamPeakTrafficRate) &&
+ (requiredAttributeMask == that.requiredAttributeMask) &&
+ (forbiddenAttributeMask == that.forbiddenAttributeMask) &&
+ (attributeAggregationRuleMask == that.attributeAggregationRuleMask);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + requestTransmissionPolicy;
+ result = 31 * result + maximumSustainedTrafficRate;
+ result = 31 * result + maximumTrafficBurst;
+ result = 31 * result + minimumReservedTrafficRate;
+ result = 31 * result + amrtrPacketSize;
+ result = 31 * result + maximumConcatenatedBurst;
+ result = 31 * result + nominalPollingInterval;
+ result = 31 * result + toleratedPollJitter;
+ result = 31 * result + upstreamPeakTrafficRate;
+ result = 31 * result + requiredAttributeMask;
+ result = 31 * result + forbiddenAttributeMask;
+ result = 31 * result + attributeAggregationRuleMask;
+ 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 int shortToInt(final byte[] data, int start) {
+ return (int)(data[start] << 8 |
+ data[start+1]);
+ }
+
+ 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 DOCSISRTPProfile 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 DOCSISRTPTrafficProfile parse(final byte[] data) {
+ byte env = 0;
+ int requestTransmissionPolicy,
+ maximumSustainedTrafficRate,
+ maximumTrafficBurst,
+ minimumReservedTrafficRate,
+ amrtrPacketSize,
+ maximumConcatenatedBurst,
+ nominalPollingInterval,
+ toleratedPollJitter,
+ upstreamPeakTrafficRate,
+ requiredAttributeMask,
+ forbiddenAttributeMask,
+ attributeAggregationRuleMask;
+
+ env = data[0];
+
+ requestTransmissionPolicy = byteToInt(data, 4);
+ maximumSustainedTrafficRate = byteToInt(data, 8);
+ maximumTrafficBurst = byteToInt(data, 12);
+ minimumReservedTrafficRate = byteToInt(data, 16);
+ amrtrPacketSize = shortToInt(data, 20);
+ maximumConcatenatedBurst = shortToInt(data, 22);
+ nominalPollingInterval = byteToInt(data, 24);
+ toleratedPollJitter = byteToInt(data, 28);
+ upstreamPeakTrafficRate = byteToInt(data,32);
+ requiredAttributeMask = byteToInt(data,36);
+ forbiddenAttributeMask = byteToInt(data, 40);
+ attributeAggregationRuleMask = byteToInt(data, 44);
+
+ return new DOCSISRTPTrafficProfile(env,
+ requestTransmissionPolicy,
+ maximumSustainedTrafficRate,
+ maximumTrafficBurst,
+ minimumReservedTrafficRate,
+ amrtrPacketSize,
+ maximumConcatenatedBurst,
+ nominalPollingInterval,
+ toleratedPollJitter,
+ upstreamPeakTrafficRate,
+ requiredAttributeMask,
+ forbiddenAttributeMask,
+ attributeAggregationRuleMask);
+ }
+
+ /**
+ * {@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("RequestTransmissionPolicy: ").append(requestTransmissionPolicy);
+ sb.append(variableSeparator);
+ sb.append("MaximumSustainedTrafficRate: ").append(maximumSustainedTrafficRate);
+ sb.append(variableSeparator);
+ sb.append("MaximumTrafficBurst: ").append(maximumTrafficBurst);
+ sb.append(variableSeparator);
+ sb.append("MinimumReservedTrafficRate: ").append(minimumReservedTrafficRate);
+ sb.append(variableSeparator);
+ sb.append("AmrtrPacketSize: ").append(amrtrPacketSize);
+ sb.append(variableSeparator);
+ sb.append("MaximumConcatenatedBurst: ").append(maximumConcatenatedBurst);
+ sb.append(variableSeparator);
+ sb.append("NominalPollingInterval: ").append(nominalPollingInterval);
+ sb.append(variableSeparator);
+ sb.append("ToleratedPollJitter: ").append(toleratedPollJitter);
+ sb.append(variableSeparator);
+ sb.append("UpstreamPeakTrafficRate: ").append(upstreamPeakTrafficRate);
+ sb.append(variableSeparator);
+ sb.append("RequiredAttributeMask: ").append(requiredAttributeMask);
+ sb.append(variableSeparator);
+ sb.append("ForbiddenAttributeMask: ").append(forbiddenAttributeMask);
+ sb.append(variableSeparator);
+ sb.append("AttributeAggregationRuleMask: ").append(attributeAggregationRuleMask);
+
+ return sb.toString();
+ }
+}
--- /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 UGS object defines the UGS Traffic Profile of a Gate.
+ *
+ */
+public class DOCSISUGSTrafficProfile extends PCMMBaseObject implements ITrafficProfile {
+
+ private final Logger logger = LoggerFactory.getLogger(DOCSISUGSTrafficProfile.class);
+ public static final byte STYPE = 6;
+
+ /**
+ * The envelope
+ */
+ private final byte envelope;
+ private final int requestTransmissionPolicy;
+ private final int unsolicitedGrantSize;
+ private final int grantsPerInterval;
+ private final int nominalGrantInterval;
+ private final int toleratedGrantJitter;
+ private final int upstreamPeakTrafficRate;
+ private final int requiredAttributeMask;
+ private final int forbiddenAttributeMask;
+ private final int attributeAggregationRuleMask;
+
+ /**
+ * Constructor using the default envelope values
+ * @param requestTransmissionPolicy - Request Transmission Policy
+ * @param unsolicitedGrantSize - Unsolicited Grant Size
+ * @param grantsPerInterval - Grants per Interval
+ * @param nominalGrantInterval - Nominal Grant Interval
+ * @param toleratedGrantJitter - Tolerated Grant Jitter
+ * @param upstreamPeakTrafficRate - Upstream Peak Traffic Rate
+ * @param requiredAttributeMask - Required Attribute Mask
+ * @param forbiddenAttributeMask - Forbidden Attribute Mask
+ * @param attributeAggregationRuleMask - Attribute Aggregation Rule Mask
+ */
+ public DOCSISUGSTrafficProfile(final Long requestTransmissionPolicy,
+ final Long unsolicitedGrantSize,
+ final Short grantsPerInterval,
+ final Long nominalGrantInterval,
+ final Long toleratedGrantJitter,
+ final Long upstreamPeakTrafficRate,
+ final Long requiredAttributeMask,
+ final Long forbiddenAttributeMask,
+ final Long attributeAggregationRuleMask ) {
+
+ this(DEFAULT_ENVELOP,
+ requestTransmissionPolicy.intValue(),
+ unsolicitedGrantSize.intValue(),
+ grantsPerInterval.intValue(),
+ nominalGrantInterval.intValue(),
+ toleratedGrantJitter.intValue(),
+ upstreamPeakTrafficRate.intValue(),
+ requiredAttributeMask.intValue(),
+ forbiddenAttributeMask.intValue(),
+ attributeAggregationRuleMask.intValue());
+ }
+
+ /**
+ * Constructor to set all values
+ * @param envelope - the envelope value
+ * @param requestTransmissionPolicy - Request Transmission Policy
+ * @param unsolicitedGrantSize - Unsolicited Grant Size
+ * @param grantsPerInterval - Grants per Interval
+ * @param nominalGrantInterval - Nominal Grant Interval
+ * @param toleratedGrantJitter - Tolerated Grant Jitter
+ * @param upstreamPeakTrafficRate - Upstream Peak Traffic Interval
+ * @param requiredAttributeMask - Required Attribute Mask
+ * @param forbiddenAttributeMask - Forbidden Attribute Mask
+ * @param attributeAggregationRuleMask - Attribute Aggregation Rule Mask
+ */
+ protected DOCSISUGSTrafficProfile(final byte envelope,
+ final int requestTransmissionPolicy,
+ final int unsolicitedGrantSize,
+ final int grantsPerInterval,
+ final int nominalGrantInterval,
+ final int toleratedGrantJitter,
+ final int upstreamPeakTrafficRate,
+ final int requiredAttributeMask,
+ final int forbiddenAttributeMask,
+ final int attributeAggregationRuleMask ) {
+ super(SNum.TRAFFIC_PROFILE, STYPE);
+ this.requestTransmissionPolicy = requestTransmissionPolicy;
+ this.unsolicitedGrantSize = unsolicitedGrantSize;
+ this.grantsPerInterval = grantsPerInterval;
+ this.nominalGrantInterval = nominalGrantInterval;
+ this.toleratedGrantJitter = toleratedGrantJitter;
+ this.upstreamPeakTrafficRate = upstreamPeakTrafficRate;
+ this.requiredAttributeMask = requiredAttributeMask;
+ this.forbiddenAttributeMask = forbiddenAttributeMask;
+ this.attributeAggregationRuleMask = attributeAggregationRuleMask;
+ this.envelope = envelope;
+ }
+
+ @Override
+ public byte getEnvelop() {
+ return envelope;
+ }
+
+ /**
+ * Returns the Request Transmission Policy value
+ * @return - the Request Transmission Policy value
+ */
+ public int getRequestedTransmissionPolicy() {
+ return requestTransmissionPolicy;
+ }
+
+ /**
+ * Returns the Unsolicited Grant Size value
+ * @return - the Unsolicited Grant Size value
+ */
+ public int getUnsolicitedGrantSize() {
+ return unsolicitedGrantSize;
+ }
+
+ /**
+ * Returns the Grants per Interval value
+ * @return - the Grants per Interval value
+ */
+ public int getGrantsPerInterval() {
+ return grantsPerInterval;
+ }
+
+ /**
+ * Returns the Nominal Grant Interval value
+ * @return - the Nominal Grant Interval value
+ */
+ public int getNominalGrantInterval() {
+ return nominalGrantInterval;
+ }
+
+ /**
+ * Returns the Tolerated Grant Jitter value
+ * @return - the Tolerated Grant Jitter value
+ */
+ public int getToleratedGrantJitter() {
+ return toleratedGrantJitter;
+ }
+
+ /**
+ * Returns the Upstream Peak Traffic Rate value
+ * @return - the maximum packet size value
+ */
+ public int getUpstreamPeakTrafficRate() {
+ return upstreamPeakTrafficRate;
+ }
+
+ /**
+ * Returns the Required Attribute Mask value
+ * @return - the Required Attribute Mask value
+ */
+ public int getRequiredAttributeMask() {
+ return requiredAttributeMask;
+ }
+
+ /**
+ * Returns the Forbidden Attribute Mask value
+ * @return - the Forbidden Attribute Mask value
+ */
+ public int getForbiddenAttributeMask() {
+ return forbiddenAttributeMask;
+ }
+
+ /**
+ * Returns the Attribute Aggregation Rule Mask value
+ * @return - the Attribute Aggregation Rule Mask value
+ */
+ public int getAttributeAggregationRuleMask() {
+ return attributeAggregationRuleMask;
+ }
+
+ @Override
+ protected byte[] getBytes() {
+ final byte[] data = new byte[4+(4*7*3)];
+ ByteBuffer buffer = ByteBuffer.wrap(data);
+
+ buffer.put(envelope);
+ buffer.put((byte)0); // reserved
+ buffer.put((byte)0); // reserved
+ buffer.put((byte)0); // reserved
+
+ final int value = ((int)unsolicitedGrantSize<<16) | ((int)grantsPerInterval<<8);
+
+ // Authorized Envelope
+ buffer.putInt(requestTransmissionPolicy);
+ buffer.putInt(value);
+ buffer.putInt(nominalGrantInterval);
+ buffer.putInt(toleratedGrantJitter);
+ buffer.putInt(requiredAttributeMask);
+ buffer.putInt(forbiddenAttributeMask);
+ buffer.putInt(attributeAggregationRuleMask);
+
+ // Reserved Envelope
+ buffer.putInt(requestTransmissionPolicy);
+ buffer.putInt(value);
+ buffer.putInt(nominalGrantInterval);
+ buffer.putInt(toleratedGrantJitter);
+ buffer.putInt(requiredAttributeMask);
+ buffer.putInt(forbiddenAttributeMask);
+ buffer.putInt(attributeAggregationRuleMask);
+
+ // Committed Envelope
+ buffer.putInt(requestTransmissionPolicy);
+ buffer.putInt(value);
+ buffer.putInt(nominalGrantInterval);
+ buffer.putInt(toleratedGrantJitter);
+ buffer.putInt(requiredAttributeMask);
+ buffer.putInt(forbiddenAttributeMask);
+ buffer.putInt(attributeAggregationRuleMask);
+
+ if (buffer.hasRemaining()) {
+ logger.error("Original buffer too large");
+ }
+
+ return data;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof DOCSISUGSTrafficProfile)) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+ final DOCSISUGSTrafficProfile that = (DOCSISUGSTrafficProfile) o;
+ return (envelope == that.envelope) &&
+ (requestTransmissionPolicy == that.requestTransmissionPolicy) &&
+ (unsolicitedGrantSize == that.unsolicitedGrantSize) &&
+ (grantsPerInterval == that.grantsPerInterval) &&
+ (nominalGrantInterval == that.nominalGrantInterval) &&
+ (toleratedGrantJitter == that.toleratedGrantJitter) &&
+ (upstreamPeakTrafficRate == that.upstreamPeakTrafficRate) &&
+ (requiredAttributeMask == that.requiredAttributeMask) &&
+ (forbiddenAttributeMask == that.forbiddenAttributeMask) &&
+ (attributeAggregationRuleMask == that.attributeAggregationRuleMask);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + requestTransmissionPolicy;
+ result = 31 * result + unsolicitedGrantSize;
+ result = 31 * result + grantsPerInterval;
+ result = 31 * result + nominalGrantInterval;
+ result = 31 * result + toleratedGrantJitter;
+ result = 31 * result + upstreamPeakTrafficRate;
+ result = 31 * result + requiredAttributeMask;
+ result = 31 * result + forbiddenAttributeMask;
+ result = 31 * result + attributeAggregationRuleMask;
+ 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 int shortToInt(final byte[] data, int start) {
+ return (int)(data[start] << 8 |
+ data[start+1]);
+ }
+
+ 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 DOCSISUGSProfile 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 DOCSISUGSTrafficProfile parse(final byte[] data) {
+ byte env = 0, gpi = 0;
+ int rtp, ugs,ngi,tgj,uptr = 0,ram,fam,aarm;
+
+ env = data[0];
+
+ rtp = byteToInt(data, 4);
+ ugs = shortToInt(data, 8);
+ gpi = data[10];
+ ngi = byteToInt(data, 12);
+ tgj = byteToInt(data, 16);
+ ram = byteToInt(data, 20);
+ fam = byteToInt(data, 24);
+ aarm= byteToInt(data, 28);
+
+ return new DOCSISUGSTrafficProfile(env,rtp,ugs,gpi,ngi,tgj,uptr,ram,fam,aarm);
+ }
+
+ /**
+ * {@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("RequestedTransmissionPolicy: ").append(requestTransmissionPolicy);
+ sb.append(variableSeparator);
+ sb.append("UnsolicitedGrantSize: ").append(unsolicitedGrantSize);
+ sb.append(variableSeparator);
+ sb.append("GrantsPerInterval: ").append(grantsPerInterval);
+ sb.append(variableSeparator);
+ sb.append("NominalGrantInterval: ").append(nominalGrantInterval);
+ sb.append(variableSeparator);
+ sb.append("ToleratedGrantJitter: ").append(toleratedGrantJitter);
+ sb.append(variableSeparator);
+ sb.append("UpstreamPeakTrafficRate: ").append(upstreamPeakTrafficRate);
+ sb.append(variableSeparator);
+ sb.append("RequiredAttributeMask: ").append(requiredAttributeMask);
+ sb.append(variableSeparator);
+ sb.append("ForbiddenAttributeMask: ").append(forbiddenAttributeMask);
+ sb.append(variableSeparator);
+ sb.append("AttributeAggregationRuleMask: ").append(attributeAggregationRuleMask);
+
+ return sb.toString();
+ }
+}
import org.pcmm.gates.impl.BestEffortService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.pcmm.utils.PCMMUtils;
import java.util.ArrayList;
import java.util.Arrays;
break;
case TRAFFIC_PROFILE:
switch (sType) {
+ case DOCSISUGSTrafficProfile.STYPE:
+ trafficProfile = DOCSISUGSTrafficProfile.parse(dataBuffer);
+ break;
case DOCSISServiceClassNameTrafficProfile.STYPE:
trafficProfile = DOCSISServiceClassNameTrafficProfile.parse(dataBuffer);
break;
case DOCSISFlowSpecTrafficProfile.STYPE:
trafficProfile = DOCSISFlowSpecTrafficProfile.parse(dataBuffer);
break;
+ case DOCSISRTPTrafficProfile.STYPE:
+ trafficProfile = DOCSISRTPTrafficProfile.parse(dataBuffer);
+ break;
case BestEffortService.STYPE:
trafficProfile = BestEffortService.parse(dataBuffer);
break;
import org.pcmm.gates.ISubscriberID;
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.DOCSISRTPTrafficProfile;
+import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
+import org.pcmm.gates.impl.DOCSISUGSTrafficProfile;
import org.pcmm.gates.impl.GateID;
import org.pcmm.gates.impl.GateSpec;
import org.pcmm.gates.impl.GateState;
import org.umu.cops.stack.COPSClientSI;
import org.umu.cops.stack.COPSContext;
import org.umu.cops.stack.COPSData;
-import org.umu.cops.stack.COPSDecision;
import org.umu.cops.stack.COPSDecision.DecisionFlag;
+import org.umu.cops.stack.COPSDecision;
import org.umu.cops.stack.COPSDecisionMsg;
import org.umu.cops.stack.COPSException;
import org.umu.cops.stack.COPSHandle;
import org.umu.cops.stack.COPSObjHeader.CNum;
import org.umu.cops.stack.COPSObjHeader.CType;
import org.umu.cops.stack.COPSReportMsg;
-import org.umu.cops.stack.COPSReportType;
import org.umu.cops.stack.COPSReportType.ReportType;
+import org.umu.cops.stack.COPSReportType;
/**
* PEP State manager implementation for use in a CMTS.
}
else {
// 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());
+ if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
+ } else if (gateReq.getTrafficProfile() instanceof DOCSISFlowSpecTrafficProfile) {
+ } else if (gateReq.getTrafficProfile() instanceof DOCSISUGSTrafficProfile) {
+ } else if (gateReq.getTrafficProfile() instanceof DOCSISRTPTrafficProfile) {
+ } else {
+ logger.error("Currently only DOCSIS Service Class Name, Flow Spec, RTP or UGS Traffic Profiles are supported: attempted ",
+ gateReq.getTrafficProfile().getClass().getName());
return new PCMMError(ErrorCode.OTHER_UNSPECIFIED);
}
+
// ServiceClassName match check
- else if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
+
+ if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
final DOCSISServiceClassNameTrafficProfile scnTrafficProfile =
(DOCSISServiceClassNameTrafficProfile) gateReq.getTrafficProfile();
final String subId = gateReq.getSubscriberID().getSourceIPAddress().getHostAddress();
final Direction gateDir = gateReq.getGateSpec().getDirection();
-
- final String serviceClassName;
+ String serviceClassName = null;
+
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 if (gateReq.getTrafficProfile() instanceof DOCSISUGSTrafficProfile) {
+ serviceClassName = null;
+ logger.info("Processing UGS gate set with direction [" + gateDir + ']');
+ } else if (gateReq.getTrafficProfile() instanceof DOCSISRTPTrafficProfile) {
+ serviceClassName = null;
+ logger.info("Processing RTP gate set with direction [" + gateDir + ']');
} else {
serviceClassName = null;
logger.error("Unknown Traffic Profile type: " + gateReq.getTrafficProfile().getClass().getName());
final IPCMMError error = getGateError(gateReq);
gateReq.setError(error);
- logger.info("Processing gate set request [" + serviceClassName + "] with direction [" + gateDir + ']');
-
// Set response
final ITransactionID.GateCommandType gateCommand = (error == null)
description "This module contains the PCMM Converged Cable Access Platform (CCAP) definitions";
organization "OpenDaylight Project";
+ revision 2017-01-25 {
+ description "Added support for UGS and RTP traffic profiles";
+ }
revision 2016-12-19 {
description "Added support for flow-spec traffic profile";
}
description "Initial revision of PCMM CCAP definitions";
}
-
// Global typedefs
+
+ typedef s-type {
+ type uint8;
+ description "RSVP sub-type per PCMM specification.";
+ }
+
typedef service-class-name {
type string { length "2..16"; }
description "The Service Class Name is MUST be 2-16 bytes.";
}
typedef service-flow-direction {
type enumeration {
- enum ds {
+ enum ds {
value "0";
description "Downstream service flow.";
- }
- enum us {
+ }
+ enum us {
value "1";
description "Upstream service flow.";
- }
- }
+ }
+ }
description "This value represents the service flow direction.";
- }
+ }
- typedef classifier-activation-state {
+ typedef classifier-activation-state {
type enumeration {
- enum inactive {
- value 0;
- description "Inactive";
- }
- enum active {
- value 1;
- description "Active";
- }
+ enum inactive {
+ value 0;
+ description "Inactive";
+ }
+ enum active {
+ value 1;
+ description "Active";
+ }
}
description "Instructs the CMTS to either activate or inactivate the classifier";
- }
+ }
+ typedef classifier-action {
+ type enumeration {
+ enum add {
+ value 0;
+ description "Add classifier";
+ }
+ enum replace {
+ value 1;
+ description "Replace classifier";
+ }
+ enum delete {
+ value 2;
+ description "Delete classifier";
+ }
+ enum nochange {
+ value 3;
+ description "No change to classifier";
+ }
+ }
+ description "Instructs the CMTS to add,replace,delete or leave the classifier";
+ }
- typedef tp-protocol {
- type uint16 {range "0..257";}
+ typedef tp-protocol {
+ type uint16 {range "0..257";}
description "This value represents the IP transport protocol (or Next Header) where 256 is any protocol and 257 is TCP or UDP";
- }
- typedef tos-byte {
- type uint8;
- description "TOS/TC byte or mask";
- }
+ }
+ typedef tos-byte {
+ type uint8;
+ description "TOS/TC byte or mask";
+ }
identity ccap-context {
description "Identity used to mark ccap context";
}
- identity app-context {
- description "Identity used to mark app context";
- }
-
// CCAP devices
container ccaps {
list ccap {
}
}
+ identity app-context {
+ description "Identity used to mark app context";
+ }
+
+ container apps {
+ list app {
+ key "id";
+ ext:context-instance "app-context";
+ leaf "id" {
+ type string;
+ mandatory true;
+ }
+ }
+ }
+
grouping ccap-connection {
- leaf ipAddress {
- type inet:ip-address;
- description "IP Address of CCAP";
- mandatory true;
- }
- leaf port {
- type inet:port-number;
+ leaf ipAddress {
+ type inet:ip-address;
+ description "IP Address of CCAP";
+ mandatory true;
+ }
+ leaf port {
+ type inet:port-number;
description "COPS session TCP port number";
- default 3918;
+ default 3918;
}
leaf connected {
config false;
type string;
description "Operational errors";
}
-// leaf idle-detect {
-// type uint8;
-// description "COPS connection idle timer (seconds)";
-// mandatory true;
-// }
-// leaf isIdle {
-// config false;
-// type boolean;
-// description "COPS connection idle state";
-// mandatory true;
-// }
-
leaf timestamp {
config false;
type yang:date-and-time;
mandatory true;
}
leaf am-type {
- type uint16;
+ type uint16;
description "Application Manager Type -- unique for this AM tag";
mandatory true;
}
}
grouping gate-operational-attributes {
- leaf gatePath {
- config false;
- type string;
- description "FQ Gate path app/subscriber/gate";
- mandatory true;
- }
- leaf ccapId {
- config false;
- type string;
- description "CCAP Identity";
- mandatory true;
- }
- leaf cops-gate-state {
- config false;
- type string;
- description "Operational COPS Gate state";
- mandatory true;
- }
- leaf cops-gate-time-info {
- config false;
- type string;
- description "Operational COPS Gate time info";
- mandatory true;
- }
- leaf cops-gate-usage-info {
- config false;
- type string;
- description "Operational COPS gate usage info";
- mandatory true;
+ leaf gatePath {
+ config false;
+ type string;
+ description "FQ Gate path app/subscriber/gate";
+ mandatory true;
+ }
+ leaf ccapId {
+ config false;
+ type string;
+ description "CCAP Identity";
+ mandatory true;
+ }
+ leaf cops-gate-state {
+ config false;
+ type string;
+ description "Operational COPS Gate state";
+ mandatory true;
+ }
+ leaf cops-gate-time-info {
+ config false;
+ type string;
+ description "Operational COPS Gate time info";
+ mandatory true;
+ }
+ leaf cops-gate-usage-info {
+ config false;
+ type string;
+ description "Operational COPS gate usage info";
+ mandatory true;
}
leaf cops-gateId {
config false;
type uint8;
description "Classifier ID and Gate classifier priority";
}
- choice classifier-choice {
- case qos-classifier-choice {
+ choice classifier-choice {
+ case qos-classifier-choice {
uses pcmm-qos-classifier;
}
case ext-classifier-choice {
uses pcmm-qos-ext-classifier;
- }
- case ipv6-classifier-choice {
- uses pcmm-qos-ipv6-classifier;
- }
- }
- }
+ }
+ case ipv6-classifier-choice {
+ uses pcmm-qos-ipv6-classifier;
+ }
+ }
+ }
}
}
grouping pcmm-qos-gate-attributes {
- uses pcmm-qos-gate-spec;
- uses pcmm-qos-traffic-profile;
- uses classifier-attributes;
+ uses pcmm-qos-gate-spec;
+ uses pcmm-qos-traffic-profile;
+ uses classifier-attributes;
}
grouping pcmm-qos-gate-spec {
grouping pcmm-qos-traffic-profile {
container traffic-profile {
choice traffic-profile-choice {
+ case ugs-choice {
+ uses pcmm-ugs-profile;
+ }
+ case rtp-choice {
+ uses pcmm-rtp-profile;
+ }
case service-class-name-choice {
uses pcmm-serviceclass-name-profile;
}
}
}
- grouping pcmm-serviceclass-name-profile {
- container service-class-name-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 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 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 {
+ grouping pcmm-ugs-profile {
+ container ugs-profile {
+ leaf request-transmission-policy {
+ type uint32;
+ description "Request Transmission Policy";
+ mandatory true;
+ }
+ leaf unsolicited-grant-size {
+ type uint32;
+ description "Unsolicited Grant Size";
+ mandatory true;
+ }
+ leaf grants-per-interval {
+ type uint8;
+ description "Grants per Interval";
+ mandatory true;
+ }
+ leaf nominal-grant-interval {
+ type uint32;
+ description "Nominal Grant Interval";
+ mandatory true;
+ }
+ leaf tolerated-grant-jitter {
+ type uint32;
+ description "Tolerated Grant Jitter";
+ mandatory true;
+ }
+ leaf upstream-peak-traffic-rate {
+ type uint32;
+ description "Upstream Peak Traffic Interval";
+ mandatory true;
+ }
+ leaf required-attribute-mask {
+ type uint32;
+ description "Required Attribute Mask";
+ mandatory true;
+ }
+ leaf forbidden-attribute-mask {
+ type uint32;
+ description "Forbidden Attribute Mask";
+ mandatory true;
+ }
+ leaf attribute-aggregation-rule-mask {
+ type uint32;
+ description "Attribute Aggregation Rule Mask";
+ mandatory true;
+ }
+ leaf minimum-buffer {
+ type uint32;
+ description "Minimum Buffer";
+ }
+ leaf target-buffer {
+ type uint32;
+ description "Forbidden Attribute Mask";
+ }
+ leaf maximum-buffer {
+ type uint32;
+ description "Forbidden Attribute Mask";
+ }
+ }
+ }
+
+ grouping pcmm-rtp-profile {
+ container rtp-profile {
+ leaf request-transmission-policy {
+ type uint32;
+ description "Request Transmission Policy";
+ mandatory true;
+ }
+ leaf maximum-sustained-traffic-rate {
+ type uint32;
+ description "Maximum Sustained Traffic Rate";
+ default 0;
+ }
+ leaf maximum-traffic-burst {
+ type uint32;
+ description "Maximum Traffic Burst";
+ default 3044;
+ }
+ leaf minimum-reserved-traffic-rate {
+ type uint32;
+ description "Minimum Reserved Traffic Rate";
+ default 0;
+ }
+ leaf amrtr-packet-size {
+ type uint16;
+ description "Assumed Minimum Reserved Traffic Rate Packet Size";
+ default 0;
+ }
+ leaf maximum-concatenated-burst {
+ type uint16;
+ description "Maximum Concatenated Burst";
+ default 1522;
+ }
+ leaf nominal-polling-interval {
+ type uint32;
+ description "Nominal Polling Interval";
+ mandatory true;
+ }
+ leaf tolerated-poll-jitter {
+ type uint32;
+ description "Tolerated Poll Jitter";
+ default 0;
+ }
+ leaf upstream-peak-traffic-rate {
+ type uint32;
+ description "Upstream Peak Traffic Rate";
+ mandatory true;
+ }
+ leaf required-attribute-mask {
+ type uint32;
+ description "Required Attribute Mask";
+ mandatory true;
+ }
+ leaf forbidden-attribute-mask {
+ type uint32;
+ description "Forbidden Attribute Mask";
+ mandatory true;
+ }
+ leaf attribute-aggregation-rule-mask {
+ type uint32;
+ description "Attribute Aggregation Rule Mask";
+ mandatory true;
+ }
+ leaf minimum-buffer {
+ type uint32;
+ description "Minimum Buffer";
+ }
+ leaf target-buffer {
+ type uint32;
+ description "Forbidden Attribute Mask";
+ }
+ leaf maximum-buffer {
+ type uint32;
+ description "Forbidden Attribute Mask";
+ }
+ }
+ }
+
+ grouping tp-port-match-ranges {
leaf srcPort-start {
type inet:port-number;
description "TCP/UDP source port range start.";
+ mandatory true;
}
leaf srcPort-end {
type inet:port-number;
description "TCP/UDP source port range end.";
+ mandatory true;
}
leaf dstPort-start {
type inet:port-number;
description "TCP/UDP destination port range start.";
+ mandatory true;
}
leaf dstPort-end {
type inet:port-number;
description "TCP/UDP destination port range end.";
+ mandatory true;
}
}
leaf srcIp {
type inet:ipv4-address;
description "Source IPv4 address (exact match)";
+ mandatory true;
}
leaf dstIp {
type inet:ipv4-address;
description "Destination IPv4 address (exact match)";
+ mandatory true;
+ }
+ leaf tos-byte {
+ type tos-byte;
+ description "TOS/DSCP match";
+ mandatory true;
}
- leaf tos-byte {
- type tos-byte;
- description "TOS/DSCP match";
- }
- leaf tos-mask {
- type tos-byte;
- description "TOS/DSCP mask";
- }
- leaf protocol {
+ leaf tos-mask {
+ type tos-byte;
+ description "TOS/DSCP mask";
+ mandatory true;
+ }
+ leaf protocol {
type tp-protocol;
description "IPv4 transport protocol";
+ mandatory true;
}
- leaf srcPort {
+ leaf srcPort {
type inet:port-number;
description "TCP/UDP source port (exact match).";
- }
- leaf dstPort {
+ mandatory true;
+ }
+ leaf dstPort {
type inet:port-number;
description "TCP/UDP destination port (exact match).";
- }
- leaf priority {
- type uint8;
- description "Priority";
- default 64;
- }
- }
+ mandatory true;
+ }
+ leaf priority {
+ type uint8;
+ description "Priority";
+ default 64;
+ }
+ }
}
grouping pcmm-qos-ext-classifier {
leaf srcIp {
type inet:ipv4-address;
description "Source IPv4 address match";
+ mandatory true;
}
leaf srcIpMask {
type inet:ipv4-address;
description "Source IPv4 mask";
+ mandatory true;
}
leaf dstIp {
type inet:ipv4-address;
description "Destination IPv4 address match";
+ mandatory true;
}
leaf dstIpMask {
type inet:ipv4-address;
description "Destination IPv4 mask";
+ mandatory true;
+ }
+ leaf tos-byte {
+ type tos-byte;
+ description "TOS/DSCP match";
+ mandatory true;
}
- leaf tos-byte {
- type tos-byte;
- description "TOS/DSCP match";
- }
- leaf tos-mask {
- type tos-byte;
- description "TOS/DSCP mask";
- }
- leaf protocol {
+ leaf tos-mask {
+ type tos-byte;
+ description "TOS/DSCP mask";
+ mandatory true;
+ }
+ leaf protocol {
type tp-protocol;
description "IPv4 transport protocol";
+ mandatory true;
}
- uses tp-port-match-ranges;
leaf priority {
- type uint8;
- description "Priority";
- default 64;
+ type uint8;
+ description "Priority";
+ default 64;
}
+ uses tp-port-match-ranges;
leaf activation-state {
- type classifier-activation-state;
- description "Activation state";
- default active;
+ type classifier-activation-state;
+ description "Activation state";
+ default active;
}
-
- }
+ leaf action {
+ type classifier-action;
+ description "Action";
+ default add;
+ }
+ }
}
grouping pcmm-qos-ipv6-classifier {
leaf srcIp6 {
type inet:ipv6-prefix;
description "Source IPv6 prefix match in 'address/len' notation";
+ mandatory true;
}
leaf dstIp6 {
type inet:ipv6-prefix;
description "Destination IPv6 prefix match in 'address/len' notation";
+ mandatory true;
}
- leaf tc-low {
- type tos-byte;
- description "TC low range match";
- }
- leaf tc-high {
- type tos-byte;
- description "TC high range match";
- }
- leaf tc-mask {
- type tos-byte;
- description "TC mask";
- }
- leaf next-hdr {
+ leaf tc-low {
+ type tos-byte;
+ description "TC low range match";
+ mandatory true;
+ }
+ leaf tc-high {
+ type tos-byte;
+ description "TC high range match";
+ mandatory true;
+ }
+ leaf tc-mask {
+ type tos-byte;
+ description "TC mask";
+ mandatory true;
+ }
+ leaf next-hdr {
type tp-protocol;
description "IPv6 Next Header";
+ mandatory true;
}
leaf flow-label {
type uint32 {
range "0 .. 1048575";
}
description "IPv6 Flow Label (20 bits)";
+ mandatory true;
}
- uses tp-port-match-ranges;
leaf priority {
- type uint8;
- description "Priority";
- default 64;
+ type uint8;
+ description "Priority";
+ default 64;
}
+ uses tp-port-match-ranges;
leaf activation-state {
- type classifier-activation-state;
- description "Activation state";
- default active;
+ type classifier-activation-state;
+ description "Activation state";
+ default active;
}
- }
+ leaf action {
+ type classifier-action;
+ description "Action";
+ default add;
+ }
+ }
}
- //RPCs
+ //RPCs
rpc ccap-set-connection {
- input {
+ input {
leaf ccapId {
- type instance-identifier;
- ext:context-reference ccap-context;
- }
- container connection {
- leaf connected {
- type boolean;
- description "COPS session state";
- }
-// leaf idle-detect {
-// type uint8;
-// description "COPS connection idle timer";
-// }
- }
- }
- output {
- container ccap {
- leaf ccapId {
- type string;
- }
- container connection {
- uses ccap-connection;
- }
- }
- leaf response {
- type string;
- }
- leaf timestamp {
- type yang:date-and-time;
- description "RPC timestamp";
- }
- }
+ type "instance-identifier";
+ ext:context-reference "ccap-context";
+ }
+ container connection {
+ leaf connected {
+ type boolean;
+ description "COPS session state";
+ }
+ }
+ }
+ output {
+ container ccap {
+ leaf ccapId {
+ type string;
+ }
+ container connection {
+ uses ccap-connection;
+ }
+ }
+ leaf response {
+ type string;
+ }
+ leaf timestamp {
+ type yang:date-and-time;
+ description "RPC timestamp";
+ }
+ }
}
rpc ccap-poll-connection {
- input {
+ input {
leaf ccapId {
- type instance-identifier;
- ext:context-reference ccap-context;
- }
- }
- output {
- container ccap {
- leaf ccapId {
- type string;
- }
- container connection {
- uses ccap-connection;
- }
- }
- leaf response {
- type string;
- }
- leaf timestamp {
- type yang:date-and-time;
- description "RPC timestamp";
- }
- }
+ type "instance-identifier";
+ ext:context-reference "ccap-context";
+ }
+ }
+ output {
+ container ccap {
+ leaf ccapId {
+ type string;
+ }
+ container connection {
+ uses ccap-connection;
+ }
+ }
+ leaf response {
+ type string;
+ }
+ leaf timestamp {
+ type yang:date-and-time;
+ description "RPC timestamp";
+ }
+ }
}
- rpc qos-poll-gates {
- input {
+ rpc qos-poll-gates {
+ input {
leaf appId {
- type instance-identifier;
- ext:context-reference app-context;
- }
- leaf subscriberId {
- type string;
- description "Subscriber Identity -- must be a CM or CPE IP address";
- }
- leaf gateId {
- type string;
- description "Qos Gate Identity";
- }
- }
- output {
- container gate {
- uses gate-operational-attributes;
- }
- leaf response {
- type string;
- }
- leaf timestamp {
- type yang:date-and-time;
- description "RPC timestamp";
- }
- }
+ type instance-identifier;
+ ext:context-reference app-context;
+ }
+ leaf subscriberId {
+ type string;
+ description "Subscriber Identity -- must be a CM or CPE IP address";
+ }
+ leaf gateId {
+ type string;
+ description "Qos Gate Identity";
+ }
+ }
+ output {
+ container gate {
+ uses gate-operational-attributes;
+ }
+ leaf response {
+ type string;
+ }
+ leaf timestamp {
+ type yang:date-and-time;
+ description "RPC timestamp";
+ }
+ }
}
}
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
-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.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.ugs.profile.UgsProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.rtp.profile.RtpProfile;
import org.pcmm.gates.IClassifier;
import org.pcmm.gates.IClassifier.Protocol;
import org.pcmm.gates.IExtendedClassifier;
import org.pcmm.gates.impl.AMID;
import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
import org.pcmm.gates.impl.DOCSISFlowSpecTrafficProfile;
+import org.pcmm.gates.impl.DOCSISUGSTrafficProfile;
+import org.pcmm.gates.impl.DOCSISRTPTrafficProfile;
import org.pcmm.gates.impl.GateID;
import org.pcmm.gates.impl.GateState;
import org.pcmm.gates.impl.GateTimeInfo;
import org.pcmm.gates.impl.SessionClassID;
import org.pcmm.gates.impl.SubscriberID;
import org.pcmm.gates.impl.TransactionID;
+import org.pcmm.utils.PCMMUtils;
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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.RtpChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.UgsChoice;
/**
* Build PCMM gate requests from API QoS Gate objects
subscriberID = new SubscriberID(qosSubId);
}
- public void setGateSpec(final GateSpec qosGateSpec, final ServiceFlowDirection scnDirection) {
+ public void setGateId(int gateId) {
+ gateID = new GateID(gateId);
+ }
+
+ public void setGateSpec(final GateSpec qosGateSpec) {
- final ServiceFlowDirection qosDir;
- if (scnDirection != null) {
- qosDir = scnDirection;
- } else {
- if (qosGateSpec.getDirection() != null) {
- qosDir = qosGateSpec.getDirection();
- } else {
- // TODO - determine if this is a valid default value
- qosDir = ServiceFlowDirection.Ds;
- }
- }
+ final ServiceFlowDirection qosDir = qosGateSpec.getDirection();
+ // convert to PCMM API Type
final Direction gateDir;
if (qosDir == ServiceFlowDirection.Ds) {
gateDir = Direction.DOWNSTREAM;
gateDir = Direction.UPSTREAM;
}
- // DSCP/TOS Overwrite
- final byte dscptos;
+ final byte dscptos = 1;
final byte gateTosMask;
- final TosByte tosOverwrite = qosGateSpec.getDscpTosOverwrite();
- if (tosOverwrite != null) {
- dscptos = 1;
- TosByte tosMask = qosGateSpec.getDscpTosMask();
- if (tosMask != null) {
- gateTosMask = tosMask.getValue().byteValue();
- } else {
- gateTosMask = (byte) 0xff;
- }
+ TosByte tosMask = qosGateSpec.getDscpTosMask();
+ if (tosMask != null) {
+ gateTosMask = tosMask.getValue().byteValue();
} else {
- // TODO - These values appear to be required
- dscptos = 0;
- gateTosMask = 0;
+ gateTosMask = (byte) 0xff;
}
-
- byte sessionClassId = 0;
- if (qosGateSpec.getSessionClassId() != null) {
- sessionClassId = (byte)(qosGateSpec.getSessionClassId() & 255);
+
+ java.lang.Short scid = qosGateSpec.getSessionClassId();
+ byte bscid = 0;
+ if (scid != null) {
+ bscid = (byte)(qosGateSpec.getSessionClassId() & 0x00ff);
}
-
- short inactivityTimer = 300;
- if (qosGateSpec.getInactivityTimer() != null) {
- inactivityTimer = (short)(qosGateSpec.getInactivityTimer() & 65535);
+
+ java.lang.Long inactivity = qosGateSpec.getInactivityTimer();
+ short sinactivity = 300;
+ if (inactivity != null) {
+ sinactivity = inactivity.shortValue();
}
-
+
gateSpec = new org.pcmm.gates.impl.GateSpec(gateDir, dscptos, gateTosMask,
- new SessionClassID(sessionClassId),
- (short)1, (short)300, inactivityTimer, (short)0);
+ new SessionClassID(bscid),
+ (short)1,(short)300,sinactivity,(short)0);
}
public void setTrafficProfile(final TrafficProfile qosTrafficProfile) {
fsp.getRate(),
fsp.getSlackTerm());
}
+ else if (choice instanceof UgsChoice) {
+ UgsProfile ugsp = ((UgsChoice)choice).getUgsProfile();
+ trafficProfile = new DOCSISUGSTrafficProfile(ugsp.getRequestTransmissionPolicy(),
+ ugsp.getUnsolicitedGrantSize(),
+ ugsp.getGrantsPerInterval(),
+ ugsp.getNominalGrantInterval(),
+ ugsp.getToleratedGrantJitter(),
+ ugsp.getUpstreamPeakTrafficRate(),
+ ugsp.getRequiredAttributeMask(),
+ ugsp.getForbiddenAttributeMask(),
+ ugsp.getAttributeAggregationRuleMask());
+ }
+ else if (choice instanceof RtpChoice) {
+ RtpProfile rtpp = ((RtpChoice)choice).getRtpProfile();
+ trafficProfile = new DOCSISRTPTrafficProfile(rtpp.getRequestTransmissionPolicy(),
+ rtpp.getMaximumSustainedTrafficRate(),
+ rtpp.getMaximumTrafficBurst(),
+ rtpp.getMinimumReservedTrafficRate(),
+ rtpp.getAmrtrPacketSize().longValue(),
+ rtpp.getMaximumConcatenatedBurst().longValue(),
+ rtpp.getNominalPollingInterval(),
+ rtpp.getToleratedPollJitter(),
+ rtpp.getUpstreamPeakTrafficRate(),
+ rtpp.getRequiredAttributeMask(),
+ rtpp.getForbiddenAttributeMask(),
+ rtpp.getAttributeAggregationRuleMask());
+ }
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.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.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
import org.pcmm.PCMMPdpAgent;
import org.pcmm.PCMMPdpDataProcess;
import org.pcmm.PCMMPdpMsgSender;
import org.umu.cops.prpdp.COPSPdpException;
import org.umu.cops.stack.COPSError;
import org.umu.cops.stack.COPSError.ErrorTypes;
+import java.nio.ByteBuffer;
+
/**
* Class responsible for managing the gates for a single CCAP.
}
}
+ private static long getUnsignedInt(int x) {
+ return x & 0xFFFFFFFFL;
+ }
+
public GateSendStatus sendGateSet(final String gatePathStr, final InetAddress subId, final Gate qosGate) {
GateSendStatus status = new GateSendStatus();
final PCMMGateReqBuilder gateBuilder = new PCMMGateReqBuilder();
gateBuilder.setAmId(ccap.getAmId());
gateBuilder.setSubscriberId(subId);
- gateBuilder.setGateSpec(qosGate.getGateSpec(), null);
+ gateBuilder.setGateSpec(qosGate.getGateSpec());
gateBuilder.setTrafficProfile(qosGate.getTrafficProfile());
gateBuilder.setClassifiers(qosGate.getClassifiers().getClassifierContainer());
+ if (qosGate.getCopsGateId() != null) {
+ long lgate = Long.parseLong(qosGate.getCopsGateId());
+ gateBuilder.setGateId((int)lgate);
+ }
+
+ logger.debug("PCMMService: sendGateSet(): formatting gate");
+
// assemble the final gate request
final PCMMGateReq gateReq = gateBuilder.build();
logger.debug("Gate request ID - " + gateReq.getGateID());
}
} catch (Exception e) {
- logger.error(
- "PCMMService: sendGateSet(): gate response timeout exceeded for " + gatePathStr + '/' + gateReq,
- e);
+ logger.error("PCMMService: sendGateSet(): gate response timeout exceeded for " + gatePathStr + '/' + gateReq,
+ e);
status.setDidSucceed(false);
status.setMessage(String.format("408 Request Timeout - gate response timeout exceeded for %s/%s", ccap.getCcapId(),
- gatePathStr));
+ gatePathStr));
return status;
}
-
if (gateReq.getError() != null) {
gateRequests.remove(gatePathStr);
status.setDidSucceed(false);
- status.setMessage(
- String.format("404 Not Found - sendGateSet for %s/%s returned error - %s", ccap.getCcapId(),
- gatePathStr, gateReq.getError().toString()));
+ status.setMessage(String.format("404 Not Found - sendGateSet for %s/%s returned error - %s", ccap.getCcapId(),
+ gatePathStr, gateReq.getError().toString()));
logger.error("PCMMService: sendGateSet(): returned error: {}", gateReq.getError().toString());
} else {
if (gateReq.getGateID() != null) {
status.setDidSucceed(true);
- status.setCopsGateId(String.format("%08x", gateReq.getGateID().getGateID()));
- status.setMessage(String.format("200 OK - sendGateSet for %s/%s returned GateId %08x",
- ccap.getCcapId(), gatePathStr, gateReq.getGateID().getGateID()) );
- logger.info(String.format("PCMMService: sendGateSet(): returned GateId %08x: ",
- gateReq.getGateID().getGateID()));
+ status.setCopsGateId(String.format("%d", getUnsignedInt(gateReq.getGateID().getGateID())));
+ status.setMessage(String.format("200 OK - sendGateSet for %s/%s returned GateId %d",
+ ccap.getCcapId(), gatePathStr, getUnsignedInt(gateReq.getGateID().getGateID())) );
+ logger.info(String.format("PCMMService: sendGateSet(): returned GateId %d: ",
+ getUnsignedInt(gateReq.getGateID().getGateID())));
} else {
status.setDidSucceed(false);
status.setMessage(
- String.format("404 Not Found - sendGateSet for %s/%s no gateId returned", ccap.getCcapId(),
- gatePathStr));
+ String.format("404 Not Found - sendGateSet for %s/%s no gateId returned", ccap.getCcapId(),
+ gatePathStr));
logger.info("PCMMService: sendGateSet(): no gateId returned:");
}
return false;
} else {
if (gateReq.getGateID() != null) {
- logger.info(String.format("PCMMService: sendGateDelete(): deleted GateId %08x: ",
- gateReq.getGateID().getGateID()));
+ logger.info(String.format("PCMMService: sendGateDelete(): deleted GateId %d: ",
+ getUnsignedInt(gateReq.getGateID().getGateID())));
} else {
logger.error("PCMMService: sendGateDelete(): deleted but no gateId returned");
}
} else {
if (gateReq.getGateID() != null) {
status.setDidSucceed(true);
- status.setCopsGateId(String.format("%08x", gateReq.getGateID().getGateID()));
- //status.setMessage(String.format("200 OK - sendGateInfo for %s/%s returned GateId %08x",
- // ccap.getCcapId(), gatePathStr, gateReq.getGateID().getGateID()) );
+ status.setCopsGateId(String.format("%d", getUnsignedInt(gateReq.getGateID().getGateID())));
final IGateState gateState = gateReq.getGateState();
status.setCopsGateState(gateState.getGateState().toString());
status.setCopsGateStateReason(gateState.getGateStateReason().toString());
status.setCopsGateTimeInfo(String.format("%d", gateReq.getGateTimeInfo().getGateTimeInfo()));
status.setCopsGateUsageInfo(String.format("%d", gateReq.getGateUsageInfo().getGateUsageInfo()));
- logger.info(String.format("PCMMService: sendGateInfo(): returned GateId %08x: ",
- gateReq.getGateID().getGateID()));
+ logger.info(String.format("PCMMService: sendGateInfo(): returned GateId %d: ",
+ getUnsignedInt(gateReq.getGateID().getGateID())));
} else {
status.setDidSucceed(false);
status.setMessage(
logger.info("CcapClient: sendGateSet(): {}:{} => {}", ipv4, port, gateReq);
try {
pcmmSender.sendGateSet(gateReq);
-
- // TODO - determine if this is the correct place to perform this operation as this currently is the
- // TODO - place where the gate ID can be set on the gateReq object
- // pcmmSender.handleGateReport(pcmmPdp.getSocket());
- } catch (COPSPdpException e) {
- logger.error("CcapClient: sendGateSet(): {}:{} => {} FAILED:", ipv4, port, gateReq, e);
- }
// and save it back to the gateRequest object for gate delete later
gateReq.setGateID(pcmmSender.getGateID());
-
- // TODO - determine why this method is always returning true???
return true;
+ } catch (COPSPdpException e) {
+ logger.error("CcapClient: sendGateSet(): {}:{} => {} FAILED: {}", ipv4, port, gateReq,
+ e.getMessage());
+ return false;
+ }
+ catch (Exception e) {
+ logger.error("CcapClient: sendGateSet(): {}:{} => {} FAILED: {}", ipv4, port, gateReq,
+ e.getMessage());
+ return false;
+ }
}
public Boolean sendGateDelete(final PCMMGateReq gateReq) {
logger.info("CcapClient: sendGateDelete(): {}:{} => {}", ipv4, port, gateReq);
try {
pcmmSender.sendGateDelete(gateReq);
+ return true;
} catch (COPSPdpException e) {
- logger.error("CcapClient: sendGateDelete(): {}:{} => {} FAILED: {}", ipv4, port, gateReq,
- e.getMessage());
+ logger.error("CcapClient: sendGateDelete(): {}:{} => {} FAILED: {}", ipv4, port,
+ gateReq, e.getMessage());
+ return false;
}
- return true;
+ catch (Exception e) {
+ logger.error("CcapClient: sendGateDelete(): {}:{} => {} FAILED: {}", ipv4, port,
+ gateReq, e.getMessage());
+ return false;
}
+ }
public Boolean sendGateInfo(final PCMMGateReq gateReq) {
logger.info("CcapClient: sendGateInfo(): {}:{} => {}", ipv4, port);
try {
pcmmSender.sendGateInfo(gateReq);
+ // and save it back to the gateRequest object for operational sal persistance
+ gateReq.setGateID(pcmmSender.getGateID());
+ return true;
} catch (COPSPdpException e) {
logger.error("CcapClient: sendGateInfo(): {}:{} => {} FAILED: {}", ipv4, port,
- e.getMessage());
+ gateReq, e.getMessage());
+ return false;
}
- return true;
+ catch (Exception e) {
+ logger.error("CcapClient: sendGateInfo(): {}:{} => {} FAILED: {}", ipv4, port,
+ gateReq, e.getMessage());
+ return false;
}
}
}
+}
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.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.yang.gen.v1.urn.packetcable.rev170125.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.serviceclass.name.profile.ServiceClassNameProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.AppContext;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.CcapContext;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.CcapPollConnectionInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.CcapPollConnectionOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.CcapPollConnectionOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.CcapSetConnectionInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.CcapSetConnectionOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.CcapSetConnectionOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.PacketcableService;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.Qos;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.QosPollGatesInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.QosPollGatesOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.QosPollGatesOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccaps.CcapBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.AppBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.AppKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.SubscribersBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.SubscriberKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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;
}
DateAndTime connectionDateAndTime = getNowTimeStamp();
- org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.ccap.ConnectionBuilder
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.set.connection.output.ccap.ConnectionBuilder
connectionRpcOutput =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.ccap.ConnectionBuilder()
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.set.connection.output.ccap.ConnectionBuilder()
.setConnected(effectiveIsConnected)
.setError(outputError)
.setTimestamp(connectionDateAndTime);
- 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(
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.set.connection.output.CcapBuilder ccapRpcOutput =
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.poll.connection.output.ccap.ConnectionBuilder
connectionRpcOutput =
- new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder();
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder()
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.poll.connection.output.ccap.ConnectionBuilder()
.setConnected(effectiveIsConnected)
.setError(outputError)
.setTimestamp(connectionDateAndTime);
DateAndTime rpcDateAndTime = getNowTimeStamp();
- 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(
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.poll.connection.output.CcapBuilder ccapRpcOutput =
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.poll.connection.output.CcapBuilder().setCcapId(
ccapId).setConnection(connectionRpcOutput.build());
CcapPollConnectionOutputBuilder outputBuilder =
String rpcResponse = null;
- 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();
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.qos.poll.gates.output.GateBuilder gateOutputBuilder =
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.qos.poll.gates.output.GateBuilder();
GateBuilder gateBuilder = new GateBuilder();
@Override
public void run() {
- 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();
+ org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.qos.poll.gates.output.GateBuilder gateOutputBuilder =
+ new org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.RtpChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.UgsChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
/**
* @author rvail
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";
+ private static final String UGS = "ugs-profile";
+ private static final String RTP = "rtp-profile";
@Override
protected void doValidate(final TrafficProfile trafficProfile, final Extent extent) {
mustExist(((ServiceClassNameChoice)trafficProfile.getTrafficProfileChoice()).getServiceClassNameProfile().getServiceClassName(), SCN);
} else if (trafficProfile.getTrafficProfileChoice() instanceof FlowSpecChoice) {
mustExist(((FlowSpecChoice)trafficProfile.getTrafficProfileChoice()).getFlowSpecProfile(), SCP);
+ } else if (trafficProfile.getTrafficProfileChoice() instanceof RtpChoice) {
+ mustExist(((RtpChoice)trafficProfile.getTrafficProfileChoice()).getRtpProfile(), RTP);
+ } else if (trafficProfile.getTrafficProfileChoice() instanceof UgsChoice) {
+ mustExist(((UgsChoice)trafficProfile.getTrafficProfileChoice()).getUgsProfile(), UGS);
} 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.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.rev170125.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ipv6.classifier.Ipv6Classifier;
/**
* @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.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.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
import org.pcmm.PCMMPdpAgent;
import org.pcmm.gates.IPCMMGate;
import org.pcmm.rcd.IPCMMClient;
import org.pcmm.rcd.impl.CMTS;
import org.pcmm.rcd.impl.CMTSConfig;
import org.umu.cops.stack.COPSClientSI;
-import org.umu.cops.stack.COPSContext;
import org.umu.cops.stack.COPSContext.RType;
+import org.umu.cops.stack.COPSContext;
import org.umu.cops.stack.COPSData;
-import org.umu.cops.stack.COPSDecision;
import org.umu.cops.stack.COPSDecision.Command;
import org.umu.cops.stack.COPSDecision.DecisionFlag;
+import org.umu.cops.stack.COPSDecision;
import org.umu.cops.stack.COPSDecisionMsg;
import org.umu.cops.stack.COPSHandle;
import org.umu.cops.stack.COPSMsg;
final ServiceClassName scn =
((ServiceClassNameChoice)gateReq.getTrafficProfile().getTrafficProfileChoice()).getServiceClassNameProfile().getServiceClassName();
if (scn != null) {
- gateBuilder.setGateSpec(gateReq.getGateSpec(), direction);
+ final GateSpecBuilder gateSpecBuilder = new GateSpecBuilder();
+ gateSpecBuilder.setDirection(direction);
+ gateSpecBuilder.setDscpTosMask(gateReq.getGateSpec().getDscpTosMask());
+ gateSpecBuilder.setDscpTosOverwrite(gateReq.getGateSpec().getDscpTosOverwrite());
+ gateSpecBuilder.setSessionClassId(gateReq.getGateSpec().getSessionClassId());
+ gateSpecBuilder.setInactivityTimer(gateReq.getGateSpec().getInactivityTimer());
+ final GateSpec gateSpec = gateSpecBuilder.build();
+ gateBuilder.setGateSpec(gateSpec);
} else {
// not an SCN gate
- gateBuilder.setGateSpec(gateReq.getGateSpec(), null);
+ gateBuilder.setGateSpec(gateReq.getGateSpec());
}
gateBuilder.setTrafficProfile(gateReq.getTrafficProfile());
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.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccaps.Ccap;
/**
* @author rvail
import org.junit.Test;
import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider;
-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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ServiceClassName;
-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.rev170125.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapsBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.CcapsBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.AppsBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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.rev170125.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.serviceclass.name.profile.ServiceClassNameProfileBuilder;
/**
* @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.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.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.rev161219.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainerBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.classifier.attributes.ClassifiersBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ClassifierActivationState;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.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.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;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.ClassifierActivationState;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170125.pcmm.qos.ipv6.classifier.Ipv6ClassifierBuilder;
/**
* @author rvail