【问题标题】:python asn1tools - failing compilation of asn.1python asn1tools - asn.1 编译失败
【发布时间】:2020-01-20 08:01:24
【问题描述】:

我正在尝试编译 3GPP 38.331 ASN.1 规范 here - 它是从 spec document 中提取的

import asn1tools
rrc = asn1tools.compile_files('./data/asn/38331-f80.docx.asn', 'uper')

但是这会引发错误asn1tools.errors.CompileError: Type 'SetupRelease' not found in module 'NR-RRC-Definitions'.

我可以在 .asn 文件中看到 SetupRelease 定义

SetupRelease { ElementTypeParam } ::= CHOICE {
    release         NULL,
    setup           ElementTypeParam
}

【问题讨论】:

  • github.com/eerimoq/asn1tools(如果是这个)“尚不支持参数化(X.683)”(有关解决方法,请参阅我的答案)
  • 引用的库是正确的。是否有任何替代库可以支持 Parametrization (X.683) ?
  • 乍一看,您使用的工具运行良好(因此我的工作值得一试)。另一个python工具是github.com/etingof/pyasn1(不知道是否支持参数化)
  • @user320644 尝试 pycrate 项目 - github.com/P1sec/pycrate。

标签: python asn.1


【解决方案1】:

很可能您的编译器不支持参数化类型。

你可以用不同的方式编写规范(保持兼容)

考虑从您的规范中删除它...

SetupRelease { ElementTypeParam } ::= CHOICE {
    release         NULL,
    setup           ElementTypeParam
}

规范中每次引用此类型时,将ElementTypeParam替换为实际类型。

例如...

LocationMeasurementIndication-IEs ::=       SEQUENCE {
    measurementIndication                       SetupRelease {LocationMeasurementInfo},
    lateNonCriticalExtension                    OCTET STRING                                                            OPTIONAL,
    nonCriticalExtension                        SEQUENCE{}                                                              OPTIONAL
}

应该变成

LocationMeasurementIndication-IEs ::=       SEQUENCE {
    measurementIndication  CHOICE {
        release         NULL,
        setup           LocationMeasurementInfo
    },
    lateNonCriticalExtension   OCTET STRING   OPTIONAL,
    nonCriticalExtension    SEQUENCE{}        OPTIONAL
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多