提取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

相关文章

基于Python实现一个PDF特殊字体提取工具

《基于Python实现一个PDF特殊字体提取工具》在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析,本文介绍的PDF特殊字体提取器是一款基于Python开发的桌面应用程序感兴趣的... 目录一、应用背景与功能概述二、技术架构与核心组件2.1 技术选型2.2 系统架构三、核心功能实现解析

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr