4 package org.pcmm.rcd.impl;
6 import org.pcmm.PCMMConstants;
7 import org.pcmm.PCMMGlobalConfig;
8 import org.pcmm.PCMMProperties;
9 import org.pcmm.gates.*;
10 import org.pcmm.gates.IGateSpec.DSCPTOS;
11 import org.pcmm.gates.IGateSpec.Direction;
12 import org.pcmm.gates.impl.*;
13 import org.pcmm.messages.IMessage.MessageProperties;
14 import org.pcmm.messages.impl.MessageFactory;
15 import org.pcmm.objects.MMVersionInfo;
16 import org.pcmm.rcd.IPCMMPolicyServer;
17 import org.pcmm.utils.PCMMException;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20 import org.umu.cops.prpdp.COPSPdpConnection;
21 import org.umu.cops.prpdp.COPSPdpDataProcess;
22 import org.umu.cops.stack.*;
24 import java.io.IOException;
25 import java.net.InetAddress;
26 import java.net.Socket;
27 import java.net.UnknownHostException;
28 import java.util.Properties;
33 public class PCMMPolicyServer extends AbstractPCMMServer implements IPCMMPolicyServer {
35 public final static Logger logger = LoggerFactory.getLogger(PCMMPolicyServer.class);
38 * since PCMMPolicyServer can connect to multiple CMTS (PEP) we need to
39 * manage each connection in a separate thread.
42 public PCMMPolicyServer() {
50 * org.pcmm.rcd.IPCMMPolicyServer#requestCMTSConnection(java.lang.String)
52 public IPSCMTSClient requestCMTSConnection(String host) {
54 InetAddress address = InetAddress.getByName(host);
55 return requestCMTSConnection(address);
56 } catch (UnknownHostException e) {
57 logger.error(e.getMessage());
66 * org.pcmm.rcd.IPCMMPolicyServer#requestCMTSConnection(java.net.InetAddress
69 public IPSCMTSClient requestCMTSConnection(InetAddress host) {
70 IPSCMTSClient client = new PSCMTSClient();
72 if (client.tryConnect(host, PCMMProperties.get(PCMMConstants.PCMM_PORT, Integer.class))) {
73 boolean endNegotiation = false;
74 while (!endNegotiation) {
75 logger.debug("waiting for OPN message from CMTS");
76 COPSMsg opnMessage = client.readMessage();
78 if (opnMessage.getHeader().isAClientClose()) {
79 COPSError error = ((COPSClientCloseMsg) opnMessage).getError();
80 logger.debug("CMTS requetsed Client-Close");
81 throw new PCMMException(new PCMMError(error.getErrCode(), error.getErrSubCode()));
84 if (opnMessage.getHeader().isAClientOpen()) {
85 logger.debug("OPN message received from CMTS");
86 COPSClientOpenMsg opn = (COPSClientOpenMsg) opnMessage;
87 if (opn.getClientSI() == null) {
88 throw new COPSException("CMTS shoud have sent MM version info in Client-Open message");
90 // set the version info
91 MMVersionInfo vInfo = new MMVersionInfo(opn.getClientSI().getData().getData());
92 client.setVersionInfo(vInfo);
94 "CMTS sent MMVersion info : major:" + vInfo.getMajorVersionNB() + " minor:" +
95 vInfo.getMinorVersionNB()); //
96 if (client.getVersionInfo().getMajorVersionNB() ==
97 client.getVersionInfo().getMinorVersionNB()) {
98 // send a CC since CMTS has exhausted all
99 // protocol selection attempts
100 throw new COPSException("CMTS exhausted all protocol selection attempts");
104 Properties prop = new Properties();
105 logger.debug("send CAT to the CMTS ");
106 COPSMsg catMsg = MessageFactory.getInstance().create(COPSHeader.COPS_OP_CAT, prop);
107 client.sendRequest(catMsg);
109 COPSMsg reqMsg = client.readMessage();
111 if (reqMsg.getHeader().isAClientClose()) {
112 COPSError error = ((COPSClientCloseMsg) opnMessage).getError();
113 logger.debug("CMTS requetsed Client-Close");
114 throw new PCMMException(new PCMMError(error.getErrCode(), error.getErrSubCode()));
117 if (reqMsg.getHeader().isARequest()) {
118 logger.debug("Received REQ message form CMTS");
119 // end connection attempts
120 COPSReqMsg req = (COPSReqMsg) reqMsg;
121 // set the client handle to be used later by the
123 client.setClientHandle(req.getClientHandle().getId().str());
124 COPSPdpDataProcess processor = null;
125 COPSPdpConnection copsPdpConnection = new COPSPdpConnection(opn.getPepId(),
126 ((AbstractPCMMClient) client).getSocket(), processor);
128 .setKaTimer(((COPSClientAcceptMsg) catMsg).getKATimer().getTimerVal());
129 pool.schedule(pool.adapt(copsPdpConnection));
130 endNegotiation = true;
132 throw new COPSException("Can't understand request");
136 throw new COPSException("Can't understand request");
141 // else raise exception.
142 } catch (Exception e) {
143 logger.error(e.getMessage());
144 // no need to keep connection.
152 protected IPCMMClientHandler getPCMMClientHandler(Socket socket) {
153 // TODO Auto-generated method stub
158 * @see {@link IPSCMTSClient}
160 /* public */static class PSCMTSClient extends AbstractPCMMClient implements IPSCMTSClient {
164 private short transactionID;
165 private short classifierID;
168 public PSCMTSClient() {
170 logger.info("Client " + getClass() + hashCode() + " crated and started");
173 public PSCMTSClient(Socket socket) {
177 public boolean gateSet() {
178 logger.debug("Sending Gate-Set message");
179 if (!isConnected()) {
180 throw new IllegalArgumentException("Not connected");
182 // XXX check if other values should be provided
184 ITrafficProfile trafficProfile = buildTrafficProfile();
185 // PCMMGlobalConfig.DefaultBestEffortTrafficRate);
186 ITransactionID trID = new TransactionID();
187 // set transaction ID to gate set
188 trID.setGateCommandType(ITransactionID.GateSet);
189 transactionID = (transactionID == 0 ? (short) (Math.random() * hashCode()) : transactionID);
190 trID.setTransactionIdentifier(transactionID);
192 IAMID amid = getAMID();
194 IGateSpec gateSpec = getGateSpec();
195 ISubscriberID subscriberID = new SubscriberID();
196 // Classifier if MM version <4, Extended Classifier else
197 IClassifier eclassifier = getClassifier(subscriberID);
199 IPCMMGate gate = new PCMMGateReq();
200 gate.setTransactionID(trID);
202 gate.setSubscriberID(subscriberID);
203 gate.setGateSpec(gateSpec);
204 gate.setTrafficProfile(trafficProfile);
205 gate.setClassifier(eclassifier);
206 byte[] data = gate.getData();
208 // configure message properties
209 Properties prop = new Properties();
210 prop.put(MessageProperties.CLIENT_HANDLE, getClientHandle());
211 prop.put(MessageProperties.DECISION_CMD_CODE, COPSDecision.DEC_INSTALL);
212 prop.put(MessageProperties.DECISION_FLAG, (short) COPSDecision.DEC_NULL);
213 prop.put(MessageProperties.GATE_CONTROL, new COPSData(data, 0, data.length));
214 COPSMsg decisionMsg = MessageFactory.getInstance().create(COPSHeader.COPS_OP_DEC, prop);
215 // ** Send the GateSet Decision
217 sendRequest(decisionMsg);
218 // TODO check on this ?
219 // waits for the gate-set-ack or error
220 COPSMsg responseMsg = readMessage();
221 if (responseMsg.getHeader().isAReport()) {
222 logger.info("processing received report from CMTS");
223 COPSReportMsg reportMsg = (COPSReportMsg) responseMsg;
224 if (reportMsg.getClientSI().size() == 0) {
225 logger.debug("CMTS responded with an empty SI");
228 COPSClientSI clientSI = (COPSClientSI) reportMsg.getClientSI().elementAt(0);
229 IPCMMGate responseGate = new PCMMGateReq(clientSI.getData().getData());
230 IPCMMError error = responseGate.getError();
232 logger.error(error.toString());
235 logger.info("the CMTS has sent TransactionID :" + responseGate.getTransactionID());
236 if (responseGate.getTransactionID() != null &&
237 responseGate.getTransactionID().getGateCommandType() == ITransactionID.GateSetAck) {
238 logger.info("the CMTS has sent a Gate-Set-Ack response");
239 // here CMTS responded that he acknowledged the Gate-Set
240 // TODO do further check of Gate-Set-Ack GateID etc...
241 gateID = responseGate.getGateID().getGateID();
253 * @see org.pcmm.rcd.IPCMMPolicyServer#gateDelete()
256 public boolean gateDelete() {
257 if (!isConnected()) {
258 logger.error("Not connected");
261 ITransactionID trID = new TransactionID();
262 // set transaction ID to gate set
263 trID.setGateCommandType(ITransactionID.GateDelete);
264 trID.setTransactionIdentifier(transactionID);
266 IAMID amid = getAMID();
268 ISubscriberID subscriberID = new SubscriberID();
270 subscriberID.setSourceIPAddress(InetAddress.getLocalHost());
271 } catch (UnknownHostException e1) {
272 logger.error(e1.getMessage());
275 IGateID gateIdObj = new GateID();
276 gateIdObj.setGateID(gateID);
278 IPCMMGate gate = new PCMMGateReq();
279 gate.setTransactionID(trID);
281 gate.setSubscriberID(subscriberID);
282 gate.setGateID(gateIdObj);
284 // configure message properties
285 Properties prop = new Properties();
286 prop.put(MessageProperties.CLIENT_HANDLE, getClientHandle());
287 prop.put(MessageProperties.DECISION_CMD_CODE, COPSDecision.DEC_INSTALL);
288 prop.put(MessageProperties.DECISION_FLAG, (short) COPSDecision.DEC_NULL);
289 byte[] data = gate.getData();
290 prop.put(MessageProperties.GATE_CONTROL, new COPSData(data, 0, data.length));
291 COPSMsg decisionMsg = MessageFactory.getInstance().create(COPSHeader.COPS_OP_DEC, prop);
292 // ** Send the GateSet Decision
295 decisionMsg.writeData(getSocket());
296 } catch (IOException e) {
297 logger.error("Failed to send the decision, reason: " + e.getMessage());
300 // waits for the gate-delete-ack or error
301 COPSMsg responseMsg = readMessage();
302 if (responseMsg.getHeader().isAReport()) {
303 logger.info("processing received report from CMTS");
304 COPSReportMsg reportMsg = (COPSReportMsg) responseMsg;
305 if (reportMsg.getClientSI().size() == 0) {
308 COPSClientSI clientSI = (COPSClientSI) reportMsg.getClientSI().elementAt(0);
309 IPCMMGate responseGate = new PCMMGateReq(clientSI.getData().getData());
310 IPCMMError error = responseGate.getError();
312 logger.error(error.toString());
315 // here CMTS responded that he acknowledged the Gate-delete
317 ITransactionID responseTransactionID = responseGate.getTransactionID();
318 if (responseTransactionID != null &&
319 responseTransactionID.getGateCommandType() == ITransactionID.GateDeleteAck) {
320 // TODO check : Is this test needed ??
321 if (responseGate.getGateID().getGateID() == gateID &&
322 responseTransactionID.getTransactionIdentifier() == transactionID) {
323 logger.info("the CMTS has sent a Gate-Delete-Ack response");
335 * @see org.pcmm.rcd.IPCMMPolicyServer#gateInfo()
338 public boolean gateInfo() {
339 if (!isConnected()) {
340 logger.error("Not connected");
343 ITransactionID trID = new TransactionID();
344 // set transaction ID to gate set
345 trID.setGateCommandType(ITransactionID.GateInfo);
346 trID.setTransactionIdentifier(transactionID);
348 IAMID amid = getAMID();
350 ISubscriberID subscriberID = new SubscriberID();
352 subscriberID.setSourceIPAddress(InetAddress.getLocalHost());
353 } catch (UnknownHostException e1) {
354 logger.error(e1.getMessage());
356 IGateID gateIdObj = new GateID();
357 gateIdObj.setGateID(gateID);
359 IPCMMGate gate = new PCMMGateReq();
360 gate.setTransactionID(trID);
362 gate.setSubscriberID(subscriberID);
363 gate.setGateID(gateIdObj);
365 // configure message properties
366 Properties prop = new Properties();
367 prop.put(MessageProperties.CLIENT_HANDLE, getClientHandle());
368 prop.put(MessageProperties.DECISION_CMD_CODE, COPSDecision.DEC_INSTALL);
369 prop.put(MessageProperties.DECISION_FLAG, (short) COPSDecision.DEC_NULL);
370 byte[] data = gate.getData();
371 prop.put(MessageProperties.GATE_CONTROL, new COPSData(data, 0, data.length));
372 COPSMsg decisionMsg = MessageFactory.getInstance().create(COPSHeader.COPS_OP_DEC, prop);
373 // ** Send the GateSet Decision
376 decisionMsg.writeData(getSocket());
377 } catch (IOException e) {
378 logger.error("Failed to send the decision, reason: " + e.getMessage());
381 // waits for the gate-Info-ack or error
382 COPSMsg responseMsg = readMessage();
383 if (responseMsg.getHeader().isAReport()) {
384 logger.info("processing received report from CMTS");
385 COPSReportMsg reportMsg = (COPSReportMsg) responseMsg;
386 if (reportMsg.getClientSI().size() == 0) {
389 COPSClientSI clientSI = (COPSClientSI) reportMsg.getClientSI().elementAt(0);
390 IPCMMGate responseGate = new PCMMGateReq(clientSI.getData().getData());
391 IPCMMError error = responseGate.getError();
392 ITransactionID responseTransactionID = responseGate.getTransactionID();
394 logger.debug(responseTransactionID != null ? responseTransactionID.toString() :
395 "returned Transaction ID is null");
396 logger.error(error.toString());
399 // here CMTS responded that he acknowledged the Gate-Info
402 * <Gate-Info-Ack> = <ClientSI Header> <TransactionID> <AMID>
403 * <SubscriberID> <GateID> [<Event Generation Info>] <Gate-Spec>
404 * <classifier> <classifier...>] <Traffic Profile> <Gate Time
405 * Info> <Gate Usage Info> [<Volume-Based Usage Limit>] [<PSID>]
406 * [<Msg-Receipt-Key>] [<UserID>] [<Time-Based Usage Limit>]
407 * [<Opaque Data>] <GateState> [<SharedResourceID>]
409 if (responseTransactionID != null &&
410 responseTransactionID.getGateCommandType() == ITransactionID.GateInfoAck) {
411 // TODO need to implement missing data wrapper
412 logger.info("TransactionID : " + responseTransactionID.toString());
413 logger.info("AMID :" + String.valueOf(responseGate.getAMID()));
414 logger.info("SubscriberID :" + String.valueOf(responseGate.getSubscriberID()));
415 logger.info("Traffic Profile :" + String.valueOf(responseGate.getTrafficProfile()));
416 logger.info("Gate Time Info :");
417 logger.info("Gate Usage Info :");
418 logger.info("GateState :");
429 * @see org.pcmm.rcd.IPCMMPolicyServer#synchronize()
432 public boolean gateSynchronize() {
433 if (!isConnected()) {
434 logger.error("Not connected");
437 ITransactionID trID = new TransactionID();
438 // set transaction ID to gate set
439 trID.setGateCommandType(ITransactionID.SynchRequest);
440 trID.setTransactionIdentifier(transactionID);
442 IAMID amid = getAMID();
444 ISubscriberID subscriberID = new SubscriberID();
446 subscriberID.setSourceIPAddress(InetAddress.getLocalHost());
447 } catch (UnknownHostException e1) {
448 logger.error(e1.getMessage());
450 IGateID gateIdObj = new GateID();
451 gateIdObj.setGateID(gateID);
453 IPCMMGate gate = new PCMMGateReq();
454 gate.setTransactionID(trID);
456 gate.setSubscriberID(subscriberID);
457 gate.setGateID(gateIdObj);
459 // configure message properties
460 Properties prop = new Properties();
461 prop.put(MessageProperties.CLIENT_HANDLE, getClientHandle());
462 prop.put(MessageProperties.DECISION_CMD_CODE, COPSDecision.DEC_INSTALL);
463 prop.put(MessageProperties.DECISION_FLAG, (short) COPSDecision.DEC_NULL);
464 byte[] data = gate.getData();
465 prop.put(MessageProperties.GATE_CONTROL, new COPSData(data, 0, data.length));
466 COPSMsg decisionMsg = MessageFactory.getInstance().create(COPSHeader.COPS_OP_DEC, prop);
467 // ** Send the GateSet Decision
470 decisionMsg.writeData(getSocket());
471 } catch (IOException e) {
472 logger.error("Failed to send the decision, reason: " + e.getMessage());
475 // waits for the gate-Info-ack or error
476 COPSMsg responseMsg = readMessage();
477 if (responseMsg.getHeader().isAReport()) {
478 logger.info("processing received report from CMTS");
479 COPSReportMsg reportMsg = (COPSReportMsg) responseMsg;
480 if (reportMsg.getClientSI().size() == 0) {
483 COPSClientSI clientSI = (COPSClientSI) reportMsg.getClientSI().elementAt(0);
484 IPCMMGate responseGate = new PCMMGateReq(clientSI.getData().getData());
485 IPCMMError error = responseGate.getError();
486 ITransactionID responseTransactionID = responseGate.getTransactionID();
488 logger.debug(responseTransactionID != null ? responseTransactionID.toString() :
489 "returned Transaction ID is null");
490 logger.error(error.toString());
493 // here CMTS responded that he acknowledged the Gate-Info
496 * <Gate-Info-Ack> = <ClientSI Header> <TransactionID> <AMID>
497 * <SubscriberID> <GateID> [<Event Generation Info>] <Gate-Spec>
498 * <classifier> <classifier...>] <Traffic Profile> <Gate Time
499 * Info> <Gate Usage Info> [<Volume-Based Usage Limit>] [<PSID>]
500 * [<Msg-Receipt-Key>] [<UserID>] [<Time-Based Usage Limit>]
501 * [<Opaque Data>] <GateState> [<SharedResourceID>]
503 if (responseTransactionID != null &&
504 responseTransactionID.getGateCommandType() == ITransactionID.SynchReport) {
505 // TODO need to implement missing data wrapper
506 logger.info("TransactionID : " + responseTransactionID.toString());
507 logger.info("AMID :" + String.valueOf(responseGate.getAMID()));
508 logger.info("SubscriberID :" + String.valueOf(responseGate.getSubscriberID()));
509 logger.info("Traffic Profile :" + String.valueOf(responseGate.getTrafficProfile()));
510 logger.info("Gate Time Info :");
511 logger.info("Gate Usage Info :");
512 logger.info("GateState :");
520 private IAMID getAMID() {
521 IAMID amid = new AMID();
522 amid.setApplicationType((short) 1);
523 amid.setApplicationMgrTag((short) 1);
527 private IClassifier getClassifier(ISubscriberID subscriberID) {
528 IClassifier classifier;
529 // if the version major is less than 4 we need to use Classifier
530 if (getVersionInfo().getMajorVersionNB() >= 4) {
531 classifier = new ExtendedClassifier();
532 // eclassifier.setProtocol(IClassifier.Protocol.NONE);
533 classifier.setProtocol(IClassifier.Protocol.TCP);
535 InetAddress subIP = InetAddress.getByName(PCMMGlobalConfig.SubscriberID);
536 InetAddress srcIP = InetAddress.getByName(PCMMGlobalConfig.srcIP);
537 InetAddress dstIP = InetAddress.getByName(PCMMGlobalConfig.dstIP);
539 InetAddress.getByName(PCMMProperties.get(PCMMConstants.DEFAULT_MASK, String.class));
540 subscriberID.setSourceIPAddress(subIP);
541 classifier.setSourceIPAddress(srcIP);
542 classifier.setDestinationIPAddress(dstIP);
543 ((IExtendedClassifier) classifier).setIPDestinationMask(mask);
544 ((IExtendedClassifier) classifier).setIPSourceMask(mask);
545 } catch (UnknownHostException unae) {
546 logger.error("Error getByName", unae);
548 ((IExtendedClassifier) classifier).setSourcePortStart(PCMMGlobalConfig.srcPort);
549 ((IExtendedClassifier) classifier).setSourcePortEnd(PCMMGlobalConfig.srcPort);
550 ((IExtendedClassifier) classifier).setDestinationPortStart(PCMMGlobalConfig.dstPort);
551 ((IExtendedClassifier) classifier).setDestinationPortEnd(PCMMGlobalConfig.dstPort);
552 ((IExtendedClassifier) classifier).setActivationState((byte) 0x01);
554 * check if we have a stored value of classifierID else we just
555 * create one eclassifier.setClassifierID((short) 0x01);
557 ((IExtendedClassifier) classifier)
558 .setClassifierID((short) (classifierID == 0 ? Math.random() * hashCode() : classifierID));
560 // eclassifier.setClassifierID((short) 1);
561 ((IExtendedClassifier) classifier).setAction((byte) 0x00);
562 // XXX - temp default until Gate Modify is hacked in
563 // eclassifier.setPriority(PCMMGlobalConfig.EClassifierPriority);
564 classifier.setPriority((byte) 65);
567 classifier = new Classifier();
568 classifier.setProtocol(IClassifier.Protocol.TCP);
570 InetAddress subIP = InetAddress.getByName(PCMMGlobalConfig.SubscriberID);
571 InetAddress srcIP = InetAddress.getByName(PCMMGlobalConfig.srcIP);
572 InetAddress dstIP = InetAddress.getByName(PCMMGlobalConfig.dstIP);
573 subscriberID.setSourceIPAddress(subIP);
574 classifier.setSourceIPAddress(srcIP);
575 classifier.setDestinationIPAddress(dstIP);
576 } catch (UnknownHostException unae) {
577 logger.error("Error getByName", unae);
579 classifier.setSourcePort(PCMMGlobalConfig.srcPort);
580 classifier.setDestinationPort(PCMMGlobalConfig.dstPort);
586 * @return GateSpec object
588 private IGateSpec getGateSpec() {
589 IGateSpec gateSpec = new GateSpec();
590 gateSpec.setDirection(Direction.UPSTREAM);
591 gateSpec.setDSCP_TOSOverwrite(DSCPTOS.OVERRIDE);
592 gateSpec.setTimerT1(PCMMGlobalConfig.GateT1);
593 gateSpec.setTimerT2(PCMMGlobalConfig.GateT2);
594 gateSpec.setTimerT3(PCMMGlobalConfig.GateT3);
595 gateSpec.setTimerT4(PCMMGlobalConfig.GateT4);
600 * creates a traffic profile with 3 envelops (Authorized, Reserved and
603 * @return Traffic profile
605 private ITrafficProfile buildTrafficProfile() {
606 ITrafficProfile trafficProfile = new BestEffortService(BestEffortService.DEFAULT_ENVELOP);
607 ((BestEffortService) trafficProfile).getAuthorizedEnvelop()
608 .setTrafficPriority(BestEffortService.DEFAULT_TRAFFIC_PRIORITY);
609 ((BestEffortService) trafficProfile).getAuthorizedEnvelop()
610 .setMaximumTrafficBurst(BestEffortService.DEFAULT_MAX_TRAFFIC_BURST);
611 ((BestEffortService) trafficProfile).getAuthorizedEnvelop()
612 .setRequestTransmissionPolicy(PCMMGlobalConfig.BETransmissionPolicy);
613 ((BestEffortService) trafficProfile).getAuthorizedEnvelop()
614 .setMaximumSustainedTrafficRate(PCMMGlobalConfig.DefaultLowBestEffortTrafficRate);
615 // PCMMGlobalConfig.DefaultBestEffortTrafficRate);
617 ((BestEffortService) trafficProfile).getReservedEnvelop()
618 .setTrafficPriority(BestEffortService.DEFAULT_TRAFFIC_PRIORITY);
619 ((BestEffortService) trafficProfile).getReservedEnvelop()
620 .setMaximumTrafficBurst(BestEffortService.DEFAULT_MAX_TRAFFIC_BURST);
621 ((BestEffortService) trafficProfile).getReservedEnvelop()
622 .setRequestTransmissionPolicy(PCMMGlobalConfig.BETransmissionPolicy);
623 ((BestEffortService) trafficProfile).getReservedEnvelop()
624 .setMaximumSustainedTrafficRate(PCMMGlobalConfig.DefaultLowBestEffortTrafficRate);
625 // PCMMGlobalConfig.DefaultBestEffortTrafficRate);
627 ((BestEffortService) trafficProfile).getCommittedEnvelop()
628 .setTrafficPriority(BestEffortService.DEFAULT_TRAFFIC_PRIORITY);
629 ((BestEffortService) trafficProfile).getCommittedEnvelop()
630 .setMaximumTrafficBurst(BestEffortService.DEFAULT_MAX_TRAFFIC_BURST);
631 ((BestEffortService) trafficProfile).getCommittedEnvelop()
632 .setRequestTransmissionPolicy(PCMMGlobalConfig.BETransmissionPolicy);
633 ((BestEffortService) trafficProfile).getCommittedEnvelop()
634 .setMaximumSustainedTrafficRate(PCMMGlobalConfig.DefaultLowBestEffortTrafficRate);
635 return trafficProfile;
639 public short getClassifierId() {
644 public short getTransactionId() {
645 return transactionID;
649 public int getGateId() {