summaryrefslogtreecommitdiff
path: root/ace/QoS.cpp
blob: 620a58c436fa78be4e794977c4fed5a6816a50a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// $Id$

#define ACE_BUILD_DLL

#include "ace/ACE_QoS.h"

ACE_RCSID( ace, "$Id$" )

ACE_ALLOC_HOOK_DEFINE( ACE_QoS )

class Ace_Export ACE_QoS
{
	// = TITLE
	//	Define the basic QoS parameters

public:
	// = Initializattion and termination methods.
	// Default
	ACE_QoS::ACE_QoS( void )
	{
		ACE_TRACE( "ACE_QoS::ACE_QoS" );
	}

	// set CBR rate
	int ACE_QoS::set_cbr_rate( int rate )
	{
		ACE_TRACE( "ACE_QoS::set_cbr_rate" );

#if defined (ACE_HAS_FORE_ATM_WS2)
		AAL_PARAMETERS_IE					ie_aalparams;
		ATM_TRAFFIC_DESCRIPTOR_IE			ie_td;
		ATM_BROADBAND_BEARER_CAPBILITY_IE	ie_bbc;
		ATM_QOS_CLASS_IE					ie_qos;
		Q2931_IE							*ie_ptr;
		int size;

		ie_aalparams.AALType = AALTYPE_5;
		ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize = 1516; 
		ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize = 1516; 
		ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE;
		ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL;

		size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_IE);

		ie_td.Forward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
		ie_td.Forward.PeakCellRate_CLP01 = cellRate;
    	ie_td.Forward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT;
		ie_td.Forward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
		ie_td.Forward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
		ie_td.Forward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
		ie_td.Forward.Tagging = SAP_FIELD_ABSENT;

		ie_td.Backward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
		ie_td.Backward.PeakCellRate_CLP01 = cellRate;
		ie_td.Backward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT;
		ie_td.Backward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
		ie_td.Backward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
		ie_td.Backward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
		ie_td.Backward.Tagging = SAP_FIELD_ABSENT;

		ie_td.BestEffort = 0; // Note: this must be set to zero for CBR

		size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_TRAFFIC_DESCRIPTOR_IE);

		ie_bbc.BearerClass = BCOB_X;
		ie_bbc.TrafficType = TT_CBR;
		ie_bbc.TimingRequirements = TR_END_TO_END;
		ie_bbc.ClippingSusceptability = CLIP_NOT;
		ie_bbc.UserPlaneConnectionConfig = UP_P2P;

		size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) 
			+ sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE);

		ie_qos.QOSClassForward = QOS_CLASS1;
		ie_qos.QOSClassBackward = QOS_CLASS1; 

		size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE);
	
		qos_.ProviderSpecific.buf = (char *) malloc(size);
		qos_.ProviderSpecific.len = size;
		memset(qos_.ProviderSpecific.buf, 0, size);

		ie_ptr = (Q2931_IE *) qos_.ProviderSpecific.buf;
		ie_ptr->IEType = IE_AALParameters;
		ie_ptr->IELength = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) 
						+ sizeof(AAL_PARAMETERS_IE);
    	memcpy(ie_ptr->IE, &ie_aalparams, sizeof(AAL_PARAMETERS_IE));

		ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
		ie_ptr->IEType = IE_TrafficDescriptor;
		ie_ptr->IELength = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_TRAFFIC_DESCRIPTOR_IE);
		memcpy(ie_ptr->IE, &ie_td, sizeof(ATM_TRAFFIC_DESCRIPTOR_IE));

		ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
		ie_ptr->IEType = IE_BroadbandBearerCapability;
		ie_ptr->IELength = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE);
		memcpy(ie_ptr->IE, &ie_bbc, sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE));
	
		ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
		ie_ptr->IEType = IE_QOSClass;
		ie_ptr->IELength = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE);
		memcpy(ie_ptr->IE, &ie_qos, sizeof(ATM_QOS_CLASS_IE));

		qos_.SendingFlowspec.TokenRate = -1;
		qos_.SendingFlowspec.TokenBucketSize = -1;
		qos_.SendingFlowspec.PeakBandwidth = -1;
		qos_.SendingFlowspec.Latency = -1;
		qos_.SendingFlowspec.DelayVariation = -1;
		qos_.SendingFlowspec.LevelOfGuarantee = BestEffortService ; 
		// will most probably be ignored by the service provider
		qos_.SendingFlowspec.CostOfCall = 0;

		qos_.ReceivingFlowspec.TokenRate = -1;
		qos_.ReceivingFlowspec.TokenBucketSize = -1;
		qos_.ReceivingFlowspec.PeakBandwidth = -1;
		qos_.ReceivingFlowspec.Latency = -1;
		qos_.ReceivingFlowspec.DelayVariation = -1;
		qos_.ReceivingFlowspec.LevelOfGuarantee = BestEffortService; 
		// will most probably be ignored by the service provider
		qos_.ReceivingFlowspec.CostOfCall = 0;
#elif defined (ACE_HAS_FORE_ATM_XTI)
		// XTI part
#endif // ACE_HAS_FORE_ATM_WS2 && ACE_HAS_FORE_ATM_XTI
	}

	QOS ACE_QoS::get_qos( void )
	{
		return qos_;
	}
}