当前最尝用的工具是txt2asn1.exe。奈何官网txt2asn1.exe要收费,破解版有待验证。此外有些网站提供是固定版本的,无法定制自己的。本文提供一个通过脚本提取38.331协议中RRC的ANS1内容攻略。
以下为提取生成asn文件的步骤
1.从Directory Listing /ftp/Specs/latest下载一本你想提取的38.331协议,如38331-i51.docx
2.打开word文档,时间可能会有点长,耐心等待,另存为38331-i51.txt,编码格式为unicode(utf-8)
3.找一个linux环境执行perl extract_asn1_from_spce.pl 38331-i51.txt
perl extract_asn1_from_spce.pl 38331-i51.txt
4.然后同目录下会看到asn文件。
[root@hcss-ecs-5181 workspace]# ls
38331-i51.txt extract_asn1_from_spce.pl NR-RRC-38331.asn
extract_asn1_from_spce.pl脚本下载地址https://download.youkuaiyun.com/download/xixixixixi0/90939559
如果没有生成asn,可能本地没有安装asn1c,找个开源项目本地编译安装一下就可以了。
生成的asn文件存在大量的未展开的SetupRelease,如
BWP-DownlinkDedicated ::= SEQUENCE {
pdcch-Config SetupRelease { PDCCH-Config } OPTIONAL, -- Need M
pdsch-Config SetupRelease { PDSCH-Config } OPTIONAL, -- Need M
sps-Config SetupRelease { SPS-Config } OPTIONAL, -- Need M
radioLinkMonitoringConfig SetupRelease { RadioLinkMonitoringConfig } OPTIONAL, -- Need M
...,
此时的ASN文件无法直接被asn1tools使用,建议在结构体定义中直接展开,通过如下脚本。3GPP 38331 or 36331 RRC ASN1 SetupRelase的预处理Python脚本
https://download.youkuaiyun.com/download/xixixixixi0/90969052
执行命令如下
python .\proc_38331_rrc_asn1_setupRelase.py .\NR-RRC-38331.asn -o .\NR-RRC-38331_SetupRelease.asn -b
#原始文件 NR-RRC-38331.asn
#目标文件 NR-RRC-38331_SetupRelease.asn
处理之后为,保留原始文件的缩进
BWP-DownlinkDedicated ::= SEQUENCE {
pdcch-Config CHOICE {
release NULL,
setup PDCCH-Config
} OPTIONAL, -- Need M
pdsch-Config CHOICE {
release NULL,
setup PDSCH-Config
} OPTIONAL, -- Need M
sps-Config CHOICE {
release NULL,
setup SPS-Config
} OPTIONAL, -- Need M
radioLinkMonitoringConfig CHOICE {
release NULL,
setup RadioLinkMonitoringConfig
} OPTIONAL, -- Need M
...,
执行完脚本之后,把原始的SetupRelease定义删除,或屏蔽。后面就可以直接被asn1tools编译使用了。
-- CHOICE {
-- release NULL,
-- setup ElementTypeParam
-- } ::= CHOICE {
-- release NULL,
-- setup ElementTypeParam
-- }