[HEADERS]
[reactos.git] / reactos / include / ddk / atm.h
1 /*
2 * atm.h
3 *
4 * ATM support
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef _ATM_H
24 #define _ATM_H
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 typedef ULONG ATM_ADDRESSTYPE;
31
32 #define SAP_TYPE_NSAP 1
33 #define SAP_TYPE_E164 2
34
35 #define ATM_MEDIA_SPECIFIC 1
36
37 #define CALLMGR_SPECIFIC_Q2931 1
38
39 #define ATM_NSAP 0
40 #define ATM_E164 1
41
42 #define ATM_MAC_ADDRESS_LENGTH 6
43 #define ATM_ADDRESS_LENGTH 20
44
45 typedef ULONG ATM_AAL_TYPE, *PATM_AAL_TYPE;
46
47 #define AAL_TYPE_AAL0 1
48 #define AAL_TYPE_AAL1 2
49 #define AAL_TYPE_AAL34 4
50 #define AAL_TYPE_AAL5 8
51
52 #define ATM_ADDR_BLANK_CHAR L' '
53 #define ATM_ADDR_E164_START_CHAR L'+'
54 #define ATM_ADDR_PUNCTUATION_CHAR L'.'
55
56 typedef enum {
57 IE_AALParameters,
58 IE_TrafficDescriptor,
59 IE_BroadbandBearerCapability,
60 IE_BHLI,
61 IE_BLLI,
62 IE_CalledPartyNumber,
63 IE_CalledPartySubaddress,
64 IE_CallingPartyNumber,
65 IE_CallingPartySubaddress,
66 IE_Cause,
67 IE_QOSClass,
68 IE_TransitNetworkSelection,
69 IE_BroadbandSendingComplete,
70 IE_LIJCallId,
71 IE_Raw
72 } Q2931_IE_TYPE;
73
74 typedef struct _Q2931_IE {
75 Q2931_IE_TYPE IEType;
76 ULONG IELength;
77 UCHAR IE[1];
78 } Q2931_IE, *PQ2931_IE;
79
80 typedef struct _AAL1_PARAMETERS {
81 UCHAR Subtype;
82 UCHAR CBRRate;
83 USHORT Multiplier;
84 UCHAR SourceClockRecoveryMethod;
85 UCHAR ErrorCorrectionMethod;
86 USHORT StructuredDataTransferBlocksize;
87 UCHAR PartiallyFilledCellsMethod;
88 } AAL1_PARAMETERS, *PAAL1_PARAMETERS;
89
90 typedef struct _AAL34_PARAMETERS {
91 USHORT ForwardMaxCPCSSDUSize;
92 USHORT BackwardMaxCPCSSDUSize;
93 USHORT LowestMID;
94 USHORT HighestMID;
95 UCHAR SSCSType;
96 } AAL34_PARAMETERS, *PAAL34_PARAMETERS;
97
98 /* AAL5_PARAMETERS.Mode constants */
99 #define AAL5_MODE_MESSAGE 0x01
100 #define AAL5_MODE_STREAMING 0x02
101
102 /* AAL5_PARAMETERS.SSCSType constants */
103 #define AAL5_SSCS_NULL 0x00
104 #define AAL5_SSCS_SSCOP_ASSURED 0x01
105 #define AAL5_SSCS_SSCOP_NON_ASSURED 0x02
106 #define AAL5_SSCS_FRAME_RELAY 0x04
107
108 typedef struct _AAL5_PARAMETERS {
109 ULONG ForwardMaxCPCSSDUSize;
110 ULONG BackwardMaxCPCSSDUSize;
111 UCHAR Mode;
112 UCHAR SSCSType;
113 } AAL5_PARAMETERS, *PAAL5_PARAMETERS;
114
115 typedef struct _AALUSER_PARAMETERS {
116 ULONG UserDefined;
117 } AALUSER_PARAMETERS, *PAALUSER_PARAMETERS;
118
119 typedef struct _AAL_PARAMETERS_IE {
120 ATM_AAL_TYPE AALType;
121 union {
122 AAL1_PARAMETERS AAL1Parameters;
123 AAL34_PARAMETERS AAL34Parameters;
124 AAL5_PARAMETERS AAL5Parameters;
125 AALUSER_PARAMETERS AALUserParameters;
126 } AALSpecificParameters;
127 } AAL_PARAMETERS_IE, *PAAL_PARAMETERS_IE;
128
129 struct _ATM_AAL5_INFO {
130 BOOLEAN CellLossPriority;
131 UCHAR UserToUserIndication;
132 UCHAR CommonPartIndicator;
133 };
134
135 struct _ATM_AAL0_INFO {
136 BOOLEAN CellLossPriority;
137 UCHAR PayLoadTypeIdentifier;
138 };
139
140 /* FIXME: Should the union be anonymous in C++ too? */
141 typedef struct _ATM_AAL_OOB_INFO
142 {
143 ATM_AAL_TYPE AalType;
144 #ifndef __cplusplus
145 _ANONYMOUS_UNION
146 #endif
147 union {
148 struct _ATM_AAL5_INFO ATM_AAL5_INFO;
149 struct _ATM_AAL0_INFO ATM_AAL0_INFO;
150 #ifndef __cplusplus
151 } DUMMYUNIONNAME;
152 #else
153 } u;
154 #endif
155 } ATM_AAL_OOB_INFO, *PATM_AAL_OOB_INFO;
156
157 typedef struct _ATM_ADDRESS {
158 ATM_ADDRESSTYPE AddressType;
159 ULONG NumberOfDigits;
160 UCHAR Address[ATM_ADDRESS_LENGTH];
161 } ATM_ADDRESS, *PATM_ADDRESS;
162
163 /* ATM_BHLI_IE.HighLayerInfoType constants */
164 #define BHLI_ISO 0x00
165 #define BHLI_UserSpecific 0x01
166 #define BHLI_HighLayerProfile 0x02
167 #define BHLI_VendorSpecificAppId 0x03
168
169 typedef struct _ATM_BHLI_IE {
170 ULONG HighLayerInfoType;
171 ULONG HighLayerInfoLength;
172 UCHAR HighLayerInfo[8];
173 } ATM_BHLI_IE, *PATM_BHLI_IE;
174
175 /* ATM_BLLI_IE.Layer2Protocol constants */
176 #define BLLI_L2_ISO_1745 0x01
177 #define BLLI_L2_Q921 0x02
178 #define BLLI_L2_X25L 0x06
179 #define BLLI_L2_X25M 0x07
180 #define BLLI_L2_ELAPB 0x08
181 #define BLLI_L2_HDLC_ARM 0x09
182 #define BLLI_L2_HDLC_NRM 0x0A
183 #define BLLI_L2_HDLC_ABM 0x0B
184 #define BLLI_L2_LLC 0x0C
185 #define BLLI_L2_X75 0x0D
186 #define BLLI_L2_Q922 0x0E
187 #define BLLI_L2_USER_SPECIFIED 0x10
188 #define BLLI_L2_ISO_7776 0x11
189
190 /* ATM_BLLI_IE.Layer3Protocol constants */
191 #define BLLI_L3_X25 0x06
192 #define BLLI_L3_ISO_8208 0x07
193 #define BLLI_L3_X223 0x08
194 #define BLLI_L3_SIO_8473 0x09
195 #define BLLI_L3_T70 0x0A
196 #define BLLI_L3_ISO_TR9577 0x0B
197 #define BLLI_L3_USER_SPECIFIED 0x10
198
199 /* ATM_BLLI_IE.Layer3IPI constants */
200 #define BLLI_L3_IPI_SNAP 0x80
201 #define BLLI_L3_IPI_IP 0xCC
202
203 typedef struct _ATM_BLLI_IE {
204 ULONG Layer2Protocol;
205 UCHAR Layer2Mode;
206 UCHAR Layer2WindowSize;
207 ULONG Layer2UserSpecifiedProtocol;
208 ULONG Layer3Protocol;
209 UCHAR Layer3Mode;
210 UCHAR Layer3DefaultPacketSize;
211 UCHAR Layer3PacketWindowSize;
212 ULONG Layer3UserSpecifiedProtocol;
213 ULONG Layer3IPI;
214 UCHAR SnapId[5];
215 } ATM_BLLI_IE, *PATM_BLLI_IE;
216
217 /* ATM_BROADBAND_BEARER_CAPABILITY_IE.BearerClass constants */
218 #define BCOB_A 0x00
219 #define BCOB_C 0x01
220 #define BCOB_X 0x02
221
222 /* ATM_BROADBAND_BEARER_CAPABILITY_IE.TrafficType constants */
223 #define TT_NOIND 0x00
224 #define TT_CBR 0x04
225 #define TT_VBR 0x08
226
227 /* ATM_BROADBAND_BEARER_CAPABILITY_IE.TimingRequirements constants */
228 #define TR_NOIND 0x00
229 #define TR_END_TO_END 0x01
230 #define TR_NO_END_TO_END 0x02
231
232 /* ATM_BROADBAND_BEARER_CAPABILITY_IE.ClippingSusceptability constants */
233 #define CLIP_NOT 0x00
234 #define CLIP_SUS 0x20
235
236 /* ATM_BROADBAND_BEARER_CAPABILITY_IE.UserPlaneConnectionConfig constants */
237 #define UP_P2P 0x00
238 #define UP_P2MP 0x01
239
240 typedef struct _ATM_BROADBAND_BEARER_CAPABILITY_IE {
241 UCHAR BearerClass;
242 UCHAR TrafficType;
243 UCHAR TimingRequirements;
244 UCHAR ClippingSusceptability;
245 UCHAR UserPlaneConnectionConfig;
246 } ATM_BROADBAND_BEARER_CAPABILITY_IE, *PATM_BROADBAND_BEARER_CAPABILITY_IE;
247
248 typedef struct _ATM_BROADBAND_SENDING_COMPLETE_IE {
249 UCHAR SendingComplete;
250 } ATM_BROADBAND_SENDING_COMPLETE_IE, *PATM_BROADBAND_SENDING_COMPLETE_IE;
251
252 typedef struct _ATM_CALLING_PARTY_NUMBER_IE {
253 ATM_ADDRESS Number;
254 UCHAR PresentationIndication;
255 UCHAR ScreeningIndicator;
256 } ATM_CALLING_PARTY_NUMBER_IE, *PATM_CALLING_PARTY_NUMBER_IE;
257
258 /* ATM_CAUSE_IE.Location constants */
259 #define ATM_CAUSE_LOC_USER 0x00
260 #define ATM_CAUSE_LOC_PRIVATE_LOCAL 0x01
261 #define ATM_CAUSE_LOC_PUBLIC_LOCAL 0x02
262 #define ATM_CAUSE_LOC_TRANSIT_NETWORK 0x03
263 #define ATM_CAUSE_LOC_PUBLIC_REMOTE 0x04
264 #define ATM_CAUSE_LOC_PRIVATE_REMOTE 0x05
265 #define ATM_CAUSE_LOC_INTERNATIONAL_NETWORK 0x07
266 #define ATM_CAUSE_LOC_BEYOND_INTERWORKING 0x0A
267
268 /* ATM_CAUSE_IE.Cause constants */
269 #define ATM_CAUSE_UNALLOCATED_NUMBER 0x01
270 #define ATM_CAUSE_NO_ROUTE_TO_TRANSIT_NETWORK 0x02
271 #define ATM_CAUSE_NO_ROUTE_TO_DESTINATION 0x03
272 #define ATM_CAUSE_VPI_VCI_UNACCEPTABLE 0x0A
273 #define ATM_CAUSE_NORMAL_CALL_CLEARING 0x10
274 #define ATM_CAUSE_USER_BUSY 0x11
275 #define ATM_CAUSE_NO_USER_RESPONDING 0x12
276 #define ATM_CAUSE_CALL_REJECTED 0x15
277 #define ATM_CAUSE_NUMBER_CHANGED 0x16
278 #define ATM_CAUSE_USER_REJECTS_CLIR 0x17
279 #define ATM_CAUSE_DESTINATION_OUT_OF_ORDER 0x1B
280 #define ATM_CAUSE_INVALID_NUMBER_FORMAT 0x1C
281 #define ATM_CAUSE_STATUS_ENQUIRY_RESPONSE 0x1E
282 #define ATM_CAUSE_NORMAL_UNSPECIFIED 0x1F
283 #define ATM_CAUSE_VPI_VCI_UNAVAILABLE 0x23
284 #define ATM_CAUSE_NETWORK_OUT_OF_ORDER 0x26
285 #define ATM_CAUSE_TEMPORARY_FAILURE 0x29
286 #define ATM_CAUSE_ACCESS_INFORMAION_DISCARDED 0x2B
287 #define ATM_CAUSE_NO_VPI_VCI_AVAILABLE 0x2D
288 #define ATM_CAUSE_RESOURCE_UNAVAILABLE 0x2F
289 #define ATM_CAUSE_QOS_UNAVAILABLE 0x31
290 #define ATM_CAUSE_USER_CELL_RATE_UNAVAILABLE 0x33
291 #define ATM_CAUSE_BEARER_CAPABILITY_UNAUTHORIZED 0x39
292 #define ATM_CAUSE_BEARER_CAPABILITY_UNAVAILABLE 0x3A
293 #define ATM_CAUSE_OPTION_UNAVAILABLE 0x3F
294 #define ATM_CAUSE_BEARER_CAPABILITY_UNIMPLEMENTED 0x41
295 #define ATM_CAUSE_UNSUPPORTED_TRAFFIC_PARAMETERS 0x49
296 #define ATM_CAUSE_INVALID_CALL_REFERENCE 0x51
297 #define ATM_CAUSE_CHANNEL_NONEXISTENT 0x52
298 #define ATM_CAUSE_INCOMPATIBLE_DESTINATION 0x58
299 #define ATM_CAUSE_INVALID_ENDPOINT_REFERENCE 0x59
300 #define ATM_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION 0x5B
301 #define ATM_CAUSE_TOO_MANY_PENDING_ADD_PARTY 0x5C
302 #define ATM_CAUSE_AAL_PARAMETERS_UNSUPPORTED 0x5D
303 #define ATM_CAUSE_MANDATORY_IE_MISSING 0x60
304 #define ATM_CAUSE_UNIMPLEMENTED_MESSAGE_TYPE 0x61
305 #define ATM_CAUSE_UNIMPLEMENTED_IE 0x63
306 #define ATM_CAUSE_INVALID_IE_CONTENTS 0x64
307 #define ATM_CAUSE_INVALID_STATE_FOR_MESSAGE 0x65
308 #define ATM_CAUSE_RECOVERY_ON_TIMEOUT 0x66
309 #define ATM_CAUSE_INCORRECT_MESSAGE_LENGTH 0x68
310 #define ATM_CAUSE_PROTOCOL_ERROR 0x6F
311
312 /* ATM_CAUSE_IE.Diagnostics constants */
313 #define ATM_CAUSE_COND_UNKNOWN 0x00
314 #define ATM_CAUSE_COND_PERMANENT 0x01
315 #define ATM_CAUSE_COND_TRANSIENT 0x02
316 #define ATM_CAUSE_REASON_USER 0x00
317 #define ATM_CAUSE_REASON_IE_MISSING 0x04
318 #define ATM_CAUSE_REASON_IE_INSUFFICIENT 0x08
319 #define ATM_CAUSE_PU_PROVIDER 0x00
320 #define ATM_CAUSE_PU_USER 0x08
321 #define ATM_CAUSE_NA_NORMAL 0x00
322 #define ATM_CAUSE_NA_ABNORMAL 0x04
323
324 typedef struct _ATM_CAUSE_IE {
325 UCHAR Location;
326 UCHAR Cause;
327 UCHAR DiagnosticsLength;
328 UCHAR Diagnostics[4];
329 } ATM_CAUSE_IE, *PATM_CAUSE_IE;
330
331
332 typedef ULONG ATM_SERVICE_CATEGORY, *PATM_SERVICE_CATEGORY;
333
334 /* ATM_FLOW_PARAMETERS.ServiceCategory constants */
335 #define ATM_SERVICE_CATEGORY_CBR 1
336 #define ATM_SERVICE_CATEGORY_VBR 2
337 #define ATM_SERVICE_CATEGORY_UBR 4
338 #define ATM_SERVICE_CATEGORY_ABR 8
339
340 /* ATM_FLOW_PARAMETERS.Reserved1 constants */
341 #define ATM_FLOW_PARAMS_RSVD1_MPP 0x01
342
343 typedef struct _ATM_FLOW_PARAMETERS {
344 ATM_SERVICE_CATEGORY ServiceCategory;
345 ULONG AverageCellRate;
346 ULONG PeakCellRate;
347 ULONG MinimumCellRate;
348 ULONG InitialCellRate;
349 ULONG BurstLengthCells;
350 ULONG MaxSduSize;
351 ULONG TransientBufferExposure;
352 ULONG CumulativeRMFixedRTT;
353 UCHAR RateIncreaseFactor;
354 UCHAR RateDecreaseFactor;
355 USHORT ACRDecreaseTimeFactor;
356 UCHAR MaximumCellsPerForwardRMCell;
357 UCHAR MaximumForwardRMCellInterval;
358 UCHAR CutoffDecreaseFactor;
359 UCHAR Reserved1;
360 ULONG MissingRMCellCount;
361 ULONG Reserved2;
362 ULONG Reserved3;
363 } ATM_FLOW_PARAMETERS, *PATM_FLOW_PARAMETERS;
364
365 typedef struct _ATM_VPIVCI {
366 ULONG Vpi;
367 ULONG Vci;
368 } ATM_VPIVCI, *PATM_VPIVCI;
369
370 typedef struct _ATM_MEDIA_PARAMETERS {
371 ATM_VPIVCI ConnectionId;
372 ATM_AAL_TYPE AALType;
373 ULONG CellDelayVariationCLP0;
374 ULONG CellDelayVariationCLP1;
375 ULONG CellLossRatioCLP0;
376 ULONG CellLossRatioCLP1;
377 ULONG CellTransferDelayCLP0;
378 ULONG CellTransferDelayCLP1;
379 ULONG DefaultCLP;
380 ATM_FLOW_PARAMETERS Transmit;
381 ATM_FLOW_PARAMETERS Receive;
382 } ATM_MEDIA_PARAMETERS, *PATM_MEDIA_PARAMETERS;
383
384 typedef struct _ATM_PVC_SAP {
385 ATM_BLLI_IE Blli;
386 ATM_BHLI_IE Bhli;
387 } ATM_PVC_SAP, *PATM_PVC_SAP;
388
389 /* ATM_QOS_CLASS_IE constants */
390 #define QOS_CLASS0 0x00
391 #define QOS_CLASS1 0x01
392 #define QOS_CLASS2 0x02
393 #define QOS_CLASS3 0x03
394 #define QOS_CLASS4 0x04
395
396 typedef struct _ATM_QOS_CLASS_IE {
397 UCHAR QOSClassForward;
398 UCHAR QOSClassBackward;
399 } ATM_QOS_CLASS_IE, *PATM_QOS_CLASS_IE;
400
401 typedef struct _ATM_RAW_IE {
402 ULONG RawIELength;
403 ULONG RawIEType;
404 UCHAR RawIEValue[1];
405 } ATM_RAW_IE, *PATM_RAW_IE;
406
407 typedef struct _ATM_SAP {
408 ATM_BLLI_IE Blli;
409 ATM_BHLI_IE Bhli;
410 ULONG NumberOfAddresses;
411 UCHAR Addresses[1];
412 } ATM_SAP, *PATM_SAP;
413
414 typedef struct _ATM_TRAFFIC_DESCRIPTOR {
415 ULONG PeakCellRateCLP0;
416 ULONG PeakCellRateCLP01;
417 ULONG SustainableCellRateCLP0;
418 ULONG SustainableCellRateCLP01;
419 ULONG MaximumBurstSizeCLP0;
420 ULONG MaximumBurstSizeCLP01;
421 BOOLEAN BestEffort;
422 BOOLEAN Tagging;
423 } ATM_TRAFFIC_DESCRIPTOR, *PATM_TRAFFIC_DESCRIPTOR;
424
425 typedef struct _ATM_TRAFFIC_DESCRIPTOR_IE {
426 ATM_TRAFFIC_DESCRIPTOR ForwardTD;
427 ATM_TRAFFIC_DESCRIPTOR BackwardTD;
428 BOOLEAN BestEffort;
429 } ATM_TRAFFIC_DESCRIPTOR_IE, *PATM_TRAFFIC_DESCRIPTOR_IE;
430
431 /* ATM_TRANSIT_NETWORK_SELECTION_IE.TypeOfNetworkId constants */
432 #define TNS_TYPE_NATIONAL 0x40
433
434 /* ATM_TRANSIT_NETWORK_SELECTION_IE.NetworkIdPlan constants */
435 #define TNS_PLAN_CARRIER_ID_CODE 0x01
436
437 typedef struct _ATM_TRANSIT_NETWORK_SELECTION_IE {
438 UCHAR TypeOfNetworkId;
439 UCHAR NetworkIdPlan;
440 UCHAR NetworkIdLength;
441 UCHAR NetworkId[1];
442 } ATM_TRANSIT_NETWORK_SELECTION_IE, *PATM_TRANSIT_NETWORK_SELECTION_IE;
443
444 typedef struct _ATM_LIJ_CALLID_IE {
445 ULONG Identifier;
446 } ATM_LIJ_CALLID_IE, *PATM_LIJ_CALLID_IE;
447
448 /* Q2931_ADD_PVC.Flags constants */
449 #define CO_FLAG_SIGNALING_VC 0x00000001
450 #define CO_FLAG_NO_DEST_SAP 0x00000002
451
452 typedef struct _Q2931_ADD_PVC {
453 ATM_ADDRESS CalledParty;
454 ATM_ADDRESS CallingParty;
455 ATM_VPIVCI ConnectionId;
456 ATM_AAL_TYPE AALType;
457 ATM_FLOW_PARAMETERS ForwardFP;
458 ATM_FLOW_PARAMETERS BackwardFP;
459 ULONG Flags;
460 ATM_PVC_SAP LocalSap;
461 ATM_PVC_SAP DestinationSap;
462 BOOLEAN LIJIdPresent;
463 ATM_LIJ_CALLID_IE LIJId;
464 } Q2931_ADD_PVC, *PQ2931_ADD_PVC;
465
466 typedef struct _Q2931_DELETE_PVC {
467 ATM_VPIVCI ConnectionId;
468 } Q2931_DELETE_PVC, *PQ2931_DELETE_PVC;
469
470 typedef ATM_ADDRESS ATM_CALLED_PARTY_NUMBER_IE;
471 typedef ATM_ADDRESS ATM_CALLED_PARTY_SUBADDRESS_IE;
472 typedef ATM_ADDRESS ATM_CALLING_PARTY_SUBADDRESS_IE;
473
474 typedef struct _Q2931_CALLMGR_PARAMETERS {
475 ATM_ADDRESS CalledParty;
476 ATM_ADDRESS CallingParty;
477 ULONG InfoElementCount;
478 UCHAR InfoElements[1];
479 } Q2931_CALLMGR_PARAMETERS, *PQ2931_CALLMGR_PARAMETERS;
480
481 typedef struct _ATM_VC_RATES_SUPPORTED {
482 ULONG MinCellRate;
483 ULONG MaxCellRate;
484 } ATM_VC_RATES_SUPPORTED, *PATM_VC_RATES_SUPPORTED;
485
486 typedef ULONG ATM_SERVICE_REGISTRY_TYPE;
487
488 /* ATM_SERVICE_ADDRESS_LIST.ServiceRegistryType constants */
489 #define ATM_SERVICE_REGISTRY_LECS 1
490 #define ATM_SERVICE_REGISTRY_ANS 2
491
492 typedef struct _ATM_SERVICE_ADDRESS_LIST {
493 ATM_SERVICE_REGISTRY_TYPE ServiceRegistryType;
494 ULONG NumberOfAddressesAvailable;
495 ULONG NumberOfAddressesReturned;
496 ATM_ADDRESS Address[1];
497 } ATM_SERVICE_ADDRESS_LIST, *PATM_SERVICE_ADDRESS_LIST;
498
499 #ifdef __cplusplus
500 }
501 #endif
502
503 #endif /* _ATM_H */