1

asn.1 ソース ファイル (test.asn1 など) で 1 つの構造を定義しているときに問題が発生しました。

プロトコル バージョン 1 の次の定義があります。

PolicyControlDiagnostics ::= ENUMERATED
{
    policy    (1),
    policyControl  (2),
    policyControlResumed    (3)
}

次に、バージョン 2 をサポートする必要があります。プロトコル バージョン 2 では、いくつかのフィールドが変更されましたが、構造名は変更されません。たとえば、変数 policy が に変更されmytestpolicy、policyControl が に変更されましたmytestpolicyControl。その間、構造名PolicyControlDiagnosticsはバージョン 1 とバージョン 2 の両方で同じでした。

PolicyControlDiagnostics ::= ENUMERATED
{
    mytestpolicy  (1),
    mytestpolicyControl  (2),
    policyControlResumed    (3)
}

BER エンコード、デコードに snac を使用する C ルーチンを作成しようとすると、次のようにエラーが表示されます。

file "test.asn1", line 632: ERROR - type PolicyControlDiagnostics is multiply defined.

このエラーを解決するのを手伝ってもらえますか? ありがとう。

4

2 に答える 2

2

同じ ASN.1 モジュールで同じ列挙名を使用しようとしている場合、これは許可されていません。同じ仕様の異なるバージョンである 2 つの別個の ASN.1 モジュールがあり、それぞれに同じ名前のいくつかの型がある場合、一部の ASN.1 コンパイラは競合する名前を自動的に明確にします。

同じ ASN.1 モジュールで同じ型名を 2 回使用することは許可されていませんが、モジュールの 2 つのバージョン (いくつかの違いはありますが) を使用することは許可されています。これら 2 つのモジュール間の下位互換性には、相互運用性の問題を回避するために、ASN.1 の専門家の指導が必要です。

http://asn1-playground.oss.comにある無料のオンライン コンパイラとランタイムは、ASN.1 仕様を試してその有効性を確認するのに最適な場所です。

于 2013-08-01T18:11:08.337 に答える
0

The error says it all. You cannot have two definitions for a type. The names used in the ENUMERATED can be changed without consequence for BER encodings (XER encodings might be impacted; I'd have to look that up). Thus, the two definitions are equivalent and you can just pick one.

于 2013-08-01T16:36:37.757 に答える