提取3GPP TS中RRC ASN.1模式及编译

2024-01-03 12:48

本文主要是介绍提取3GPP TS中RRC ASN.1模式及编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 整体流程图
    • ASN.1 标准简介
    • 3GPP协议
    • 转换工具下载
      • 使用`txt2asn1` 转换
      • 使用extract_asn1_from_spec.pl
    • ASN1C编译ASN.1文件
      • FAQ

整体流程图

image-20211006095545911

ASN.1 标准简介

在电信和计算机网络领域,ASN.1Abstract Syntax Notation One) 是一套标准,是描述数据、编码、传输、解码的灵活的抽象语义记法。它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。

3GPP协议

5G NR 的无线资源控制(RRC)协议是 38.331

38.331

image-20211005113541974

LTE 的无线资源控制(RRC)协议是 36.331

36.331

image-20211005113603915

提取RRC,ASN1样式

image-20211005113918113

转换工具下载

将下载后的3GPP协议Word 文档去掉页眉页脚后转换成纯文本txt, 编码选择UTF-8

使用txt2asn1 转换

txt2asn1

请下载ZIP格式并解压,避免出现exe权限无法运行问题

在同目录下终端运行 得到xxx.asn1文件

./txt2asn1.exe XXX.txt

image-20211005115104278

使用extract_asn1_from_spec.pl

extract_asn1_from_spec

下载文件后, 源文件同目录终端运行

perl extract_asn1_from_spec xxxx.txt

得到 EUTRA-RRC-Definitions.asn, EUTRA-UE-Variables.asn ,EUTRA-InterNodeDefinitions 三个文件

image-20211005115415629

ASN1C编译ASN.1文件

ASN1C 是将 ASN.1 规范转换为 C 源代码的免费开源编译器。 它支持一系列 ASN.1 语法,包括 ISO/IEC/ITU ASN.1 1988、'94、'97、2002 和以后的修正。 支持的编码规则集是

  • BER: ITU-T Rec. X.690 | ISO/IEC 8825-1 (2002) (BER/DER/CER)
  • PER: X.691|8825-2 (2002) (PER).
  • XER: X.693|8825-3 (2001) (BASIC-XER/CXER).

asn1c官网

asn1c源码

ubuntu 可直接通过 sudo apt-get install asn1c 进行安装

sudo apt update
sudo apt install asn1c

image-20211005115807407

image-20211005115922220

使用asn1c 编译

asn1c -S /usr/share/asn1c -fcompound-names -gen-PER -pdu=auto 36331-f40.asn1
# -pdu=auto  产生pdu_colletion.c文件
# -fcompound-names 去除重定义
# -gen-PER 使用PER编码
# -S /usr/share/asn1c 指定asn1c库文件位置, 通过使用whereis asn1c命令查看其库位置

FAQ

Q.: Does asn1c support BER encoding? I see only DER encoding in documentation.
A.: Yes, the asn1c compiler fully supports BER encoding. Any DER encoded data is, by definition, a valid BER data, from the receiver’s point of view.

If you want data to be BER or DER encoded, just invoke der_encode().

Q.: My linker complains: Undefined symbols: _asn_DEF_PDU.
A.: If you have your own file with main() routine, just delete the converter-sample.cfile, you won’t need it. If you haven’t created the main() routine yourself and wish to rely on converter-sample.c for your transcoding needs, add -DPDU=YourPdu to the list of compiler flags.

Q.: How to compile the 3GPP Radio Resource Control specification?
A.: The asn1c distribution includes an RRC 25.331 (version 7.1.0) example, check out https://github.com/vlm/asn1c/tree/master/examples/sample.source.RRC. You can also use the pre-compiled rrc-dump.exe program, which is part of Windows ASN.1 compiler installer.

Q.: How to compile the ISO 13522 (MHEG-5) specification?
A.: The ASN.1 compiler comes with a MHEG-5 decoder. Follow the https://github.com/vlm/asn1c/tree/master/examples/sample.source.MHEG5 README file instructions. You can also use the pre-compiled mheg5dump.exe program, which is part of Windows ASN.1 compiler installer.

Q.: How to compile the XYZ decoder?
A.: If XYZ is one of MEGACO (Media Gateway Control), PKIX1/X.509, LDAP, GSM TAP3 or OAM ULP, just go to examples/sample.source.XYZ and run make. The Windows ASN.1 compiler installer already contains the pre-compiled decoders for these encoding formats.

If you have something else, you should either use the Online ASN.1 compiler, or download the ASN.1 compiler source code.

如果不使用自己的main()函数, 直接使用converter-sample.c的化, 需要在其中添加一个目标PDU

#include <asn_application.h>
#include <asn_internal.h>	/* for ASN__DEFAULT_STACK_MAX */#define PDU BCCH_BCH_Message
/* Convert "Type" defined by -DPDU into "asn_DEF_Type" */
#define	ASN_DEF_PDU(t)	asn_DEF_ ## t
#define	DEF_PDU_Type(t)	ASN_DEF_PDU(t)
#define	PDU_Type	DEF_PDU_Type(PDU)

或者在Makefile.am.sample 文件中, 修改 CFLAGS 添加 -DPDU= 选项

CFLAGS += -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE  -DPDU=BCCH_BCH_Message -DASN_PDU_COLLECTION -I.
OBJS=${ASN_MODULE_SRCS:.c=.o} ${ASN_CONVERTER_SOURCES:.c=.o}all: $(TARGET)$(TARGET): ${OBJS}$(CC) $(CFLAGS) -o $(TARGET) ${OBJS} $(LDFLAGS) $(LIBS)

这篇关于提取3GPP TS中RRC ASN.1模式及编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/565742

相关文章

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

详解如何使用Python提取视频文件中的音频

《详解如何使用Python提取视频文件中的音频》在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用Python编程语言提取视频文件中的音频的方法,大家可以根据需要进行选择... 目录引言代码部分方法扩展引言在多媒体处理中,有时我们需要从视频文件中提取音频,以便进一步处理或分析。本文

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3