H.245 v1 and v2 will not interoperate

Bancroft Scott baos at OSS.COM
Sun Sep 28 08:43:57 EDT 1997


Hi,

In trying to use an option of the OSS ASN.1 Compiler that makes it
possible to move from V1 to V2 of a protocol without any name changes
occurring in the generated .h file, the ASN.1 compiler reported a bunch of
unexpected changes in H.245 V2 relative to H.245 V1.  Upon investigation I
found that its complaints were due to a) changes in the names of identifiers
in H.245 V2 compared to those in V1, and much more seriously, b) changes in
the H.245 V2 messages compared to V1 that results in V2 not being a valid
extension of V1 - meaning that any implementation that conforms to H.245 V2
is guaranteed to be non-interoperable with implementations that
conform to H.245 V1.

I don't follow H.245 closely, so I don't know if it was intentional that
these two versions are incompatible with each other.  If this was the
intent then please ignore this email.

Some of the changes in H.245 V2 that result in name changes in the
compiler-generated .h file (unless a directive is used to tell the
compiler to use the V1 name) are:

- All occurrences of the identifier q723 have been changed to q7231

- In T84Profile the identifier jbig200x200Progr has been changed to
jbig200x200Prog ("r" at the end has been removed).

- In AudioMode the identifier g-dsvd has been changed to g729AnnexA

- In H263VidoeCapability the identifier bppmaxKb has been changed to
bppMaxKb ("m" changed to "M").

- In DataProtocolCapability the identifier the identifier
hdlcFrameTunnellingwSAR has been changed to hdlcFrameTunnelingwSAR ("ll"
changed to "l").

- In RequestMultiplexEntry the identifier
multiplexTableEntryNumberentryNumbers has been changed to entryNumbers.

- In RequestMultiplexEntryAck the identifier
multiplexTableEntryNumberentryNumbers has been changed to entryNumbers.

- In RequestMultiplexEntryRelease the identifier
multiplexTableEntryNumberentryNumbers has been changed to entryNumbers.

The above is probably only a partial list of the changes that are merely
minor annoyances for anyone who uses an ASN.1 compiler.  Much more
significant are the following which render H.245 V2 inoperable with H.245
V1 implementations:

- In OpenLogicalChannelAck the CHOICE alternative v75Parameters was
removed in H.245 V2.  This affects the bits on the wire and guarantees
that a V1 and V2 applications cannot interoperate if they attempt to
exchange an OpenLogicalChannelAck message unless they happen to omit the
reverseLogicalChannelParameters or multiplexParameters fields.  If
multiplexParameters is present they will fail to interoperate.

- The type of AudioCapability.g729AnnexA changed from being a SEQUENCE to
being an INTEGER.  This changes the bits on the wire because a field that
was previously mandatory is now no longer being encoded.

- In H.245 V2 the V76HDLCParameters has the field crcLength as
mandatory, while in H.245 V1 it is OPTIONAL.  This affects the
bits on the wire so V1 and V2 cannot exchange the V76HDLCParameters type.

- In IndicationMessage the second CHOICE alternative has changed from
FunctionNotSupported in V1 to FunctionNotUnderstood in V2.  This affects
the bits on the wire so that V1 and V2 cannot exchange the second CHOICE
alternative of this message, for FunctionNotSupported and
FunctionNotUnderstood are syntactically different types.

- In H.245 V1 NonStandardParameter was extensible, while in V2 it is not.
This affects the bits on the wire and makes it impossible for
NonStandardParameter to be exchanged between V1 and V2 implementations.

- In H.245 V1 NonStandardIdentifier was extensible, while in V2 it is not.
This affects the bits on the wire and makes it impossible for
NonStandardParameter to be exchanged between V1 and V2 implementations.

- In H.245 V1 the DataProtocolCapability components
segmentationAndReassembly and hdlcFrameTunnellingwSAR were in the
extension root, but in H.245 V2 they have been made extension additions.
This affects the bits on the wire for all possible encodings of
DataProtocolCapability so it cannot be exchanged between V1 and V2
implementations.

- V76LogicalChannelParameters has been changed from a CHOICE to a
SEQUENCE.  This affects the bits on the wire so
V76LogicalChannelParameters cannot be exchanged between V1 and V2
implementations.

- In UserInputIndication the component alphanumeric has changed types from
IA5String to GeneralString.  This is undoubtedly a mistake, IMHO.  Aside
from the fact that it affects the bits on the wire due to the default
permitted alphabet being altered, GeneralString is a far more difficult
type to work with because the characters in it are of varying width.  That
is, one character can occupy 1 byte, and the next 3 bytes, then next 4
bytes, the next 2 bytes, and so on.  It is due to the difficulty in
writing programs to process such character string types why BMPString was
introduced into ASN.1.  What was the rationale for going from IA5String
to GeneralString?

I am likely to have missed other changes that make V1 and V2 incompatible,
for I was not trying to be thorough once I realized that there were more
than just one or two such errors.

It occurs to me that maybe the idea is that protocolIdentifier is to
be used to determine the set of messages that can be exchanged, so the
problems with bits on the wire mappings reported above are not
important.  However, if this is the case and bits on the wire
compatibility is not important then why bother adding types after the
extension marks ("..."), given that such types require a few more bits to
encode than if they appeared before the extension mark?

--------------------------------------------------------------------------
Bancroft Scott                                Toll Free    :1-888-OSS-ASN1
Open Systems Solutions, Inc.                  International:1-609-987-9073
baos at oss.com                                  Tech Support :1-732-249-5107
http://www.oss.com                            Fax          :1-732-249-4636



More information about the sg16-avd mailing list