/*
* (c) 2015 Cable Television Laboratories, Inc. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.controller.packetcable.provider;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.ServiceClassName;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.ServiceFlowDirection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.TosByte;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.TpProtocol;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.ccap.attributes.AmId;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.ccap.attributes.Connection;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.ccaps.Ccap;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.classifier.attributes.Classifiers;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.classifier.attributes.classifiers.ClassifierContainer;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.pcmm.qos.classifier.Classifier;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.pcmm.qos.gate.spec.GateSpec;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
-import org.opendaylight.yang.gen.v1.urn.packetcable.rev161107.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.ServiceClassName;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.ServiceFlowDirection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.TosByte;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.TpProtocol;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.ccap.attributes.AmId;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.ccap.attributes.Connection;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.ccaps.Ccap;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.classifier.attributes.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.classifier.attributes.classifiers.ClassifierContainer;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.flow.spec.profile.FlowSpecProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.classifier.Classifier;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.gate.spec.GateSpec;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.gate.spec.GateSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.traffic.profile.TrafficProfile;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.traffic.profile.TrafficProfileBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.traffic.profile.traffic.profile.TrafficProfileChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.FlowSpecChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoice;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.qos.traffic.profile.traffic.profile.traffic.profile.choice.ServiceClassNameChoiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.packetcable.rev170224.pcmm.serviceclass.name.profile.ServiceClassNameProfile;
import org.pcmm.PCMMPdpAgent;
import org.pcmm.gates.IPCMMGate;
import org.pcmm.rcd.IPCMMClient;
import org.pcmm.rcd.impl.CMTS;
import org.pcmm.rcd.impl.CMTSConfig;
import org.umu.cops.stack.COPSClientSI;
-import org.umu.cops.stack.COPSContext;
import org.umu.cops.stack.COPSContext.RType;
+import org.umu.cops.stack.COPSContext;
import org.umu.cops.stack.COPSData;
-import org.umu.cops.stack.COPSDecision;
import org.umu.cops.stack.COPSDecision.Command;
import org.umu.cops.stack.COPSDecision.DecisionFlag;
+import org.umu.cops.stack.COPSDecision;
import org.umu.cops.stack.COPSDecisionMsg;
import org.umu.cops.stack.COPSHandle;
import org.umu.cops.stack.COPSMsg;
when(gateSpec.getDirection()).thenReturn(direction);
// TODO - make sure to write a test when this value is not null
when(gateSpec.getDscpTosOverwrite()).thenReturn(null);
+
+ // TODO - refactor to add flowspec profile testing as well
final TrafficProfile trafficProfile = mock(TrafficProfile.class);
- final ServiceClassName scn = mock(ServiceClassName.class);
- when(scn.getValue()).thenReturn(scnValue);
- when(trafficProfile.getServiceClassName()).thenReturn(scn);
+ final ServiceClassNameChoice serviceClassNameChoice = mock(ServiceClassNameChoice.class);
+ final ServiceClassNameProfile serviceClassNameProfile = mock(ServiceClassNameProfile.class);
+ final ServiceClassName serviceClassName = mock(ServiceClassName.class);
+ when(serviceClassName.getValue()).thenReturn(scnValue);
+ when(serviceClassNameProfile.getServiceClassName()).thenReturn(serviceClassName);
+ when(serviceClassNameChoice.getServiceClassNameProfile()).thenReturn(serviceClassNameProfile);
+ when(trafficProfile.getTrafficProfileChoice()).thenReturn(serviceClassNameChoice);
when(gate.getTrafficProfile()).thenReturn(trafficProfile);
// TODO - write tests when this is null and ExtClassifier or Ipv6Classifier objects are not null
gateBuilder.setAmId(ccap.getAmId());
gateBuilder.setSubscriberId(addrSubId);
// force gateSpec.Direction to align with SCN direction
- final ServiceClassName scn = gateReq.getTrafficProfile().getServiceClassName();
+ final ServiceClassName scn =
+ ((ServiceClassNameChoice)gateReq.getTrafficProfile().getTrafficProfileChoice()).getServiceClassNameProfile().getServiceClassName();
if (scn != null) {
- gateBuilder.setGateSpec(gateReq.getGateSpec(), direction);
+ final GateSpecBuilder gateSpecBuilder = new GateSpecBuilder();
+ gateSpecBuilder.setDirection(direction);
+ gateSpecBuilder.setDscpTosMask(gateReq.getGateSpec().getDscpTosMask());
+ gateSpecBuilder.setDscpTosOverwrite(gateReq.getGateSpec().getDscpTosOverwrite());
+ gateSpecBuilder.setSessionClassId(gateReq.getGateSpec().getSessionClassId());
+ gateSpecBuilder.setInactivityTimer(gateReq.getGateSpec().getInactivityTimer());
+ final GateSpec gateSpec = gateSpecBuilder.build();
+ gateBuilder.setGateSpec(gateSpec);
} else {
// not an SCN gate
- gateBuilder.setGateSpec(gateReq.getGateSpec(), null);
+ gateBuilder.setGateSpec(gateReq.getGateSpec());
}
gateBuilder.setTrafficProfile(gateReq.getTrafficProfile());