587 lines
20 KiB
Groff
587 lines
20 KiB
Groff
--#comment "Copyright (C) Microsoft Corporation, 1995-1999. All rights reserved."--
|
|
--#comment "ASN.1 definitions for Multiport Communication Services (MCS)"--
|
|
|
|
--#SS.basic slinked-- -- set of and sequence of w/o size constraint
|
|
--#SS.sized slinked-- -- set of and sequence of w/ size constraint
|
|
|
|
-- MCS-PROTOCOL DEFINITIONS ::=
|
|
MCSPROT 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
|
|
|
|
PDUTokenStatus ::= ENUMERATED
|
|
{
|
|
not-in-use (0),
|
|
self-grabbed (1),
|
|
other-grabbed (2),
|
|
self-inhibited (3),
|
|
other-inhibited (4),
|
|
self-recipient (5),
|
|
self-giving (6),
|
|
other-giving (7)
|
|
}
|
|
|
|
PDUPriority ::= ENUMERATED
|
|
{
|
|
top (0),
|
|
high (1),
|
|
medium (2),
|
|
low (3)
|
|
}
|
|
|
|
PDUSegmentation ::= BIT STRING
|
|
{
|
|
begin (0),
|
|
end (1)
|
|
} (SIZE (2)) --<PADDED--
|
|
|
|
PDUDomainParameters::= SEQUENCE
|
|
{
|
|
max-channel-ids INTEGER (0..MAX),
|
|
-- a limit on channel ids in use,
|
|
-- static + user id + private + assigned
|
|
max-user-ids INTEGER (0..MAX),
|
|
-- a sublimit on user id channels alone
|
|
max-token-ids INTEGER (0..MAX),
|
|
-- a limit on token ids in use
|
|
-- grabbed + inhibited + giving + ungivable + given
|
|
number-priorities INTEGER (0..MAX),
|
|
-- the number of TCs in an MCS connection
|
|
min-throughput INTEGER (0..MAX),
|
|
-- the enforced number of octets per second
|
|
max-height INTEGER (0..MAX),
|
|
-- a limit on the height of a provider
|
|
max-mcspdu-size INTEGER (0..MAX),
|
|
-- an octet limit on domain MCSPDUs
|
|
protocol-version INTEGER (0..MAX)
|
|
}
|
|
|
|
-- Part 2: Connect provider
|
|
|
|
ConnectInitialPDU ::= [APPLICATION 101] IMPLICIT SEQUENCE
|
|
{
|
|
calling-domain-selector OCTET STRING,
|
|
called-domain-selector OCTET STRING,
|
|
upward-flag BOOLEAN,
|
|
-- TRUE if called provider is higher
|
|
target-parameters PDUDomainParameters,
|
|
minimum-parameters PDUDomainParameters,
|
|
maximum-parameters PDUDomainParameters,
|
|
user-data OCTET STRING
|
|
}
|
|
|
|
ConnectResponsePDU ::= [APPLICATION 102] IMPLICIT SEQUENCE
|
|
{
|
|
result PDUResult,
|
|
called-connect-id INTEGER (0..MAX),
|
|
-- assigned by the called provider
|
|
-- to identify additional TCs of
|
|
-- the same MCS connection
|
|
domain-parameters PDUDomainParameters,
|
|
user-data OCTET STRING
|
|
}
|
|
|
|
ConnectAdditionalPDU ::= [APPLICATION 103] IMPLICIT SEQUENCE
|
|
{
|
|
called-connect-id INTEGER (0..MAX),
|
|
data-priority PDUPriority
|
|
}
|
|
|
|
ConnectResultPDU ::= [APPLICATION 104] IMPLICIT SEQUENCE
|
|
{
|
|
result PDUResult
|
|
}
|
|
|
|
-- Part 3: Merge domain
|
|
|
|
PlumbDomainIndicationPDU ::= [APPLICATION 0] IMPLICIT SEQUENCE -- plumb domain indication
|
|
{
|
|
height-limit INTEGER (0..MAX)
|
|
-- a restriction on the MCSPDU receiver
|
|
}
|
|
|
|
ErectDomainRequestPDU ::= [APPLICATION 1] IMPLICIT SEQUENCE -- erect domain request
|
|
{
|
|
sub-height INTEGER (0..MAX),
|
|
-- height in domain of the MCSPDU transmitter
|
|
sub-interval INTEGER (0..MAX)
|
|
-- its throughput enforcement interval in milliseconds
|
|
}
|
|
|
|
PDUChannelAttributes ::= CHOICE
|
|
{
|
|
channel-attributes-static [0] IMPLICIT SEQUENCE
|
|
{
|
|
channel-id StaticChannelID
|
|
-- joined is implicitly TRUE
|
|
} --#type "ChannelAttributesStatic"--,
|
|
channel-attributes-user-id [1] IMPLICIT SEQUENCE
|
|
{
|
|
joined BOOLEAN,
|
|
-- TRUE if user is joined to its user id
|
|
user-id UserID
|
|
} --#type "ChannelAttributesUserID"--,
|
|
channel-attributes-private [2] IMPLICIT SEQUENCE
|
|
{
|
|
joined BOOLEAN,
|
|
-- TRUE if channel id is joined below
|
|
channel-id PrivateChannelID,
|
|
manager UserID,
|
|
admitted SetOfUserIDs
|
|
-- may span multiple MergeChannelsRequestPDU
|
|
} --#type "ChannelAttributesPrivate"--,
|
|
channel-attributes-assigned [3] IMPLICIT SEQUENCE
|
|
{
|
|
channel-id AssignedChannelID
|
|
-- joined is implicitly TRUE
|
|
} --#type "ChannelAttributesAssigned"--
|
|
}
|
|
|
|
MergeChannelsRequestPDU ::= [APPLICATION 2] IMPLICIT SEQUENCE -- merge channels request
|
|
{
|
|
merge-channels SetOfPDUChannelAttributes,
|
|
purge-channel-ids SetOfChannelIDs
|
|
}
|
|
|
|
MergeChannelsConfirmPDU ::= [APPLICATION 3] IMPLICIT SEQUENCE -- merge channels confirm
|
|
{
|
|
merge-channels SetOfPDUChannelAttributes,
|
|
purge-channel-ids SetOfChannelIDs
|
|
}
|
|
|
|
PurgeChannelIndicationPDU ::= [APPLICATION 4] IMPLICIT SEQUENCE -- purge channels indication
|
|
{
|
|
detach-user-ids SetOfUserIDs,
|
|
-- purge user id channels
|
|
purge-channel-ids SetOfChannelIDs
|
|
-- purge other channel ids
|
|
}
|
|
|
|
PDUTokenAttributes ::= CHOICE
|
|
{
|
|
grabbed [0] IMPLICIT SEQUENCE
|
|
{
|
|
token-id TokenID,
|
|
grabber UserID
|
|
} --#type "Grabbed"--,
|
|
inhibited [1] IMPLICIT SEQUENCE
|
|
{
|
|
token-id TokenID,
|
|
inhibitors SetOfUserIDs
|
|
-- may span multiple MergeTokensRequestPDU
|
|
} --#type "Inhibited"--,
|
|
giving [2] IMPLICIT SEQUENCE
|
|
{
|
|
token-id TokenID,
|
|
grabber UserID,
|
|
recipient UserID
|
|
} --#type "Giving"--,
|
|
ungivable [3] IMPLICIT SEQUENCE
|
|
{
|
|
token-id TokenID,
|
|
grabber UserID
|
|
-- recipient has since detached
|
|
} --#type "Ungivable"--,
|
|
given [4] IMPLICIT SEQUENCE
|
|
{
|
|
token-id TokenID,
|
|
recipient UserID
|
|
-- grabber released or detached
|
|
} --#type "Given"--
|
|
}
|
|
|
|
-- DataBeam changes to pull out useful types
|
|
SetOfUserIDs ::= SET --#type "PSetOfUserIDs"-- OF UserID
|
|
SetOfPDUChannelAttributes ::= SET --#type "PSetOfPDUChannelAttributes"-- OF PDUChannelAttributes
|
|
SetOfChannelIDs ::= SET --#type "PSetOfChannelIDs"-- OF ChannelID
|
|
SetOfPDUTokenAttributes ::= SET --#type "PSetOfPDUTokenAttributes"-- OF PDUTokenAttributes
|
|
SetOfTokenIDs ::= SET --#type "PSetOfTokenIDs"-- OF TokenID
|
|
|
|
MergeTokensRequestPDU ::= [APPLICATION 5] IMPLICIT SEQUENCE -- merge tokens request
|
|
{
|
|
merge-tokens SetOfPDUTokenAttributes,
|
|
purge-token-ids SetOfTokenIDs
|
|
}
|
|
|
|
MergeTokensConfirmPDU ::= [APPLICATION 6] IMPLICIT SEQUENCE -- merge tokens indication
|
|
{
|
|
merge-tokens SetOfPDUTokenAttributes,
|
|
purge-token-ids SetOfTokenIDs
|
|
}
|
|
|
|
PurgeTokenIndicationPDU ::= [APPLICATION 7] IMPLICIT SEQUENCE -- purge tokens indication
|
|
{
|
|
purge-token-ids SetOfTokenIDs
|
|
}
|
|
|
|
-- Part 4: Disconnect provider
|
|
|
|
DisconnectProviderUltimatumPDU ::= [APPLICATION 8] IMPLICIT SEQUENCE -- disconnect provider ultimatum
|
|
{
|
|
reason PDUReason
|
|
}
|
|
|
|
RejectUltimatumPDU ::= [APPLICATION 9] IMPLICIT SEQUENCE -- reject MCSPDU ultimatum
|
|
{
|
|
diagnostic Diagnostic,
|
|
initial-octets OCTET STRING
|
|
}
|
|
|
|
-- Part 5: Attach/Detach user
|
|
|
|
AttachUserRequestPDU ::= [APPLICATION 10] IMPLICIT SEQUENCE -- attach user request
|
|
{
|
|
}
|
|
|
|
AttachUserConfirmPDU ::= [APPLICATION 11] IMPLICIT SEQUENCE -- attach user confirm
|
|
{
|
|
result PDUResult,
|
|
initiator UserID OPTIONAL
|
|
}
|
|
|
|
DetachUserRequestPDU ::= [APPLICATION 12] IMPLICIT SEQUENCE -- detach user request
|
|
{
|
|
reason PDUReason,
|
|
user-ids SetOfUserIDs
|
|
}
|
|
DetachUserIndicationPDU ::= [APPLICATION 13] IMPLICIT SEQUENCE -- detach user indication
|
|
{
|
|
reason PDUReason,
|
|
user-ids SetOfUserIDs
|
|
}
|
|
|
|
-- Part 6: Channel management
|
|
|
|
ChannelJoinRequestPDU ::= [APPLICATION 14] IMPLICIT SEQUENCE -- channel join request
|
|
{
|
|
initiator UserID,
|
|
channel-id ChannelID
|
|
-- may be zero
|
|
}
|
|
|
|
ChannelJoinConfirmPDU ::= [APPLICATION 15] IMPLICIT SEQUENCE -- channel join confirm
|
|
{
|
|
result PDUResult,
|
|
initiator UserID,
|
|
requested ChannelID,
|
|
-- may be zero
|
|
channel-id ChannelID --#field "join_channel_id"-- OPTIONAL
|
|
}
|
|
|
|
ChannelLeaveRequestPDU ::= [APPLICATION 16] IMPLICIT SEQUENCE -- channel leave request
|
|
{
|
|
channel-ids SetOfChannelIDs
|
|
}
|
|
|
|
ChannelConveneRequestPDU ::= [APPLICATION 17] IMPLICIT SEQUENCE -- channel convene request
|
|
{
|
|
initiator UserID
|
|
}
|
|
|
|
ChannelConveneConfirmPDU ::= [APPLICATION 18] IMPLICIT SEQUENCE -- channel convene confirm
|
|
{
|
|
result PDUResult,
|
|
initiator UserID,
|
|
channel-id PrivateChannelID --#field "convene_channel_id"-- OPTIONAL
|
|
}
|
|
|
|
ChannelDisbandRequestPDU ::= [APPLICATION 19] IMPLICIT SEQUENCE -- channel disband request
|
|
{
|
|
initiator UserID,
|
|
channel-id PrivateChannelID
|
|
}
|
|
|
|
ChannelDisbandIndicationPDU ::= [APPLICATION 20] IMPLICIT SEQUENCE -- channel disband indication
|
|
{
|
|
channel-id PrivateChannelID
|
|
}
|
|
|
|
ChannelAdmitRequestPDU ::= [APPLICATION 21] IMPLICIT SEQUENCE -- channel admit request
|
|
{
|
|
initiator UserID,
|
|
channel-id PrivateChannelID,
|
|
user-ids SetOfUserIDs
|
|
}
|
|
|
|
ChannelAdmitIndicationPDU ::= [APPLICATION 22] IMPLICIT SEQUENCE -- channel admit indication
|
|
{
|
|
initiator UserID,
|
|
channel-id PrivateChannelID,
|
|
user-ids SetOfUserIDs
|
|
}
|
|
|
|
ChannelExpelRequestPDU ::= [APPLICATION 23] IMPLICIT SEQUENCE -- channel expel request
|
|
{
|
|
initiator UserID,
|
|
channel-id PrivateChannelID,
|
|
user-ids SetOfUserIDs
|
|
}
|
|
|
|
ChannelExpelIndicationPDU ::= [APPLICATION 24] IMPLICIT SEQUENCE -- channel expel indication
|
|
{
|
|
channel-id PrivateChannelID,
|
|
user-ids SetOfUserIDs
|
|
}
|
|
|
|
-- Part 7: Data transfer
|
|
|
|
SendDataRequestPDU ::= [APPLICATION 25] IMPLICIT SEQUENCE -- send data request
|
|
{
|
|
initiator UserID,
|
|
channel-id ChannelID,
|
|
data-priority PDUPriority,
|
|
segmentation PDUSegmentation,
|
|
user-data OCTET STRING
|
|
}
|
|
|
|
SendDataIndicationPDU ::= [APPLICATION 26] IMPLICIT SEQUENCE -- send data indication
|
|
{
|
|
initiator UserID,
|
|
channel-id ChannelID,
|
|
data-priority PDUPriority,
|
|
segmentation PDUSegmentation,
|
|
user-data OCTET STRING
|
|
}
|
|
|
|
UniformSendDataRequestPDU ::= [APPLICATION 27] IMPLICIT SEQUENCE -- uniform send data request
|
|
{
|
|
initiator UserID,
|
|
channel-id ChannelID,
|
|
data-priority PDUPriority,
|
|
segmentation PDUSegmentation,
|
|
user-data OCTET STRING
|
|
}
|
|
|
|
UniformSendDataIndicationPDU ::= [APPLICATION 28] IMPLICIT SEQUENCE -- uniform send data indication
|
|
{
|
|
initiator UserID,
|
|
channel-id ChannelID,
|
|
data-priority PDUPriority,
|
|
segmentation PDUSegmentation,
|
|
user-data OCTET STRING
|
|
}
|
|
|
|
-- Part 8: Token management
|
|
|
|
TokenGrabRequestPDU ::= [APPLICATION 29] IMPLICIT SEQUENCE -- token grab request
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID
|
|
}
|
|
|
|
TokenGrabConfirmPDU ::= [APPLICATION 30] IMPLICIT SEQUENCE -- token grab confirm
|
|
{
|
|
result PDUResult,
|
|
initiator UserID,
|
|
token-id TokenID,
|
|
token-status PDUTokenStatus
|
|
}
|
|
|
|
TokenInhibitRequestPDU ::= [APPLICATION 31] IMPLICIT SEQUENCE -- token inhibit request
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID
|
|
}
|
|
|
|
TokenInhibitConfirmPDU ::= [APPLICATION 32] IMPLICIT SEQUENCE -- token inhibit confirm
|
|
{
|
|
result PDUResult,
|
|
initiator UserID,
|
|
token-id TokenID,
|
|
token-status PDUTokenStatus
|
|
}
|
|
|
|
TokenGiveRequestPDU ::= [APPLICATION 33] IMPLICIT SEQUENCE -- token give request
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID,
|
|
recipient UserID
|
|
}
|
|
|
|
TokenGiveIndicationPDU ::= [APPLICATION 34] IMPLICIT SEQUENCE -- token give indication
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID,
|
|
recipient UserID
|
|
}
|
|
|
|
TokenGiveResponsePDU ::= [APPLICATION 35] IMPLICIT SEQUENCE -- token give response
|
|
{
|
|
result PDUResult,
|
|
recipient UserID,
|
|
token-id TokenID
|
|
}
|
|
|
|
TokenGiveConfirmPDU ::= [APPLICATION 36] IMPLICIT SEQUENCE -- token give confirm
|
|
{
|
|
result PDUResult,
|
|
initiator UserID,
|
|
token-id TokenID,
|
|
token-status PDUTokenStatus
|
|
}
|
|
|
|
TokenPleaseRequestPDU ::= [APPLICATION 37] IMPLICIT SEQUENCE -- token please request
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID
|
|
}
|
|
|
|
TokenPleaseIndicationPDU ::= [APPLICATION 38] IMPLICIT SEQUENCE -- token please indication
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID
|
|
}
|
|
|
|
TokenReleaseRequestPDU ::= [APPLICATION 39] IMPLICIT SEQUENCE -- token release request
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID
|
|
}
|
|
|
|
TokenReleaseConfirmPDU ::= [APPLICATION 40] IMPLICIT SEQUENCE -- token release confirm
|
|
{
|
|
result PDUResult,
|
|
initiator UserID,
|
|
token-id TokenID,
|
|
token-status PDUTokenStatus
|
|
}
|
|
|
|
TokenTestRequestPDU ::= [APPLICATION 41] IMPLICIT SEQUENCE -- token test request
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID
|
|
}
|
|
|
|
TokenTestConfirmPDU ::= [APPLICATION 42] IMPLICIT SEQUENCE -- token test confirm
|
|
{
|
|
initiator UserID,
|
|
token-id TokenID,
|
|
token-status PDUTokenStatus
|
|
}
|
|
|
|
-- Part 9: Status codes
|
|
|
|
PDUReason ::= ENUMERATED -- in DisconnectProviderUltimatumPDU, DetachUserRequestPDU, DetachUserIndicationPDU
|
|
{
|
|
rn-domain-disconnected (0),
|
|
rn-provider-initiated (1),
|
|
rn-token-purged (2),
|
|
rn-user-requested (3),
|
|
rn-channel-purged (4)
|
|
}
|
|
|
|
PDUResult ::= ENUMERATED -- in Connect, response, confirm
|
|
{
|
|
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)
|
|
}
|
|
|
|
Diagnostic ::= ENUMERATED -- in RejectUltimatumPDU
|
|
{
|
|
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 ConnectInitialPDU,
|
|
connect-response ConnectResponsePDU,
|
|
connect-additional ConnectAdditionalPDU,
|
|
connect-result ConnectResultPDU
|
|
}
|
|
|
|
DomainMCSPDU ::= CHOICE
|
|
{
|
|
plumb-domain-indication PlumbDomainIndicationPDU,
|
|
erect-domain-request ErectDomainRequestPDU,
|
|
merge-channels-request MergeChannelsRequestPDU,
|
|
merge-channels-confirm MergeChannelsConfirmPDU,
|
|
purge-channel-indication PurgeChannelIndicationPDU,
|
|
merge-tokens-request MergeTokensRequestPDU,
|
|
merge-tokens-confirm MergeTokensConfirmPDU,
|
|
purge-token-indication PurgeTokenIndicationPDU,
|
|
disconnect-provider-ultimatum DisconnectProviderUltimatumPDU,
|
|
reject-user-ultimatum RejectUltimatumPDU,
|
|
attach-user-request AttachUserRequestPDU,
|
|
attach-user-confirm AttachUserConfirmPDU,
|
|
detach-user-request DetachUserRequestPDU,
|
|
detach-user-indication DetachUserIndicationPDU,
|
|
channel-join-request ChannelJoinRequestPDU,
|
|
channel-join-confirm ChannelJoinConfirmPDU,
|
|
channel-leave-request ChannelLeaveRequestPDU,
|
|
channel-convene-request ChannelConveneRequestPDU,
|
|
channel-convene-confirm ChannelConveneConfirmPDU,
|
|
channel-disband-request ChannelDisbandRequestPDU,
|
|
channel-disband-indication ChannelDisbandIndicationPDU,
|
|
channel-admit-request ChannelAdmitRequestPDU,
|
|
channel-admit-indication ChannelAdmitIndicationPDU,
|
|
channel-expel-request ChannelExpelRequestPDU,
|
|
channel-expel-indication ChannelExpelIndicationPDU,
|
|
send-data-request SendDataRequestPDU,
|
|
send-data-indication SendDataIndicationPDU,
|
|
uniform-send-data-request UniformSendDataRequestPDU,
|
|
uniform-send-data-indication UniformSendDataIndicationPDU,
|
|
token-grab-request TokenGrabRequestPDU,
|
|
token-grab-confirm TokenGrabConfirmPDU,
|
|
token-inhibit-request TokenInhibitRequestPDU,
|
|
token-inhibit-confirm TokenInhibitConfirmPDU,
|
|
token-give-request TokenGiveRequestPDU,
|
|
token-give-indication TokenGiveIndicationPDU,
|
|
token-give-response TokenGiveResponsePDU,
|
|
token-give-confirm TokenGiveConfirmPDU,
|
|
token-please-request TokenPleaseRequestPDU,
|
|
token-please-indication TokenPleaseIndicationPDU,
|
|
token-release-request TokenReleaseRequestPDU,
|
|
token-release-confirm TokenReleaseConfirmPDU,
|
|
token-test-request TokenTestRequestPDU,
|
|
token-test-confirm TokenTestConfirmPDU
|
|
}
|
|
|
|
END
|