-
Notifications
You must be signed in to change notification settings - Fork 2
/
MCS-PROTOCOL.asn1
444 lines (373 loc) · 13.4 KB
/
MCS-PROTOCOL.asn1
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
-- Module MCS-PROTOCOL (T.125:02/1998)
MCS-PROTOCOL DEFINITIONS ::=
BEGIN
-- Part 1: Fundamental MCS types
ChannelId ::= INTEGER(0..65535) -- range is 16 bits
StaticChannelId ::= ChannelId(1..1000) -- those known permanently
DynamicChannelId ::= ChannelId(1001..65535) -- those created and deleted
UserId ::= DynamicChannelId -- created by Attach-User
-- deleted by Detach-User
PrivateChannelId ::=
DynamicChannelId -- created by Channel-Convene
-- deleted by Channel-Disband
AssignedChannelId ::=
DynamicChannelId -- created by Channel-Join zero
-- deleted by last Channel-Leave
TokenId ::= INTEGER(1..65535) -- all are known permanently
TokenStatus ::= ENUMERATED {
notInUse(0), selfGrabbed(1), otherGrabbed(2), selfInhibited(3),
otherInhibited(4), selfRecipient(5), selfGiving(6), otherGiving(7)}
DataPriority ::= ENUMERATED {top(0), high(1), medium(2), low(3)}
Segmentation ::= BIT STRING {begin(0), end(1)}(SIZE (2))
DomainParameters ::= SEQUENCE {
maxChannelIds INTEGER, --(0..MAX),
-- a limit on channel ids in use,
-- static + user id + private + assigned
maxUserIds INTEGER, --(0..MAX),
-- a sublimit on user id channels alone
maxTokenIds INTEGER, --(0..MAX),
-- a limit on token ids in use
-- grabbed + inhibited + giving + ungivable + given
numPriorities INTEGER, --(0..MAX),
-- the number of TCs in an MCS connection
minThroughput INTEGER, --(0..MAX),
-- the enforced number of octets per second
maxHeight INTEGER, --(0..MAX),
-- a limit on the height of a provider
maxMCSPDUsize INTEGER, --(0..MAX),
-- an octet limit on domain MCSPDUs
protocolVersion INTEGER --(0..MAX)
}
-- Part 2: Connect provider
Connect-Initial ::= [APPLICATION 101] IMPLICIT SEQUENCE {
callingDomainSelector OCTET STRING,
calledDomainSelector OCTET STRING,
upwardFlag BOOLEAN,
-- TRUE if called provider is higher
targetParameters DomainParameters,
minimumParameters DomainParameters,
maximumParameters DomainParameters,
userData OCTET STRING
}
Connect-Response ::= [APPLICATION 102] IMPLICIT SEQUENCE {
result Result,
calledConnectId INTEGER(0..MAX),
-- assigned by the called provider
-- to identify additional TCs of
-- the same MCS connection
domainParameters DomainParameters,
userData OCTET STRING
}
Connect-Additional ::= [APPLICATION 103] IMPLICIT SEQUENCE {
calledConnectId INTEGER(0..MAX),
dataPriority DataPriority
}
Connect-Result ::= [APPLICATION 104] IMPLICIT SEQUENCE {result Result
}
-- Part 3: Merge domain
PlumbDomainIndication ::= [APPLICATION 0] IMPLICIT SEQUENCE {
heightLimit INTEGER(0..MAX)
} -- a restriction on the MCSPDU receiver
ErectDomainRequest ::= [APPLICATION 1] IMPLICIT SEQUENCE {
subHeight INTEGER(0..MAX),
-- height in domain of the MCSPDU transmitter
subInterval INTEGER(0..MAX)
} -- its throughput enforcement interval in milliseconds
ChannelAttributes ::= CHOICE {
static [0] IMPLICIT SEQUENCE {channelId StaticChannelId}, -- joined is implicitly TRUE
userId
[1] IMPLICIT SEQUENCE {joined BOOLEAN,
-- TRUE if user is joined to its user id
userId UserId},
private
[2] IMPLICIT SEQUENCE {joined BOOLEAN,
-- TRUE if channel id is joined below
channelId PrivateChannelId,
manager UserId,
admitted SET OF UserId}, -- may span multiple MergeChannelsRequest
assigned [3] IMPLICIT SEQUENCE {channelId AssignedChannelId} -- joined is implicitly TRUE
}
MergeChannelsRequest ::= [APPLICATION 2] IMPLICIT SEQUENCE {
mergeChannels SET OF ChannelAttributes,
purgeChannelIds SET OF ChannelId
}
MergeChannelsConfirm ::= [APPLICATION 3] IMPLICIT SEQUENCE {
mergeChannels SET OF ChannelAttributes,
purgeChannelIds SET OF ChannelId
}
PurgeChannelsIndication ::= [APPLICATION 4] IMPLICIT SEQUENCE {
detachUserIds SET OF UserId,
-- purge user id channels
purgeChannelIds SET OF ChannelId
} -- purge other channels
TokenAttributes ::= CHOICE {
grabbed [0] IMPLICIT SEQUENCE {tokenId TokenId,
grabber UserId},
inhibited
[1] IMPLICIT SEQUENCE {tokenId TokenId,
inhibitors SET OF UserId}, -- may span multiple MergeTokensRequest
giving
[2] IMPLICIT SEQUENCE {tokenId TokenId,
grabber UserId,
recipient UserId},
ungivable [3] IMPLICIT SEQUENCE {tokenId TokenId,
grabber UserId}, -- recipient has since detached
given [4] IMPLICIT SEQUENCE {tokenId TokenId,
recipient UserId} -- grabber released or detached
}
MergeTokensRequest ::= [APPLICATION 5] IMPLICIT SEQUENCE {
mergeTokens SET OF TokenAttributes,
purgeTokenIds SET OF TokenId
}
MergeTokensConfirm ::= [APPLICATION 6] IMPLICIT SEQUENCE {
mergeTokens SET OF TokenAttributes,
purgeTokenIds SET OF TokenId
}
PurgeTokensIndication ::= [APPLICATION 7] IMPLICIT SEQUENCE {
purgeTokenIds SET OF TokenId
}
-- Part 4: Disconnect provider
DisconnectProviderUltimatum ::= [APPLICATION 8] IMPLICIT SEQUENCE {
reason Reason
}
RejectMCSPDUUltimatum ::= [APPLICATION 9] IMPLICIT SEQUENCE {
diagnostic Diagnostic,
initialOctets OCTET STRING
}
-- Part 5: Attach/Detach user
AttachUserRequest ::= [APPLICATION 10] IMPLICIT SEQUENCE {
}
AttachUserConfirm ::= [APPLICATION 11] IMPLICIT SEQUENCE {
result Result,
initiator UserId OPTIONAL
}
DetachUserRequest ::= [APPLICATION 12] IMPLICIT SEQUENCE {
reason Reason,
userIds SET OF UserId
}
DetachUserIndication ::= [APPLICATION 13] IMPLICIT SEQUENCE {
reason Reason,
userIds SET OF UserId
}
-- Part 6: Channel management
ChannelJoinRequest ::= [APPLICATION 14] IMPLICIT SEQUENCE {
initiator UserId,
channelId ChannelId
} -- may be zero
ChannelJoinConfirm ::= [APPLICATION 15] IMPLICIT SEQUENCE {
result Result,
initiator UserId,
requested ChannelId,
-- may be zero
channelId ChannelId OPTIONAL
}
ChannelLeaveRequest ::= [APPLICATION 16] IMPLICIT SEQUENCE {
channelIds SET OF ChannelId
}
ChannelConveneRequest ::= [APPLICATION 17] IMPLICIT SEQUENCE {initiator UserId
}
ChannelConveneConfirm ::= [APPLICATION 18] IMPLICIT SEQUENCE {
result Result,
initiator UserId,
channelId PrivateChannelId OPTIONAL
}
ChannelDisbandRequest ::= [APPLICATION 19] IMPLICIT SEQUENCE {
initiator UserId,
channelId PrivateChannelId
}
ChannelDisbandIndication ::= [APPLICATION 20] IMPLICIT SEQUENCE {
channelId PrivateChannelId
}
ChannelAdmitRequest ::= [APPLICATION 21] IMPLICIT SEQUENCE {
initiator UserId,
channelId PrivateChannelId,
userIds SET OF UserId
}
ChannelAdmitIndication ::= [APPLICATION 22] IMPLICIT SEQUENCE {
initiator UserId,
channelId PrivateChannelId,
userIds SET OF UserId
}
ChannelExpelRequest ::= [APPLICATION 23] IMPLICIT SEQUENCE {
initiator UserId,
channelId PrivateChannelId,
userIds SET OF UserId
}
ChannelExpelIndication ::= [APPLICATION 24] IMPLICIT SEQUENCE {
channelId PrivateChannelId,
userIds SET OF UserId
}
-- Part 7: Data transfer
SendDataRequest ::= [APPLICATION 25] IMPLICIT SEQUENCE {
initiator UserId,
channelId ChannelId,
dataPriority DataPriority,
segmentation Segmentation,
userData OCTET STRING
}
SendDataIndication ::= [APPLICATION 26] IMPLICIT SEQUENCE {
initiator UserId,
channelId ChannelId,
dataPriority DataPriority,
segmentation Segmentation,
userData OCTET STRING
}
UniformSendDataRequest ::= [APPLICATION 27] IMPLICIT SEQUENCE {
initiator UserId,
channelId ChannelId,
dataPriority DataPriority,
segmentation Segmentation,
userData OCTET STRING
}
UniformSendDataIndication ::= [APPLICATION 28] IMPLICIT SEQUENCE {
initiator UserId,
channelId ChannelId,
dataPriority DataPriority,
segmentation Segmentation,
userData OCTET STRING
}
-- Part 8: Token management
TokenGrabRequest ::= [APPLICATION 29] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId
}
TokenGrabConfirm ::= [APPLICATION 30] IMPLICIT SEQUENCE {
result Result,
initiator UserId,
tokenId TokenId,
tokenStatus TokenStatus
}
TokenInhibitRequest ::= [APPLICATION 31] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId
}
TokenInhibitConfirm ::= [APPLICATION 32] IMPLICIT SEQUENCE {
result Result,
initiator UserId,
tokenId TokenId,
tokenStatus TokenStatus
}
TokenGiveRequest ::= [APPLICATION 33] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId,
recipient UserId
}
TokenGiveIndication ::= [APPLICATION 34] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId,
recipient UserId
}
TokenGiveResponse ::= [APPLICATION 35] IMPLICIT SEQUENCE {
result Result,
recipient UserId,
tokenId TokenId
}
TokenGiveConfirm ::= [APPLICATION 36] IMPLICIT SEQUENCE {
result Result,
initiator UserId,
tokenId TokenId,
tokenStatus TokenStatus
}
TokenPleaseRequest ::= [APPLICATION 37] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId
}
TokenPleaseIndication ::= [APPLICATION 38] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId
}
TokenReleaseRequest ::= [APPLICATION 39] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId
}
TokenReleaseConfirm ::= [APPLICATION 40] IMPLICIT SEQUENCE {
result Result,
initiator UserId,
tokenId TokenId,
tokenStatus TokenStatus
}
TokenTestRequest ::= [APPLICATION 41] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId
}
TokenTestConfirm ::= [APPLICATION 42] IMPLICIT SEQUENCE {
initiator UserId,
tokenId TokenId,
tokenStatus TokenStatus
}
-- Part 9: Status codes
-- in DisconnectProviderUltimatum, DetachUserRequest, DetachUserIndication
Reason ::= ENUMERATED {
rn-domain-disconnected(0), rn-provider-initiated(1), rn-token-purged(2),
rn-user-requested(3), rn-channel-purged(4)}
-- in Connect, response, confirm
Result ::= ENUMERATED {
rt-successful(0), rt-domain-merging(1), rt-domain-not-hierarchical(2),
rt-no-such-channel(3), rt-no-such-domain(4), rt-no-such-user(5),
rt-not-admitted(6), rt-other-user-id(7), rt-parameters-unacceptable(8),
rt-token-not-available(9), rt-token-not-possessed(10),
rt-too-many-channels(11), rt-too-many-tokens(12), rt-too-many-users(13),
rt-unspecified-failure(14), rt-user-rejected(15)}
-- in RejectMCSPDUUltimatum
Diagnostic ::= ENUMERATED {
dc-inconsistent-merge(0), dc-forbidden-PDU-downward(1),
dc-forbidden-PDU-upward(2), dc-invalid-BER-encoding(3),
dc-invalid-PER-encoding(4), dc-misrouted-user(5), dc-unrequested-confirm(6),
dc-wrong-transport-priority(7), dc-channel-id-conflict(8),
dc-token-id-conflict(9), dc-not-user-id-channel(10),
dc-too-many-channels(11), dc-too-many-tokens(12), dc-too-many-users(13)
}
-- Part 10: MCSPDU repertoire
ConnectMCSPDU ::= CHOICE {
connect-initial Connect-Initial,
connect-response Connect-Response,
connect-additional Connect-Additional,
connect-result Connect-Result
}
DomainMCSPDU ::= CHOICE {
plumbDomainIndication PlumbDomainIndication,
erectDomainRequest ErectDomainRequest,
mergeChannelsRequest MergeChannelsRequest,
mergeChannelsConfirm MergeChannelsConfirm,
purgeChannelsIndication PurgeChannelsIndication,
mergeTokensRequest MergeTokensRequest,
mergeTokensConfirm MergeTokensConfirm,
purgeTokensIndication PurgeTokensIndication,
disconnectProviderUltimatum DisconnectProviderUltimatum,
rejectMCSPDUUltimatum RejectMCSPDUUltimatum,
attachUserRequest AttachUserRequest,
attachUserConfirm AttachUserConfirm,
detachUserRequest DetachUserRequest,
detachUserIndication DetachUserIndication,
channelJoinRequest ChannelJoinRequest,
channelJoinConfirm ChannelJoinConfirm,
channelLeaveRequest ChannelLeaveRequest,
channelConveneRequest ChannelConveneRequest,
channelConveneConfirm ChannelConveneConfirm,
channelDisbandRequest ChannelDisbandRequest,
channelDisbandIndication ChannelDisbandIndication,
channelAdmitRequest ChannelAdmitRequest,
channelAdmitIndication ChannelAdmitIndication,
channelExpelRequest ChannelExpelRequest,
channelExpelIndication ChannelExpelIndication,
sendDataRequest SendDataRequest,
sendDataIndication SendDataIndication,
uniformSendDataRequest UniformSendDataRequest,
uniformSendDataIndication UniformSendDataIndication,
tokenGrabRequest TokenGrabRequest,
tokenGrabConfirm TokenGrabConfirm,
tokenInhibitRequest TokenInhibitRequest,
tokenInhibitConfirm TokenInhibitConfirm,
tokenGiveRequest TokenGiveRequest,
tokenGiveIndication TokenGiveIndication,
tokenGiveResponse TokenGiveResponse,
tokenGiveConfirm TokenGiveConfirm,
tokenPleaseRequest TokenPleaseRequest,
tokenPleaseIndication TokenPleaseIndication,
tokenReleaseRequest TokenReleaseRequest,
tokenReleaseConfirm TokenReleaseConfirm,
tokenTestRequest TokenTestRequest,
tokenTestConfirm TokenTestConfirm
}
END
-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D