Added FlowSpec Traffic Profile feature 82/49782/2
authorJeffrey Pedigo <jeff@appliedbroadband.com>
Fri, 23 Dec 2016 19:18:31 +0000 (12:18 -0700)
committerJeffrey Pedigo <jeff@appliedbroadband.com>
Thu, 12 Jan 2017 18:50:24 +0000 (11:50 -0700)
Bug: 7109

Change-Id: Ie091b280c12688e682938848e163fff5a4c35931
Signed-off-by: Jeffrey Pedigo <jeff@appliedbroadband.com>
51 files changed:
packetcable-driver/src/main/java/org/pcmm/gates/impl/DOCSISFlowSpecTrafficProfile.java [new file with mode: 0644]
packetcable-driver/src/main/java/org/pcmm/gates/impl/PCMMGateReq.java
packetcable-emulator/src/main/java/org/pcmm/rcd/impl/CmtsPepReqStateMan.java
packetcable-policy-model/src/main/yang/packetcable.yang
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/PCMMGateReqBuilder.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/PCMMService.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/PacketcableProvider.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/CcapsValidatorProviderFactory.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactory.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/AmIdValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapsValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/ConnectionValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppsValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscriberValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierChoiceValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierContainerValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ExtClassifierValidator.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/Ipv6ClassifierValidator.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/PCMMServiceTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/DataValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/CcapsValidatorProviderFactoryTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactoryTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/ValidatorProviderFactoryImplTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/ValidatorProviderImplTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/AmIdValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapsValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/ConnectionValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppsValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscriberValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierChoiceValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierContainerValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ExtClassifierValidatorTest.java
packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/Ipv6ClassifierValidatorTest.java

diff --git a/packetcable-driver/src/main/java/org/pcmm/gates/impl/DOCSISFlowSpecTrafficProfile.java b/packetcable-driver/src/main/java/org/pcmm/gates/impl/DOCSISFlowSpecTrafficProfile.java
new file mode 100644 (file)
index 0000000..910c94a
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+ * Copyright (c) 2016 Applied Broadband, Inc. All Rights Reserved
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.pcmm.gates.impl;
+
+import org.pcmm.base.impl.PCMMBaseObject;
+import org.pcmm.gates.ITrafficProfile;
+import org.pcmm.utils.PCMMUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.nio.ByteBuffer;
+
+/**
+ * The DOCSIS Flow Spec object defines the Flow Spec Traffic Profile of a Gate.
+ *
+ */
+public class DOCSISFlowSpecTrafficProfile extends PCMMBaseObject implements ITrafficProfile {
+
+    private final Logger logger = LoggerFactory.getLogger(DOCSISFlowSpecTrafficProfile.class);
+    public static final byte STYPE = 1;
+    public static final byte SERVICE_NUMBER = 2;
+
+    /**
+     * The envelope
+     */
+    private final byte envelope;
+    private final int tokenBucketRate;
+    private final int tokenBucketSize;
+    private final int peakDataRate;
+    private final int minimumPolicedUnit;
+    private final int maximumPacketSize;
+    private final int rate;
+    private final int slackTerm;
+    
+    /**
+     * Constructor using the default envelope values
+     * @param tokenBucketRate - Token Bucket Rate value [r]
+     * @param tokenBucketSize - Token Bucket Size value [b]
+     * @param peakDataRate - Peak Data Rate value [p]
+     * @param minimumPolicedUnit - Minimum Policed Unit value [m]
+     * @param maximumPacketSize - Maximum Packet Size value [M]
+     * @param rate - Rate value [R]
+     * @param slackTerm - Slack Term value [S]
+     */
+    public DOCSISFlowSpecTrafficProfile(final int tokenBucketRate,
+                                        final int tokenBucketSize,
+                                        final int peakDataRate,
+                                        final int minimumPolicedUnit,
+                                        final int maximumPacketSize,
+                                        final int rate,
+                                        final int slackTerm ) {
+        this(DEFAULT_ENVELOP, tokenBucketRate, tokenBucketSize, peakDataRate,
+             minimumPolicedUnit, maximumPacketSize, rate, slackTerm);
+    }
+
+    /**
+     * Constructor to set all values
+     * @param envelope - the envelope value
+     * @param tokenBucketRate - Token Bucket Rate value [r]
+     * @param tokenBucketSize - Token Bucket Size value [b]
+     * @param peakDataRate - Peak Data Rate value [p]
+     * @param minimumPolicedUnit - Minimum Policed Unit value [m]
+     * @param maximumPacketSize - Maximum Packet Size value [M]
+     * @param rate - Rate value [R]
+     * @param slackTerm - Slack Term value [S]
+     */
+    protected DOCSISFlowSpecTrafficProfile(final byte envelope,
+                                           final int tokenBucketRate,
+                                           final int tokenBucketSize,
+                                           final int peakDataRate,
+                                           final int minimumPolicedUnit,
+                                           final int maximumPacketSize,
+                                           final int rate,
+                                           final int slackTerm) {
+        super(SNum.TRAFFIC_PROFILE, STYPE);
+        this.tokenBucketRate = tokenBucketRate;
+        this.tokenBucketSize = tokenBucketSize;
+        this.peakDataRate = peakDataRate;
+        this.minimumPolicedUnit = minimumPolicedUnit;
+        this.maximumPacketSize = maximumPacketSize;
+        this.rate = rate;
+        this.slackTerm = slackTerm;
+        this.envelope = envelope;
+    }
+
+    @Override
+    public byte getEnvelop() {
+        return envelope;
+    }
+
+    /**
+     * Returns the token bucket rate value
+     * @return - the token bucket rate value
+     */
+    public int getTokenBucketRate() {
+        return tokenBucketRate;
+    }
+
+    /**
+     * Returns the token bucket size value
+     * @return - the token bucket size value
+     */
+    public int getTokenBucketSize() {
+        return tokenBucketSize;
+    }
+
+    /**
+     * Returns the peak data rate value
+     * @return - the peak data rate value
+     */
+    public int getPeakDataRate() {
+        return peakDataRate;
+    }
+
+    /**
+     * Returns the minimum policed unit value
+     * @return - the minimum policed unit value
+     */
+    public int getMinimumPolicedUnit() {
+        return minimumPolicedUnit;
+    }
+
+    /**
+     * Returns the maximum packet size value
+     * @return - the maximum packet size value
+     */
+    public int getMaximumPacketSize() {
+        return maximumPacketSize;
+    }
+
+    /**
+     * Returns the rate value
+     * @return - the rate value
+     */
+    public int getRate() {
+        return rate;
+    }
+
+    /**
+     * Returns the slack term value
+     * @return - the slack term value
+     */
+    public int getSlackTerm() {
+        return slackTerm;
+    }
+
+    @Override
+    protected byte[] getBytes() {
+        final byte[] data = new byte[4+(4*7*3)];
+        
+        float fTokenBucketRate = tokenBucketRate;
+        float fTokenBucketSize = tokenBucketSize;
+        float fPeakDataRate = peakDataRate;
+        float fRate = rate;
+
+        //
+        // Ok I know this looks crazy but PCMM Flow Spec encodes some values as floats
+        // even though they do not contain fractional values, so we 'integerize' them
+        // in the constructor and class internals
+        //
+        Arrays.fill(data, (byte) 0);
+        data[0] = envelope;
+        data[1] = SERVICE_NUMBER;
+        data[2] = 0; // reserved
+        data[3] = 0; // reserved
+        
+        // Authorized Envelope
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketRate).array(), 0, data, 4, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketSize).array(), 0, data, 8, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fPeakDataRate).array(), 0, data, 12, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(minimumPolicedUnit).array(), 0, data, 16, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(maximumPacketSize).array(), 0, data, 20, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fRate).array(), 0, data, 24, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(slackTerm).array(), 0, data, 28, 4);
+        
+        // Reserved Envelope
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketRate).array(), 0, data, 32, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketSize).array(), 0, data, 36, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fPeakDataRate).array(), 0, data, 40, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(minimumPolicedUnit).array(), 0, data, 44, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(maximumPacketSize).array(), 0, data, 48, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fRate).array(), 0, data, 52, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(slackTerm).array(), 0, data, 56, 4);
+        
+        // Committed Envelope
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketRate).array(), 0, data, 60, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fTokenBucketSize).array(), 0, data, 64, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fPeakDataRate).array(), 0, data, 68, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(minimumPolicedUnit).array(), 0, data, 72, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(maximumPacketSize).array(), 0, data, 76, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putFloat(fRate).array(), 0, data, 80, 4);
+        System.arraycopy(ByteBuffer.allocate(4).putInt(slackTerm).array(), 0, data, 84, 4);
+        return data;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof DOCSISFlowSpecTrafficProfile)) {
+            return false;
+        }
+        if (!super.equals(o)) {
+            return false;
+        }
+        final DOCSISFlowSpecTrafficProfile that = (DOCSISFlowSpecTrafficProfile) o;
+        return (envelope == that.envelope) &&
+            (tokenBucketRate == that.tokenBucketRate) &&
+            (tokenBucketSize == that.tokenBucketSize) &&
+            (peakDataRate == that.peakDataRate) &&
+            (minimumPolicedUnit == that.minimumPolicedUnit) &&
+            (maximumPacketSize == that.maximumPacketSize) &&
+            (rate == that.rate) &&
+            (slackTerm == that.slackTerm);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = super.hashCode();
+        result = 31 * result + tokenBucketRate;
+        result = 31 * result + tokenBucketSize;
+        result = 31 * result + peakDataRate;
+        result = 31 * result + minimumPolicedUnit;
+        result = 31 * result + maximumPacketSize;
+        result = 31 * result + rate;
+        result = 31 * result + slackTerm;        
+        result = 31 * result + (int) envelope;
+        return result;
+    }
+
+    private static int byteToInt(final byte[] data, int start) {
+        return (int)(data[start]   << 24 |
+                     data[start+1] << 16 |
+                     data[start+2] << 8  |
+                     data[start+3]);
+    }
+
+    private static float byteToFloat(final byte[] data, int start) {
+        return (float)(data[start]   << 24 |
+                       data[start+1] << 16 |
+                       data[start+2] << 8  |
+                       data[start+3]);
+    }
+    
+    /**
+     * Returns a DOCSISFlowSpecTrafficProfile object from a byte array
+     * @param data - the data to parse
+     * @return - the object
+     * TODO - make me more robust as RuntimeExceptions can be thrown here.
+     */
+    public static DOCSISFlowSpecTrafficProfile parse(final byte[] data) {
+        byte env = 0;
+        int mpu=0,mps=0,st=0;
+        float tbr=0,tbs=0,pdr=0,r=0;
+
+        env = data[0];
+
+        tbr = byteToFloat(data, 4);
+        tbs = byteToFloat(data, 8);
+        pdr = byteToFloat(data, 12);
+        mpu = byteToInt(data, 16);
+        mps = byteToInt(data, 20);
+        r   = byteToFloat(data, 24);
+        st  = byteToInt(data, 28);
+        //
+        // Ok I know this looks crazy but PCMM Flow Spec encodes some values as floats
+        // even though they do not contain fractional values, so we 'integerize' them
+        // in the constructor and class internals
+        //
+        int itbr = Math.round(tbr), itbs = Math.round(tbs),
+            ipdr = Math.round(pdr), ir = Math.round(r);
+        
+        return new DOCSISFlowSpecTrafficProfile(env, itbr, itbs, ipdr,
+                                                mpu, mps, ir, st);
+    }
+
+  /**
+   * {@inheritDoc}
+   */
+  public String toString() {
+    final int sbSize = 1000;
+    final String variableSeparator = "\n";
+    final StringBuffer sb = new StringBuffer(sbSize);
+
+    sb.append("Envelope: ").append(envelope);
+    sb.append(variableSeparator);
+    sb.append("TokenBucketRate: ").append(tokenBucketRate);
+    sb.append(variableSeparator);
+    sb.append("TokenBucketSize: ").append(tokenBucketSize);
+    sb.append(variableSeparator);
+    sb.append("PeakDataRate: ").append(peakDataRate);
+    sb.append(variableSeparator);
+    sb.append("MinimumPolicedUnit: ").append(minimumPolicedUnit);
+    sb.append(variableSeparator);
+    sb.append("MaximumPacketSize: ").append(maximumPacketSize);
+    sb.append(variableSeparator);
+    sb.append("Rate: ").append(rate);
+    sb.append(variableSeparator);
+    sb.append("SlackTerm: ").append(slackTerm);
+
+    return sb.toString();
+  }
+}
index af3fac1120d53ba74135c69605ddb41937609519..94a268d50792f069c2e99d36ea20d173da8c6677 100644 (file)
@@ -12,7 +12,23 @@ import com.google.common.collect.Lists;
 import com.google.common.primitives.Bytes;
 import java.util.Collections;
 import org.pcmm.base.impl.PCMMBaseObject.SNum;
-import org.pcmm.gates.*;
+import org.pcmm.gates.IAMID;
+import org.pcmm.gates.IClassifier;
+import org.pcmm.gates.ISubscriberID;
+import org.pcmm.gates.ITransactionID;
+import org.pcmm.gates.IGateSpec;
+import org.pcmm.gates.IGateTimeInfo;
+import org.pcmm.gates.ITrafficProfile;
+import org.pcmm.gates.IPCMMError;
+import org.pcmm.gates.IPCMMGate;
+import org.pcmm.gates.IGateID;
+import org.pcmm.gates.IExtendedClassifier;
+import org.pcmm.gates.IIPv6Classifier;
+import org.pcmm.gates.IGateState;
+import org.pcmm.gates.IGateUsageInfo;
+import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
+import org.pcmm.gates.impl.DOCSISFlowSpecTrafficProfile;
+import org.pcmm.gates.impl.BestEffortService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -108,64 +124,67 @@ public class PCMMGateReq implements IPCMMGate {
             final int dataIndx = offset + 4;
             byte[] dataBuffer = Arrays.copyOfRange(data, dataIndx, dataIndx + len - 4);
             switch (sNum) {
-                case GATE_ID:
-                    gateID = GateID.parse(dataBuffer);
+            case GATE_ID:
+                gateID = GateID.parse(dataBuffer);
+                break;
+            case AMID:
+                amid = AMID.parse(dataBuffer);
+                break;
+            case SUBSCRIBER_ID:
+                subscriberID = SubscriberID.parse(dataBuffer);
+                break;
+            case TRANSACTION_ID:
+                transactionID = TransactionID.parse(dataBuffer);
+                break;
+            case GATE_SPEC:
+                gateSpec = GateSpec.parse(dataBuffer);
+                break;
+            case TRAFFIC_PROFILE:
+                switch (sType) {
+                case DOCSISServiceClassNameTrafficProfile.STYPE:
+                    trafficProfile = DOCSISServiceClassNameTrafficProfile.parse(dataBuffer);
                     break;
-                case AMID:
-                    amid = AMID.parse(dataBuffer);
+                case DOCSISFlowSpecTrafficProfile.STYPE:
+                    trafficProfile = DOCSISFlowSpecTrafficProfile.parse(dataBuffer);
                     break;
-                case SUBSCRIBER_ID:
-                    subscriberID = SubscriberID.parse(dataBuffer);
+                case BestEffortService.STYPE:
+                    trafficProfile = BestEffortService.parse(dataBuffer);
                     break;
-                case TRANSACTION_ID:
-                    transactionID = TransactionID.parse(dataBuffer);
+                }
+                break;
+            case CLASSIFIERS:
+                switch (sType) {
+                case IClassifier.STYPE:
+                    classifiers.add(Classifier.parse(dataBuffer));
                     break;
-                case GATE_SPEC:
-                    gateSpec = GateSpec.parse(dataBuffer);
+                case IExtendedClassifier.STYPE:
+                    classifiers.add(ExtendedClassifier.parse(dataBuffer));
                     break;
-                case TRAFFIC_PROFILE:
-                    switch (sType) {
-                        case DOCSISServiceClassNameTrafficProfile.STYPE:
-                            trafficProfile = DOCSISServiceClassNameTrafficProfile.parse(dataBuffer);
-                            break;
-                        case BestEffortService.STYPE:
-                            trafficProfile = BestEffortService.parse(dataBuffer);
-                            break;
-                    }
-                    break;
-                case CLASSIFIERS:
-                    switch (sType) {
-                        case IClassifier.STYPE:
-                            classifiers.add(Classifier.parse(dataBuffer));
-                            break;
-                        case IExtendedClassifier.STYPE:
-                            classifiers.add(ExtendedClassifier.parse(dataBuffer));
-                            break;
-                        case IIPv6Classifier.STYPE:
-                            classifiers.add(IPv6Classifier.parse(dataBuffer));
-                            break;
-                    }
-                    break;
-                case PCMM_ERROR:
-                    error = PCMMError.parse(dataBuffer);
+                case IIPv6Classifier.STYPE:
+                    classifiers.add(IPv6Classifier.parse(dataBuffer));
                     break;
+                }
+                break;
+            case PCMM_ERROR:
+                error = PCMMError.parse(dataBuffer);
+                break;
                 //adding GATE_STATE
-                case GATE_STATE:
-                        gateState = GateState.parse(dataBuffer);
-                     break;
+            case GATE_STATE:
+                gateState = GateState.parse(dataBuffer);
+                break;
                 //adding GATE_TIME_INFO
-                     case GATE_TIME_INFO:
-                        gateTimeInfo = GateTimeInfo.parse(dataBuffer);
-                       logger.info("Gate Time Info: "+gateTimeInfo);
-                     break;
+            case GATE_TIME_INFO:
+                gateTimeInfo = GateTimeInfo.parse(dataBuffer);
+                logger.info("Gate Time Info: "+gateTimeInfo);
+                break;
                 //adding GATE_USAGE_INFO
-                case GATE_USAGE_INFO:
-                        gateUsageInfo = GateUsageInfo.parse(dataBuffer);
-                        logger.info("Gate Usage Info: "+gateUsageInfo);
-                     break;
+            case GATE_USAGE_INFO:
+                gateUsageInfo = GateUsageInfo.parse(dataBuffer);
+                logger.info("Gate Usage Info: "+gateUsageInfo);
+                break;
             default:
                 logger.warn("Unhandled Object skept : S-NUM=" + sNum
-                                   + "  S-TYPE=" + sType + "  LEN=" + len);
+                            + "  S-TYPE=" + sType + "  LEN=" + len);
             }
             offset += len;
         }
index f2bb2be3aebc163d0e01200dbf07fc9113d4d67f..5bd80a1b93498a2444d07bf3da636f902980d700 100644 (file)
@@ -35,6 +35,7 @@ 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.GateID;
 import org.pcmm.gates.impl.GateSpec;
 import org.pcmm.gates.impl.GateState;
@@ -259,6 +260,9 @@ public class CmtsPepReqStateMan extends COPSPepReqStateMan {
             case GATE_INFO:
                 processGateInfo(gateReq, socket);
                 break;
+            case GATE_DELETE:
+                processGateDelete(gateReq, socket);
+                break;
             default:
                 logger.error("Emulator does not support gate command: {}",
                         gateReq.getTransactionID().getGateCommandType());
@@ -340,9 +344,15 @@ public class CmtsPepReqStateMan extends COPSPepReqStateMan {
             }
         }
         else {
-            // Traffic profile
-
-            if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
+            // Traffic profile type check
+            if (!(gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) &&
+                !(gateReq.getTrafficProfile() instanceof DOCSISFlowSpecTrafficProfile)) {
+                logger.error("Currently only DOCSIS Service Class Name and Flow Spec Traffic Profiles are supported: attempted ",
+                        gateReq.getTrafficProfile().getClass().getName());
+                return new PCMMError(ErrorCode.OTHER_UNSPECIFIED);
+            }
+            // ServiceClassName match check
+            else if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
                 final DOCSISServiceClassNameTrafficProfile scnTrafficProfile =
                         (DOCSISServiceClassNameTrafficProfile) gateReq.getTrafficProfile();
 
@@ -355,11 +365,6 @@ public class CmtsPepReqStateMan extends COPSPepReqStateMan {
                 if (!directionSCNs.contains(scnTrafficProfile.getScnName())) {
                     return new PCMMError(ErrorCode.UNDEF_SCN_NAME);
                 }
-            } else {
-                // TODO remote this after other profiles are supported
-                logger.error("Currently only DOCSIS Service Class Name Traffic Profiles are supported: attempted {}",
-                        gateReq.getTrafficProfile().getClass().getName());
-                return new PCMMError(ErrorCode.OTHER_UNSPECIFIED);
             }
 
             // number of classifiers
@@ -368,8 +373,6 @@ public class CmtsPepReqStateMan extends COPSPepReqStateMan {
             }
         }
 
-
-
         // SubscriberID
         String subId = gateReq.getSubscriberID().getSourceIPAddress().getHostAddress();
         if(!config.getModemStatus().containsKey(subId) || !config.getModemStatus().get(subId)) {
@@ -387,9 +390,6 @@ public class CmtsPepReqStateMan extends COPSPepReqStateMan {
             }
         }
 
-
-
-
         return null;
     }
 
@@ -406,7 +406,6 @@ public class CmtsPepReqStateMan extends COPSPepReqStateMan {
             return error;
         }
 
-
         return null;
     }
 
@@ -416,10 +415,15 @@ public class CmtsPepReqStateMan extends COPSPepReqStateMan {
         final Direction gateDir = gateReq.getGateSpec().getDirection();
 
         final String serviceClassName;
-        if ((gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile)) {
-            serviceClassName = ((DOCSISServiceClassNameTrafficProfile) gateReq.getTrafficProfile()).getScnName();
+        if (gateReq.getTrafficProfile() instanceof DOCSISServiceClassNameTrafficProfile) {
+            serviceClassName = ((DOCSISServiceClassNameTrafficProfile)gateReq.getTrafficProfile()).getScnName();
+            logger.info("Processing ServiceClassName[" + serviceClassName + "] gate set with direction [" + gateDir + ']');
+        } else if (gateReq.getTrafficProfile() instanceof DOCSISFlowSpecTrafficProfile) {
+            serviceClassName = null;
+            logger.info("Processing FlowSpec gate set with direction [" + gateDir + ']');
         } else {
             serviceClassName = null;
+            logger.error("Unknown Traffic Profile type: " + gateReq.getTrafficProfile().getClass().getName());
         }
 
         final IPCMMError error = getGateError(gateReq);
@@ -532,6 +536,36 @@ public class CmtsPepReqStateMan extends COPSPepReqStateMan {
         sendReport(reportType, copsClientSI, socket);
     }
 
+    private void processGateDelete(final PCMMGateReq gateReq, final Socket socket) throws COPSException {
+        logger.info("GateDelete");
+
+        final TransactionID transactionID;
+        final ReportType reportType;
+        transactionID = new TransactionID(gateReq.getTransactionID().getTransactionIdentifier(),
+                                              ITransactionID.GateCommandType.GATE_DELETE_ACK);
+        reportType = ReportType.SUCCESS;
+
+        final List<Byte> data = new ArrayList<>();
+        addBytesToList(transactionID.getAsBinaryArray(), data);
+        addBytesToList(gateReq.getAMID().getAsBinaryArray(), data);
+        addBytesToList(gateReq.getSubscriberID().getAsBinaryArray(), data);
+        addBytesToList(gateReq.getGateID().getAsBinaryArray(), data);
+
+        GateMetaData exisitingGate = gateStateMap.get(gateReq.getGateID());
+        gateStateMap.remove(gateReq.getGateID());
+
+        GateState gateState = new GateState(IGateState.GateStateType.COMMITTED,
+                                                IGateState.GateStateReasonType.OTHER);
+        addBytesToList(gateState.getAsBinaryArray(), data);
+
+        logger.info("Deleting " + reportType + " for gate delete request on gate " + exisitingGate.getGateReq().getGateID() );
+
+        final byte[] csiArr = Bytes.toArray(data);
+        COPSClientSI copsClientSI = new COPSClientSI(CNum.CSI, CType.DEF, new COPSData(csiArr, 0, csiArr.length));
+        
+        sendReport(reportType, copsClientSI, socket);
+    }
+
     private void sendReport(ReportType reportType, COPSClientSI copsClientSI, final Socket socket)
             throws COPSPepException {
         logger.info("Returning {} for gate request", reportType);
index 6066b58738db9887b5dd50ee755b0e66a71d5f55..aad1e55b6a89c528aeb61d03af5badc7e91504c0 100644 (file)
@@ -10,6 +10,9 @@ module packetcable
     description "This module contains the PCMM Converged Cable Access Platform (CCAP) definitions";
     organization "OpenDaylight Project";
 
+    revision 2016-12-19 {
+        description "Added support for flow-spec traffic profile";
+    }
     revision 2016-11-28 {
         description "Added support for activation-state, session-class-id and inactivity-timer";
     }
@@ -341,6 +344,19 @@ module packetcable
 
     grouping pcmm-qos-traffic-profile {
         container traffic-profile {
+            choice traffic-profile-choice {
+                case service-class-name-choice {
+                    uses pcmm-serviceclass-name-profile;
+                } 
+                case flow-spec-choice {
+                    uses pcmm-flow-spec-profile;
+                }
+            }
+        }
+    }
+    
+  grouping pcmm-serviceclass-name-profile {
+    container service-class-name-profile {
             leaf service-class-name {
                 type service-class-name;
                 description "The Service Class Name (SCN). This SCN must be pre-provisioned on the target CCAP";
@@ -349,7 +365,47 @@ module packetcable
         }
     }
 
-    grouping tp-port-match-ranges {
+  grouping pcmm-flow-spec-profile {
+    container flow-spec-profile {
+      leaf token-bucket-rate {
+        type int32;
+        description "Token Bucket Rate value [r]";
+        mandatory true;
+      }
+      leaf token-bucket-size {
+        type int32; 
+        description "Token Bucket Size value [b]";
+        mandatory true;
+      }
+      leaf peak-data-rate {
+        type int32;
+        description "Peak Data Rate value [p]";
+        mandatory true;
+      } 
+      leaf minimum-policed-unit {
+        type int32;
+        description "Minimum Policed Unit value [m]";
+        mandatory true;
+      }
+      leaf maximum-packet-size {
+        type int32;
+        description "Maximum Packet Size value [M]";
+        mandatory true;
+      }
+      leaf rate {
+        type int32;
+        description "Rate value [R]";
+        mandatory true;
+      }
+      leaf slack-term {
+        type int32;
+        description "Slack Term value [S]";
+        mandatory true;
+      }
+    }
+  }
+    
+  grouping tp-port-match-ranges {
         leaf srcPort-start {
             type inet:port-number;
             description "TCP/UDP source port range start.";
index ed18ae36a0218843820f7ee49e3430140278d571..1d72875725343b9b9c9b1e394e1f9a0ce292c486 100644 (file)
@@ -16,19 +16,21 @@ import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.List;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.flow.spec.profile.FlowSpecProfile;
 import org.pcmm.gates.IClassifier;
 import org.pcmm.gates.IClassifier.Protocol;
 import org.pcmm.gates.IExtendedClassifier;
@@ -38,6 +40,7 @@ import org.pcmm.gates.IIPv6Classifier.FlowLabel;
 import org.pcmm.gates.ITrafficProfile;
 import org.pcmm.gates.impl.AMID;
 import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
+import org.pcmm.gates.impl.DOCSISFlowSpecTrafficProfile;
 import org.pcmm.gates.impl.GateID;
 import org.pcmm.gates.impl.GateState;
 import org.pcmm.gates.impl.GateTimeInfo;
@@ -49,7 +52,11 @@ import org.pcmm.gates.impl.SubscriberID;
 import org.pcmm.gates.impl.TransactionID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
 /**
  * Build PCMM gate requests from API QoS Gate objects
  */
@@ -138,9 +145,24 @@ public class PCMMGateReqBuilder {
    }
 
     public void setTrafficProfile(final TrafficProfile qosTrafficProfile) {
-        if (qosTrafficProfile.getServiceClassName() != null) {
-            trafficProfile =
-                    new DOCSISServiceClassNameTrafficProfile(qosTrafficProfile.getServiceClassName().getValue());
+        TrafficProfileChoice choice = qosTrafficProfile.getTrafficProfileChoice();
+
+        if (choice instanceof ServiceClassNameChoice) {
+            ServiceClassNameProfile scnp = ((ServiceClassNameChoice)choice).getServiceClassNameProfile();
+            trafficProfile = new DOCSISServiceClassNameTrafficProfile(scnp.getServiceClassName().getValue());
+        }
+        else if (choice instanceof FlowSpecChoice) {
+            FlowSpecProfile fsp = ((FlowSpecChoice)choice).getFlowSpecProfile();
+            trafficProfile = new DOCSISFlowSpecTrafficProfile(fsp.getTokenBucketRate(),
+                                                              fsp.getTokenBucketSize(),
+                                                              fsp.getPeakDataRate(),
+                                                              fsp.getMinimumPolicedUnit(),
+                                                              fsp.getMaximumPacketSize(),
+                                                              fsp.getRate(),
+                                                              fsp.getSlackTerm());     
+        }
+        else {
+            logger.debug("PCMMGateReq().setTrafficProfile() Unsupported Traffic Profile: " + choice.getClass().getName());
         }
     }
 
index 0e243dd102ca84b17cbad4929ae041e03d38cbe9..1ad345484f5ea8ed606451aaf2cc0f9c81081d67 100644 (file)
@@ -13,10 +13,10 @@ import java.util.Map;
 import javax.annotation.concurrent.ThreadSafe;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
 import org.pcmm.PCMMPdpAgent;
 import org.pcmm.PCMMPdpDataProcess;
 import org.pcmm.PCMMPdpMsgSender;
index f539068067c0585d0d793035abfa76b73c4bb099..a11d21a7a1faed5a2c3b2632cea339576f72bdda 100644 (file)
@@ -36,10 +36,10 @@ import java.util.concurrent.Future;
 import javax.annotation.Nonnull;
 import javax.annotation.concurrent.ThreadSafe;
 
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
@@ -54,48 +54,60 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.AppContext;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapContext;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapPollConnectionInput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapPollConnectionOutput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapPollConnectionOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapSetConnectionInput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapSetConnectionOutput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapSetConnectionOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.PacketcableService;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Qos;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.QosPollGatesInput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.QosPollGatesOutput;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.QosPollGatesOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.ConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.CcapBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpecBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.AppBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.AppKey;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.SubscribersBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.SubscriberKey;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.AppContext;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapContext;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapPollConnectionInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapPollConnectionOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapPollConnectionOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapSetConnectionInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapSetConnectionOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapSetConnectionOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.PacketcableService;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Qos;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.QosPollGatesInput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.QosPollGatesOutput;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.QosPollGatesOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.CcapBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.AppBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.AppKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.SubscribersBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.SubscriberKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateKey;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
 import org.pcmm.gates.IGateSpec.Direction;
+import org.pcmm.gates.impl.DOCSISFlowSpecTrafficProfile;
+import org.pcmm.gates.impl.DOCSISServiceClassNameTrafficProfile;
 import org.pcmm.rcd.IPCMMClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -685,29 +697,43 @@ public class PacketcableProvider implements BindingAwareProvider, AutoCloseable,
             gateBuilder.setGateId(newGate.getGateId())
                     .setGatePath(newGatePathStr)
                     .setCcapId(ccap.getCcapId())
-                    .setTrafficProfile(newGate.getTrafficProfile())
                     .setClassifiers(newGate.getClassifiers())
                     .setGateSpec(newGate.getGateSpec())
                     .setCopsGateState("")
                     .setCopsGateTimeInfo("")
                     .setCopsGateUsageInfo("");
 
-            //
-            // Right now only ServiceClassName traffic Profile is supported. This logic needs to
-            // be updated when the yang traffic-profile is extended to support new types
-            // Override requested Direction using the Ccap configuration information about SCNs and
-            // their configured direction.
-            //
-            final ServiceClassName scn = newGate.getTrafficProfile().getServiceClassName();
-            final ServiceFlowDirection scnDirection = findScnOnCcap(scn, ccap);
-            if (scnDirection == null) {
-                final String msg =
+            ServiceFlowDirection scnDirection = null;
+            
+            if (newGate.getTrafficProfile().getTrafficProfileChoice() instanceof ServiceClassNameChoice) {    
+                final ServiceClassName scn =
+                    ((ServiceClassNameChoice)newGate.getTrafficProfile()
+                     .getTrafficProfileChoice())
+                    .getServiceClassNameProfile()
+                    .getServiceClassName();
+                scnDirection = findScnOnCcap(scn, ccap);
+                if (scnDirection == null) {
+                    final String msg =
                         String.format("SCN %s not found on CCAP %s for %s", scn, ccap.getCcapId(), newGatePathStr);
-                logger.error(msg);
-                saveGateError(gateIID, newGatePathStr, msg);
-                return;
+                    logger.error(msg);
+                    saveGateError(gateIID, newGatePathStr, msg);
+                    return;
+                }
+                ServiceClassNameProfileBuilder scnBuilder = new ServiceClassNameProfileBuilder();
+                scnBuilder.setServiceClassName(scn);
+                ServiceClassNameProfile scnProfile = scnBuilder.build();
+                ServiceClassNameChoiceBuilder scncBuilder = new ServiceClassNameChoiceBuilder();
+                scncBuilder.setServiceClassNameProfile(scnProfile);
+                ServiceClassNameChoice scnChoice = scncBuilder.build();
+                TrafficProfileBuilder trafficProfileBuilder = new TrafficProfileBuilder();
+                trafficProfileBuilder.setTrafficProfileChoice(scnChoice);
+                TrafficProfile trafficProfile = trafficProfileBuilder.build();
+                gateBuilder.setTrafficProfile(trafficProfile);
             }
-
+            else {
+                gateBuilder.setTrafficProfile(newGate.getTrafficProfile());
+            }
+            
             //
             // since we may be modifying the contents of the original request GateSpec
             // to update flow direction (based on the ccap SCN configuration) we need to
@@ -907,15 +933,15 @@ public class PacketcableProvider implements BindingAwareProvider, AutoCloseable,
         }
 
         DateAndTime connectionDateAndTime = getNowTimeStamp();
-        org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.set.connection.output.ccap.ConnectionBuilder
+        org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.ccap.ConnectionBuilder
                 connectionRpcOutput =
-                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.set.connection.output.ccap.ConnectionBuilder()
+                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.ccap.ConnectionBuilder()
                         .setConnected(effectiveIsConnected)
                         .setError(outputError)
                         .setTimestamp(connectionDateAndTime);
 
-        org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.set.connection.output.CcapBuilder ccapRpcOutput =
-                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.set.connection.output.CcapBuilder().setCcapId(
+        org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.CcapBuilder ccapRpcOutput =
+                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.set.connection.output.CcapBuilder().setCcapId(
                         ccapId).setConnection(connectionRpcOutput.build());
 
 
@@ -952,9 +978,9 @@ public class PacketcableProvider implements BindingAwareProvider, AutoCloseable,
         PCMMService pcmmService = pcmmServiceMap.get(ccapId);
         Boolean effectiveIsConnected = true;
         String response = null;
-        org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.ccap.ConnectionBuilder
+        org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder
                 connectionRpcOutput =
-                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.ccap.ConnectionBuilder();
+                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder();
 
         if (pcmmService != null) {
             if (pcmmService.getPcmmPdpSocket()) {
@@ -984,7 +1010,7 @@ public class PacketcableProvider implements BindingAwareProvider, AutoCloseable,
             CcapBuilder responseCcapBuilder = new CcapBuilder().setCcapId(ccapId).setConnection(connectionOps.build());
 
             connectionRpcOutput =
-                    new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.ccap.ConnectionBuilder()
+                    new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.ccap.ConnectionBuilder()
                             .setConnected(effectiveIsConnected)
                             .setError(outputError)
                             .setTimestamp(connectionDateAndTime);
@@ -998,8 +1024,8 @@ public class PacketcableProvider implements BindingAwareProvider, AutoCloseable,
 
         DateAndTime rpcDateAndTime = getNowTimeStamp();
 
-        org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.CcapBuilder ccapRpcOutput =
-                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.poll.connection.output.CcapBuilder().setCcapId(
+        org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.CcapBuilder ccapRpcOutput =
+                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.poll.connection.output.CcapBuilder().setCcapId(
                         ccapId).setConnection(connectionRpcOutput.build());
 
         CcapPollConnectionOutputBuilder outputBuilder =
@@ -1065,8 +1091,8 @@ public class PacketcableProvider implements BindingAwareProvider, AutoCloseable,
 
         String rpcResponse = null;
 
-        org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.qos.poll.gates.output.GateBuilder gateOutputBuilder =
-                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.qos.poll.gates.output.GateBuilder();
+        org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.qos.poll.gates.output.GateBuilder gateOutputBuilder =
+                new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.qos.poll.gates.output.GateBuilder();
 
         GateBuilder gateBuilder = new GateBuilder();
 
@@ -1230,8 +1256,8 @@ public class PacketcableProvider implements BindingAwareProvider, AutoCloseable,
         @Override
         public void run() {
 
-            org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.qos.poll.gates.output.GateBuilder gateOutputBuilder =
-                    new org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.qos.poll.gates.output.GateBuilder();
+            org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.qos.poll.gates.output.GateBuilder gateOutputBuilder =
+                    new org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.qos.poll.gates.output.GateBuilder();
 
             GateBuilder gateBuilder = new GateBuilder();
 
index 8a8db7ff34f8f6d04ef28c8db3bc852bbe2ea9ad..5ca381ad708a794e5e64bb18197758e57e40822b 100644 (file)
@@ -14,10 +14,10 @@ import org.opendaylight.controller.packetcable.provider.validation.impl.validato
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.CcapValidator;
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.CcapsValidator;
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.ConnectionValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
 
 /**
  * A ValidatorProviderFactory that can provide validators for types under packetcable:ccaps.
index 7b93348a84d244f6571a5cad710c92eb9f9d66fd..75ae9929cb070a16b5f2143403659c85976e40db 100644 (file)
@@ -23,19 +23,19 @@ import org.opendaylight.controller.packetcable.provider.validation.impl.validato
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.ClassifiersValidator;
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.ExtClassifierValidator;
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.Ipv6ClassifierValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
 
 /**
  * * A ValidatorProviderFactory that can provide validators for types under packetcable:qos.
index a9ffb428de986ab05e8742181fcae2d0a2974125..20fd7e97d1a3919de469553e47dbf7ff26ee901b 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
 
 /**
  * @author rvail
index 319a2f41c9f2baeb037f818492c32269f5223962..7b946c23959ef4407e3ddab7d11bd42d430d96fc 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
 
 /**
  * @author rvail
index 10a3d2a898dc73fb33a5c30d9d24e18a6df8238c..8670f0ad63397d5cbcc2203713e38fee48890c8a 100644 (file)
@@ -9,8 +9,8 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
 
 /**
  * @author rvail
index d962a08a287b729d74e00e80a537d9f4e4f3e630..537b77077ff61a0d71ade273fdbbb96900e403d6 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
 
 /**
  * @author rvail
index 07d08b6b8debac79b0dd458fefe7bf98dd3cb069..66c1747bbe05b9374401093078935c3fac38964e 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
 
 /**
  * @author rvail
index 3ce1edf901f6e8318598707ac5d8e5a4be4de7f7..1564ec2f10a103bbb069d469ee3cd77c69f80009 100644 (file)
@@ -9,8 +9,8 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
 
 /**
  * @author rvail
index 2d80419f5c1a5ed6c01ad04f8c032c11220540b5..5dd784429930d12185c740414d274f631c4a011f 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
 
 /**
  * @author rvail
index 103e0e46be794bbcfc07e3a26d9b7dbdea7fa659..e1ae7692796a02cf6ee595c9c7ec1597bcc712a9 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.controller.packetcable.provider.validation.impl.validat
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.ClassifiersValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
 
 /**
  * @author rvail
index 27d8877f29ad163475ba5fe1d78ed0b34f47ae2e..4bef131b150cc0057bd6fb610e8e2f7b7cdc2e82 100644 (file)
@@ -9,8 +9,8 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
 
 /**
  * @author rvail
index b20625f434516ef385535b476850222d924d415e..9eaf4cd814d3320b13957d1cda0ee79007b66fdc 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
 
 /**
  * @author rvail
index 08e5fc5e93e6ece3a3611ea4432f5926052924f4..f9d06e0c1c9516ec3eee9337270d46300501c996 100644 (file)
@@ -9,8 +9,8 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
 
 /**
  * @author rvail
index ef717eb6ae21954e59e638dbbcb6767593aff8ae..1d5f3a85665c9e04f866ed6eacb0f300e2f1b5f4 100644 (file)
@@ -9,24 +9,37 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
 
 /**
  * @author rvail
  */
 public class TrafficProfileValidator extends AbstractValidator<TrafficProfile> {
 
+    private static final String FS = "flow-spec-profile";
     private static final String SCN = "service-class-name";
+    private static final String SCP = "service-class-name-profile";
 
     @Override
     protected void doValidate(final TrafficProfile trafficProfile, final Extent extent) {
         if (trafficProfile == null) {
            getErrorMessages().add("traffic-profile must exist");
            return;
-       }
-
-        mustExist(trafficProfile.getServiceClassName(), SCN);
-
+        }
+        if (trafficProfile.getTrafficProfileChoice() instanceof ServiceClassNameChoice) {
+            mustExist(((ServiceClassNameChoice)trafficProfile.getTrafficProfileChoice()).getServiceClassNameProfile(), SCP);
+            mustExist(((ServiceClassNameChoice)trafficProfile.getTrafficProfileChoice()).getServiceClassNameProfile().getServiceClassName(), SCN);
+        } else if (trafficProfile.getTrafficProfileChoice() instanceof FlowSpecChoice) {
+            mustExist(((FlowSpecChoice)trafficProfile.getTrafficProfileChoice()).getFlowSpecProfile(), SCP);
+        } else {
+           getErrorMessages().add("Unknown traffic profile");
+           return;
+        }
     }
 
 }
index d2118cab4837f5d9f1fcca10a40b690a4bf8ff12..828532fe1ce91f4109f6e576532c809aa638291c 100644 (file)
@@ -9,10 +9,10 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
 
 /**
  * @author rvail
index 42f027dcdbb00401a17aa6585ed5fd24b39dcc05..991d315d484020e69e725e5bad505dd0497033f7 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
 
 /**
  * @author rvail
index 0f79470edc1d156d2fde6a438359e11f2d814dab..95be5a10259f1511b0b288ef47a8870d8ed1f6a7 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
 
 
 /**
index f45b9ac889ab781315f0f281ad288cff57461114..0238cbd9bbae8494919b257b5bfb48eaac81b2fa 100644 (file)
@@ -9,9 +9,9 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
 
 /**
  * @author rvail
index 52c80ac28d5ad0085d529094a0c1b8f86d9dfdc5..06b264265131f634184527de780aa6b0e2d849af 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
 
 /**
  * @author rvail
index 013d34cbf138ec18eb18ac649d4835166161d5dd..c9b9b1899c3167202ff924b58c003ab202ef7e23 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier;
 
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.AbstractValidator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
 
 /**
  * @author rvail
index 0264e1789c02d52ba9a20672399ca7e07cb5ce8d..b34d758cc5d7aa04f1fa681034626bc1ce5e850c 100644 (file)
@@ -1,5 +1,9 @@
 /*
  * (c) 2015 Cable Television Laboratories, Inc.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
 package org.opendaylight.controller.packetcable.provider;
@@ -31,20 +35,28 @@ import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
 import org.pcmm.PCMMPdpAgent;
 import org.pcmm.gates.IPCMMGate;
 import org.pcmm.rcd.IPCMMClient;
@@ -437,10 +449,16 @@ public class PCMMServiceTest {
         when(gateSpec.getDirection()).thenReturn(direction);
         // TODO - make sure to write a test when this value is not null
         when(gateSpec.getDscpTosOverwrite()).thenReturn(null);
+
+        // TODO - refactor to add flowspec profile testing as well
         final TrafficProfile trafficProfile = mock(TrafficProfile.class);
-        final ServiceClassName scn = mock(ServiceClassName.class);
-        when(scn.getValue()).thenReturn(scnValue);
-        when(trafficProfile.getServiceClassName()).thenReturn(scn);
+        final ServiceClassNameChoice serviceClassNameChoice = mock(ServiceClassNameChoice.class);
+        final ServiceClassNameProfile serviceClassNameProfile = mock(ServiceClassNameProfile.class);
+        final ServiceClassName serviceClassName = mock(ServiceClassName.class);
+        when(serviceClassName.getValue()).thenReturn(scnValue);
+        when(serviceClassNameProfile.getServiceClassName()).thenReturn(serviceClassName);
+        when(serviceClassNameChoice.getServiceClassNameProfile()).thenReturn(serviceClassNameProfile);
+        when(trafficProfile.getTrafficProfileChoice()).thenReturn(serviceClassNameChoice);
         when(gate.getTrafficProfile()).thenReturn(trafficProfile);
 
         // TODO - write tests when this is null and ExtClassifier or Ipv6Classifier objects are not null
@@ -485,7 +503,8 @@ public class PCMMServiceTest {
         gateBuilder.setAmId(ccap.getAmId());
         gateBuilder.setSubscriberId(addrSubId);
         // force gateSpec.Direction to align with SCN direction
-        final ServiceClassName scn = gateReq.getTrafficProfile().getServiceClassName();
+        final ServiceClassName scn =
+            ((ServiceClassNameChoice)gateReq.getTrafficProfile().getTrafficProfileChoice()).getServiceClassNameProfile().getServiceClassName();
         if (scn != null) {
             gateBuilder.setGateSpec(gateReq.getGateSpec(), direction);
         } else {
index edd9c386aef6bc9a623fc5ec4aa1ee292367ddb4..3df76b46fcf6baf809a0d843c0ec5d6dab8910f7 100644 (file)
@@ -21,7 +21,7 @@ import com.google.common.collect.Maps;
 import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.CcapValidatorTest;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
index fe140dee619c66057ba719e3fbecce07087b37e3..25090ac5c9f6ce4619a3bc8c4beb7cdc5a4d8855 100644 (file)
@@ -14,10 +14,10 @@ import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
 
 /**
  * @author rvail
index 640c234a1ae6116d0db701396d60249615fd5f05..2c7f8c11b415e55d7e7eac0d86ca64d5d880e2af 100644 (file)
@@ -14,19 +14,19 @@ import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
 
 /**
  * @author rvail
index fbe5e9173738936b3b75b4f4d3a9b1fda31d6e7b..ae28fba891981052ce99d7eaf0feb7d8d9a5e33b 100644 (file)
@@ -14,23 +14,23 @@ import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
 
 /**
  * @author rvail
index 908de531d1a15cc81ae6d5a9db19b5619e550f17..3466678cfffa9653d68d9aa69157f7c354edf604 100644 (file)
@@ -16,7 +16,7 @@ import org.opendaylight.controller.packetcable.provider.validation.ValidationExc
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.ConnectionValidator;
 import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.ConnectionValidatorTest;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
 
 /**
  * @author rvail
index 4260a6a6a972d2bff2447fb0509c7c2ba45198d2..6394c20af402583ab6ad4ac1a9b77f743220d874 100644 (file)
@@ -13,8 +13,8 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.AmIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.AmIdBuilder;
 
 /**
  * @author rvail
index a76b1f6d8450cd55f2e019417bb9ec0a50dd4a2e..316a19173da793a91b14afa422b5742b42048e13 100644 (file)
@@ -14,9 +14,9 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.CcapBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.CcapBuilder;
 
 /**
  * @author rvail
index b5bd4948e658709841791dcb011fb9adf24917f7..cfa318c5e0480f39eaf600e2b58ae212036dc6c4 100644 (file)
@@ -14,9 +14,9 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.Ccaps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.CcapsBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.Ccaps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.CcapsBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccaps.Ccap;
 
 /**
  * @author rvail
index 992e91902a945d99c4cd28fbfe04fe9bdd387c65..8eafb18c5579009c724eaae7b2294f905b2c5c17 100644 (file)
@@ -16,8 +16,8 @@ import org.opendaylight.controller.packetcable.provider.validation.Validator;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ccap.attributes.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ccap.attributes.ConnectionBuilder;
 
 /**
  * @author rvail
index be41f6e46cf0e0b5b886644f7e5b7b8f86c3c9a4..4b42c88df9e27c5b109aa49c2301ff8e222578fb 100644 (file)
@@ -13,8 +13,8 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.App;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.AppBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.App;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.AppBuilder;
 
 /**
  * @author rvail
index 0e8f5dc32551ecae2d16a4d6da172f45f6ecbca5..358776ac3342f6409f59646b23cca3e01a2d135b 100644 (file)
@@ -14,8 +14,8 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.Apps;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.AppsBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.Apps;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.AppsBuilder;
 
 /**
  * @author rvail
index b7177b1bcea32c4dbfe310cf905b5198af02fab3..15d018dba85d5d1524720f2da2a9e39f94af687d 100644 (file)
@@ -13,10 +13,10 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gate.spec.GateSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gate.spec.GateSpecBuilder;
 
 /**
  * @author rvail
index 14173233012cc251e77909d0a1c5cc35809121ed..9b21b5ccf394133e36743b63efd6feb739f85dc6 100644 (file)
@@ -14,8 +14,8 @@ 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.controller.packetcable.provider.validation.impl.validators.qos.classifier.ClassifiersValidatorTest;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder;
 
 /**
  * @author rvail
index 3e15da56d885bcd5c8b00764fa5070eed6917afa..7b873ef535d2917a1d128fccc337d6d311212201 100644 (file)
@@ -14,8 +14,8 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder;
 
 /**
  * @author rvail
index d198227f2f0d21bd71ad1c3b5070e7be0a522f65..8f74547b9f48ef0e1134277f567c8aa01f185956 100644 (file)
@@ -13,8 +13,8 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.Subscriber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.Subscriber;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder;
 
 /**
  * @author rvail
index 9656160dadcd27f71b4f1dcc0484900fce453c26..9bb0da19d1cb3bbe153cbacd44d323904fc990c6 100644 (file)
@@ -14,8 +14,8 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.Subscribers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.gates.apps.app.SubscribersBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.Subscribers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.gates.apps.app.SubscribersBuilder;
 
 /**
  * @author rvail
index fdf51e1edcf2e4cadecc362e2cab2bb0aaa1a16c..f73ba1e2e04f497fb43492fc4863ec708724e387 100644 (file)
@@ -13,9 +13,13 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfile;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.serviceclass.name.profile.ServiceClassNameProfileBuilder;
 
 /**
  * @author rvail
@@ -39,12 +43,12 @@ public class TrafficProfileValidatorTest {
         validator.validate(buildValidTrafficProfile(), null);
     }
 
-    @Test
+    @Test(expected = ValidationException.class)
     public void nullServiceClassName() throws ValidationException {
-        final TrafficProfile trafficProfile = new TrafficProfileBuilder(buildValidTrafficProfile())
-                .setServiceClassName(null)
-                .build();
-        validator.validate(buildValidTrafficProfile(), extentParams.getCurrentParam());
+        final ServiceClassNameProfile serviceClassNameProfile = new ServiceClassNameProfileBuilder().setServiceClassName(null).build();
+        final TrafficProfile trafficProfile =
+            new TrafficProfileBuilder().setTrafficProfileChoice(new ServiceClassNameChoiceBuilder().setServiceClassNameProfile(serviceClassNameProfile).build()).build();
+        validator.validate(trafficProfile, extentParams.getCurrentParam());
     }
 
     @Test
@@ -54,8 +58,7 @@ public class TrafficProfileValidatorTest {
 
 
     public static TrafficProfile buildValidTrafficProfile() {
-        return new TrafficProfileBuilder()
-                .setServiceClassName(new ServiceClassName("unit-test-scn"))
-                .build();
+        final ServiceClassNameProfile serviceClassNameProfile = new ServiceClassNameProfileBuilder().setServiceClassName(new ServiceClassName("unit-test-scn")).build();
+        return new TrafficProfileBuilder().setTrafficProfileChoice(new ServiceClassNameChoiceBuilder().setServiceClassNameProfile(serviceClassNameProfile).build()).build();
     }
 }
index ab362441567030336fecbd3f4f223cf660814be5..42dab16ef836e3c4cdca27ee603c7873011a76dd 100644 (file)
@@ -13,12 +13,12 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoiceBuilder;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 
 /**
index 154bd7ed383604f0c75fa4ead3ddd96bb081d685..0fb083e5875cb63e68684ae32150ef6c5b93b5e6 100644 (file)
@@ -13,8 +13,8 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainerBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainerBuilder;
 
 /**
  * @author rvail
index 90391e48219c2e1e6ae2f68a9c00b2376d415aeb..faa4779bb4eb4556edb769e39d24d74af2614896 100644 (file)
@@ -15,10 +15,10 @@ import org.opendaylight.controller.packetcable.provider.validation.ValidationExc
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.classifier.ClassifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.classifier.ClassifierBuilder;
 
 /**
  * @author rvail
index 2d5a5cbd299b21d151f19c7263861246afc11c2e..f2c3c3ff48f468058aa308b9a1c68f44725e4af9 100644 (file)
@@ -15,9 +15,9 @@ import org.junit.Test;
 import org.opendaylight.controller.packetcable.provider.test.rules.Params;
 import org.opendaylight.controller.packetcable.provider.validation.ValidationException;
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.ClassifiersBuilder;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.ClassifiersBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.classifier.attributes.classifiers.ClassifierContainer;
 
 /**
  * @author rvail
index 3cb4740bd2b989bc3dbb26f723acfb0a35d118f3..02dd4b7c0d531f90c7d3c48de68f759a309afa2b 100644 (file)
@@ -15,11 +15,11 @@ import org.opendaylight.controller.packetcable.provider.validation.ValidationExc
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ClassifierActivationState;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ext.classifier.ExtClassifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ClassifierActivationState;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ext.classifier.ExtClassifierBuilder;
 
 /**
  * @author rvail
index e872132d7bf9ae405b8437552c8e7c14e6619d02..ae1573c9bc8141cf7385104297ba22388229d914 100644 (file)
@@ -15,11 +15,11 @@ import org.opendaylight.controller.packetcable.provider.validation.ValidationExc
 import org.opendaylight.controller.packetcable.provider.validation.Validator;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.ClassifierActivationState;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161128.pcmm.qos.ipv6.classifier.Ipv6ClassifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.ClassifierActivationState;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev161219.pcmm.qos.ipv6.classifier.Ipv6ClassifierBuilder;
 
 /**
  * @author rvail