DPAA FMAN FMC 工具使用

FMC 工具使用

本文主要为NXP官方LSDK手册阅读翻译总结,仅供参考

1 FMC 简介

帧管理器(FMan)是NXP数据路径加速架构(DPAA)的一部分,这是一组逻辑块,允许多个处理器(核心)以较低的软件开销与多个网络接口和加速器交互。

帧管理器配置工具(FMC工具)是一个命令行程序,它将网络数据包流的解析分类(PCD)描述转换为FMan的KeyGen、Controller和Policir功能的硬件配置代码。

该工具提供了一个抽象层:您可以用高级XML标记语言(带有NXP扩展的NetPDL)定义应用程序的PCD需求。该工具将这些定义转换为初始化FMan寄存器和数据结构的代码。这种抽象使得学习底层硬件细节变得不必要,允许新用户更快地提高生产力,并简化每个人的编程任务。

2 FMC Tools - 特性

FMC工具可以分析输入的NetPDL和NetPCD XML文件,这些文件定义应用程序所需的解析、分类、管理和分发行为。然后,该工具可以:

  • 通过调用适当的FMan驱动程序API函数,将此信息直接传递给FMan;
  • 生成包含此信息的C源文件,您可以将其包含在应用程序中。

更详细地说,FMC工具可以执行下面列出的任务。所采取的特定操作取决于应用程序的要求。

  • 定义协议栈;
  • 定义软头检查序列;
  • 配置policr子块;
  • 通过定义如何将帧分配给特定帧队列来配置帧分布;
  • 调用硬件驱动程序来执行当前配置;
  • 通过在运行嵌入式Linux的目标上执行来直接配置FMan;
  • 通过生成配置FMan的C源代码,在Linux或Windows主机上执行,间接配置FMan。也可以在应用程序中包含此代码。

3 FMC Tools - 组件和打包

FMC工具包包含以下文件:

  • 用于Linux和Windows桌面版本的FMC工具的主机版本
  • 面向嵌入式Linux的FMC工具应用
  • NetPDL文件,包含FMan硬解析器支持的每个标准网络协议的描述。该文件名为hxs_pdl_v3.xml,位于目录/etc/fmc/config/中。
    注:有关NetPDL的详细信息,请转到 http://ftp.tuwien.ac.at/.vhost/analyzer.polito.it/30alpha/docs/dissectors/NetPDLCore.htm
    有关NXP定制版NetPDL的文档( see NXP NetPDL Reference on page 590)。

4 FMC Tools - Runtime Environment Mode

在运行时环境模式下,从Linux命令行在目标板上运行FMC工具,并将多个配置文件作为参数传递。然后,该工具调用所提供文件中指定的配置FMan块所需的FMan驱动程序API函数。

以这种方式使用时,FMC工具直接配置FMan。更详细地说,FMC工具将其在输入文件中找到的配置(连同编译的软解析器固件)传递给FMan驱动程序,后者反过来修改FMan的配置。

注:FMC工具不支持动态FMan配置;您可以使用该工具仅配置一次FMan,通常是在应用程序初始化时。

FMC工具,运行时环境-输入XML文件/FMan驱动程序API调用关系如下图,需要将以下四类文件作为命令行参数传递给FMC工具:

  • 标准协议文件-可选;包括在LSDK中;
  • 自定义协议文件-可选;用户编写;
  • 策略文件-必需;用户编写;
  • 配置文件-必需;用户编写;
    在这里插入图片描述

5 FMC Tools - Host Mode

除了在目标板上运行外,FMC工具还可以在运行Linux或Windows的主机上执行。在主机上运行时,FMC工具接受与运行时环境模式相同的输入文件。

但是,在主机模式下,FMC工具生成C源代码文件。该代码调用所提供的输入文件中定义的规则所需的FMan驱动程序函数。您可以编译和链接这些文件以生成一个独立的可执行文件,您可以自己运行,也可以将它们添加到应用程序中。

注:FMC工具不支持动态 FMan 配置;您可以使用该工具仅配置一次 FMan,通常是在应用程序初始化时。

如下图所示,FMC在主机模式下,FMC 工具根据从下面列出的 xml 输入文件生成C源代码文件。

  • 标准协议文件 - 可选;包括在LSDK中;
  • 自定义协议文件 - 可选;用户编写;
  • 策略文件 - 必需;用户编写;
  • 配置文件 - 必需;用户编写;

用户可以将这些文件作为命令行参数传递给FMC工具。
在这里插入图片描述

5.1 主机模式输出 - C源代码文件

FMC工具在主机模式下运行时,会生成C语言的源代码文件,用于调用FMan Driver API函数。这些调用实现了从命令行传递到工具的配置文件、策略文件和(可选的)自定义协议文件中定义的行为。通常,您会在项目中包含这些源文件,因此它们会被编译并链接到应用程序二进制文件中。因此,当您运行应用程序时,它会自动设置FMan以使其按需要运行。
详细地讲:

  • 当您提供策略文件和配置文件时,该工具将生成一个名为“fmc_config_data.c”的源代码文件
  • 当您提供策略文件、配置文件和自定义协议文件时,该工具将生成两个源代码文件:“fmc_config_data.c”和“softparse.h”。

fmc_config_data.c的内容:

  • 在文件顶部包括软件解析器配置“softparse.h”
  • 使用配置数据初始化FMC模型结构“FMC_model_t” -该结构根据输入文件表示FMan硬件配置的数据模型

fmc_config_data.c的使用:

  • FMC模型结构必须与FMC模型定义和FMC执行器:"fmc.h"和"fmc_exec.c"文件。这些文件在FMC源文件位置中有效;
  • FMC模型定义包含“FMC_model"结构定义 - 此结构表示FMC配置模型
  • FMC executer包含"FMC_execute"例程-此功能配置FMan硬件,使其按照输入文件中的规定运行

使用选项:

  • 编译并将这些文件链接在一起(‘fmc_config_data.c’、‘fmc.h’、‘fmc_exec.c’),生成一个独立的二进制文件并运行该二进制文件来配置FMan - 在这种情况下,必须添加一个调用fmc_execute())的main()函数
  • 让应用程序调用fmc_execute() - 在这种情况下,不需要添加main()函数

softparse.h 的内容:

  • 包含控制解析自定义协议头所涉及的FMan子块的编译固件
  • 定义代码大小、要附加的协议和下载基址等参数

使用 softparse.h - 如果向FMC工具传递自定义协议文件,该文件将自动包含在fmc_config.c中。
**注意:在启用Rx/Tx端口发送/接收流量之前,应配置FMan。如果没有,FMan将使用默认Rx和默认Tx帧队列。 **

6. FMC工具命令行参数

下表列出并描述了FMC工具的命令行参数。

命令行参数语法(显示了详细和缩写的命令形式)描述
-d <pdl_file>, --pdl <pdl_file>标准协议文件的路径和名称。
(可选)
可以使用完整路径或相对路径。
-p <pcd_file>, --pcd <pcd_file>策略文件的路径和名称。
(除非使用了“-sp_only”,否则为必填项)
可以使用完整路径或相对路径。
-c <data_file>, --config <data_file>配置文件的路径和名称。
(除非使用了“-sp_only”,否则为必填项)
可以使用完整路径或相对路径。
-s <custom_protocol_file>, --custom_protocol <custom_protocol_file>自定义协议文件的路径和名称。
(可选,除非使用了“-sp_only”标志,在这种情况下,此自定义协议文件名是必需的)
可以使用完整路径或相对路径。、
-a, --apply将提供的配置应用于FMan,而不是生成C源代码。(可选;仅在运行时环境中执行FMC工具时有效)
–sp_only仅执行软解析器处理。
当提供此参数时,FMC工具只编译自定义协议文件,生成文件softparse.h并退出。softparse.h包含C源代码和自定义协议偏移量;
该工具创建softparse.h在执行FMC工具的路径中。(可选)
-w不要报告警告。(可选)
–version显示版本信息,然后退出。(可选)
-h, --help显示使用情况信息,然后退出。(可选)

7. NetPDL和NetPCD XML标记语言

网络协议描述语言(NetPDL)是一种XML语言,它定义了用于描述OSI第2层到第7层协议的元素。(有关NetPDL的更多信息,see http://ftp.tuwien.ac.at/.vhost/analyzer.polito.it/30alpha/docs/dissectors/NetPDLCore.htm).)

NXP使用NetPDL定义由FMan的硬解析器解析的标准协议。不能更改这些协议描述。但是,SDK包含一个标准协议文件,可以将其用作参考。

此外,您可以使用NetPDL(语义和语法略有不同)定义由FMan的软解析器解析的自定义协议。此功能允许FMan处理现有的或您自己定义的任何协议。

最后,NXP扩展了NetPDL以创建一种称为NetPCD的语言。您可以使用NetPCD的元素和属性来定义FMan解析、分类、管理和分发行为。由此定义的处理确定帧如何在FMan的块之间移动。

FMC工具接受NetPCD和NetPDL格式的文件作为输入。

8. 协议文件

对于FMC工具要识别的协议,协议必须以以下两种方式之一定义:

  1. 作为标准协议文件中的标准协议(包含在SDK中)
  2. 作为自定义协议文件中的自定义协议。

每个文件类型在下面的章节中进行了描述。

8.1 标准协议文件

LSDK包含一个称为标准协议文件的文件。该文件包含NetPDL(网络协议描述语言)标记,该标记定义了FMan硬解析器可以处理的每个标准协议头中的字段。此外,对于每个标准协议,该文件都包含NetPDL语句,这些语句定义了硬解析器在遇到该协议的入站实例时要采取的操作。

标准协议文件仅供FMan内部使用;因此,你不能改变它。但是,要编写自定义协议文件和/或策略文件,有时需要标准协议文件包含的信息,例如协议头中的字段名称。

因此,SDK在以下目录中包含标准协议文件的副本:/etc/fmc/config/hxs_pdl_v3.xml。FMC标准协议XML文件的一般结构如下所示。

<netpdl>
   <protocol> <!-- one or more -->
   	
   	<format> <!-- only one -->
   		<fields> <!-- only one -->
   			<field/> <!-- one or more -->
   		</fields>
   	</format>
   	
   	<execute-code>
   	</execute-code>
   	<encapsulation>
   	</encapsulation>
   	<visualization>
   	</visualization>
   	
   </protocol>
</netpdl> 	

8.2 自定义协议文件

FMan的硬解析器具有处理一组广泛使用的标准协议(如IPv4)的内置功能。FMan还有一个软解析器,它能够处理自定义协议。

当然,要让软解析器识别自定义协议,必须首先提供该协议的定义。为此,您需要创建一个自定义协议文件,该文件由NetPDL标记组成,NetPDL标记定义自定义协议头中的字段,以及您希望软解析器对这些字段执行的操作。然后将该文件传递给FMC工具,该工具对其进行编译并将结果传递给FMan。

注意: NetPDL语言中的一些元素只有在与协议分析工具一起使用时才相关。FMC工具不支持这些元素;相反,该工具只支持那些适用于FMan块的元素。此外,尽管自定义协议的标记基于NetPDL,但它并不严格遵循NetPDL规则。因此,强烈建议您熟悉第590页的NXP NetPDL Reference,它完全记录了在自定义协议定义中使用的NetPDL的自定义版本。

请参见645页的自定义协议文件- GTP协议示例,其中包含定义GPRS隧道协议(GTP)的XML格式的自定义协议定义文件的示例。

注意:如果您的应用程序不使用自定义协议,则不必创建自定义协议文件。此外,如果你的应用程序使用多个自定义协议,你可以(而且必须)在一个自定义协议文件中定义它们;你可以只传递一个自定义协议文件到FMC工具。

自定义协议文件的一般结构如下所示。

<netpdl> <!-- only one instance -->
	<protocol> <!-- one or more instances -->
		
		<format> <!-- only one instance -->
			<fields> <!-- only one instance -->
				<field/> <!-- one or more instances -->
			</fields>
		</format>
		<execute-code> <!-- zero or one instance -->
			<before> <!-- zero or one instance -->
			</before>
			<after> <!-- zero or one instance -->
			</after>
		</execute-code>
		
	</protocol>
</netpdl>

9 策略文件

策略文件定义了各个FMan子块如何解析、分类、管理和分发每个入站帧。

策略文件由NetPCD标记组成,其中NetPCD是NXP对NetPDL的扩展,NetPDL是一种描述网络协议的XML标记语言。NetPCD的元素和属性允许您定义应用程序所需的解析、分类、监督和分发行为。关于每个NetPCD元素及其属性的文档,请参阅第611页的NetPCD参考。

策略文件可以包含以下部分:

  • 分发(必需)- 包含一个或多个分发定义,每个定义:
    • 指定帧必须包含的协议以匹配分发
    • 定义如何处理匹配帧
  • 策略 -(必需)- 包含一个或多个策略定义,其中每个:
    • 与一个FMan端口关联
    • 包含一个按优先级排列的分发列表
  • 分类(可选)-包含一个或多个分类块,每个分类块:
    • 定义键/值/动作元组,FMan的控制器子块存储在查找表中
    • 将当前帧头中的指定字段与此表中的每个值进行比较,并在匹配后采取指定的操作
  • policr(可选)-最多包含256个policr配置文件,其中每一项都可用于:
    • 在不考虑交通流量的情况下对帧采取行动
    • 根据RFC-2698双速率三色警务方案对帧采取行动
    • 根据RFC-4115双速率三色区分服务方案对帧采取行动

*注意:运行FMC工具时,必须向其传递策略文件或’–sp_only’标志。否则,程序将退出并打印错误消息。 *

策略文件的高级结构

<netpcd> <!-- only one instance -->
	<distribution> <!-- one or more instances -->
	</distribution>
	
	<policy> <!-- one or more instances -->
		<dist_order> <!-- one instance -->
			<distributionref/> <!-- one or more instances -->
		</dist_order>
	</policy>

	<classification> <!-- optional, may have more than one instance -->
	</classification>

	<policer> <!-- optional, may have more than one instance -->
	</policer>
</netpcd>

9.1 分发部分

策略文件的分发部分包含一个或多个“分发”元素。虽然“分发”元素可以出现在策略文件中的任何位置,但它们通常出现在文件的顶部。

通常,“分发”包含定义以下内容的子元素:

  • 帧匹配规则
    • 这些规则定义了入站帧必须满足的条件,以匹配(因此必需由)此分发 ;
    • 使用“协议”元素和 / 或“密钥”元素定义匹配规则。
  • 帧处理规则
    • 这些规则确定分发对匹配帧的操作;
    • 使用“队列”和“关键”元素散列帧,以便它们均匀分布在一系列帧队列中;
    • 使用“操作”元素将帧传递给策略文件中的另一个元素以供进一步处理 。

举例说明:

<!-- distribution that matches all frames containing an IPv4 header -->
<!-- hashes these frames, so they are spread evenly over 32 frame queues -->
<distribution name="hash_ipv4_src_dst_dist0">
	<!-- frame match rule -->
	<key>
		<fieldref name="ipv4.src"/>
		<fieldref name="ipv4.dst"/>
	</key>
	<!-- frame handling rule -->
	<queue count="32" base="0x400"/>
</distribution>

<!-- distribution that matches frames containing Eth/VLAN/IPv4/UDP/GTP headers -->
<!-- passes all matching frames to the "dl_vlan_clasifif" classification element -->
<distribution name="dl_eth_vlan_ipv4_udp_gtp_dist">
	<!-- frame match rule -->
	<protocols>
		<protocolref name="ethernet"/>
		<protocolref name="vlan"/>
		<protocolref name="ipv4"/>
		<protocolref name="udp"/>
		<!--shim1 is custom protocol defined for GTP -->
		<protocolref name="shim1"/>
	</protocols>
	
	<!-- frame handling rule
	<action type="classification" name="dl_vlan_classif"/>
</distribution>

在一系列帧队列上均匀分布帧

“distribution”元素的一个常见用法是在一系列帧队列上均匀地分布帧。如果将每个可用的核心配置为从范围内相同数量的队列中提取,这将平衡每个核心必须执行的工作。

在这种情况下,FMan的KeyGen子块使用帧头和分布子元素中的值作为哈希算法的输入,该算法在FQID范围内生成24位FQID。然后,KeyGen子块将帧放置在由该FQID标识的帧队列上。

以下是KeyGen生成FQID的算法:

  1. 提取并连接“key”子元素;
  2. 指定的协议头字段。将结果字符串散列为64位CRC ;
  3. 将CRC右移“键”元素的“移位”属性中指定的位数,以将所需位移到24个最低有效位位置;
  4. 零将“队列”子元素(“计数”属性–1)指定的位掩码扩展为24位;
  5. 按位和移位CRC;
  6. 的结果。按位或“combine”子元素指定值的结果-对每个“combine”元素;
  7. 重复。按位或“queue”子元素的“base”属性指定的基FQID的结果

下图显示了KeyGen子块用于计算FQID的算法;
KeyGen子块用于计算FQID的算法“key”元素有一个可选的“shift”属性,其值定义哈希结果右移的位数。shift属性的默认值为零。

KeyGen FQID计算示例如下:
下面的一系列图显示了KeyGen子块在其FQID计算中使用的分发块的子元素和属性。

  • 下图显示了KeyGen子块中获取其FQID计算的哈希、右移、按位AND和“add base”部分输入的位置。
    FQID计算-用于键、位掩码和基本FQID的元素/属性
  • 下图显示了一个“combine”元素,其中包含一个设置为“true”的“portid”属性。此外,元素的“偏移量”属性为“10”,其“掩码”为“0xFF”。此标记指示KeyGen子块执行FQID计算的“按位或”部分。更详细地说,对于此标记,KeyGen执行以下操作:
    • 按位ANDs当前帧到达的端口的8位逻辑端口ID(在配置文件中定义),在“combine”元素中包含8位掩码;
    • 按位OR(插入)24位FQID中指定偏移量(10位)处的8位结果(其中偏移量0表示FQID的最高有效位)。

注意:通过向配置文件添加标记,可以为每个FMan端口分配一个8位逻辑端口ID。为此,为要分配逻辑端口ID的每个“port”元素的“portid”属性分配一个8位值。硬解析器将该值(如果已定义)放入解析结果数组中,KeyGen的一个子模块可以从中获取该值
FQID计算-使用“portid”属性的“combine”元素

  • 下图显示了一个包含“frame”属性的“combine”元素。此标记指示 KeyGen 子块:
    • 获取当前帧头中偏移量112处的8位;
    • 按位和该值,并使用“组合”元素中指定的8位掩码(0xFF) ;
    • 按位或(插入)24位FQID中指定偏移量处的8位结果(其中偏移量0表示FQID的最高有效位)。

注:“帧”属性的值是从当前帧开始的偏移量(以位为单位)。KeyGen子块获取此偏移量处的字节以用于其FQID计算。“frame”的值必须可以被8整除,因此它引用的位位于字节边界上。
FQID计算-使用“frame”属性的“combine”元素

  • 最后,下图显示了KeyGen子块将每个合并元素的值插入按位或部分FQID计算的位置。
    FQID计算-按位或按位组合使用的元素
/*FQID公式 :*/
FQID[0:23] = (Shifted Hash Key[0:23] & Hash Mask) | 
			  Data0[0:23] 					      | 
			  Data1[0:23] 				          || 
			  Data7[0:23] 						  | 
			  FQID Base Address

总之,使用“distribution”元素的子元素/属性提供FQID等式右侧的值 .

9.2 策略部分

策略文件的策略部分由一个或多个“策略”元素组成。虽然“策略”元素可以出现在策略文件中的任何位置,但它们通常位于文件中最后一个“分发”元素之后。

每个“策略”元素定义了FMan可以应用于入站帧的一组候选分布。FMan应用于给定帧的特定分布取决于以下因素:

  • 每个分发在“策略”元素的分发顺序列表中的位置;
  • 每个分发的定义

候选分布按优先级顺序列出。因此,如果列表中的两个或多个分发与当前入站帧匹配,FMan将应用第一个匹配的分发,因为此分发具有更高的优先级。

FMan如何知道对特定以太网端口上接收的流量应用哪个策略(即,哪个分配的优先级列表)?配置文件提供了连接关系。

在配置文件中,必须为应用程序使用的每个FMan端口输入一个“端口”元素。此外,端口元素有一个必需的属性“policy”属性,其值必须与策略文件中的一个策略元素的名称匹配,从而定义FMan将应用于端口上接收的所有流量的策略(即分发的有序列表)。总之,配置文件中端口元素的策略属性的值将此元素标识的端口与策略文件中的策略元素绑定。

在配置文件中:

  • 可以为一个端口分配单个策略;
  • 可以为多个端口分配相同的策略;
  • 一个端口一次只能有一个活动策略通常;

用户可以为应用程序使用的每个端口分配一个策略。

举例说明Policy元素的简单使用:

  1. 配置文件
<!-- The port element assigns the dl_policy policy to the 10 Gbps port of FMan 0 -->
<!-- Policy dl_policy is defined in the Policy file - see next code snippet -->
<cfgdata>
	<config>
		<engine name="fm0">
			<port type="MAC" number="9" policy="dl_policy"/>
		</engine>
	</config>
</cfgdata>
  1. 策略文件
<!-- A policy element that defines how to apply two distributions -->
<!-- These distributions are defined elsewhere in the Policy file -->
<!-- This policy is assigned to an Ethernet port by the Configuration file above -->
<policy name="dl_policy">
	<dist_order>
		<distributionref name="dl_eth_vlan_ipv4_udp_gtp_dist"/>
		<distributionref name="garbage_dist"/>
	</dist_order>
</policy>

在上面的示例中,配置文件将名为“dl_policy”的策略分配给 LS1043A 芯片的第一个 FMan(fm0)的 10 Gbps 端口。因此,FMan 首先尝试将到达此端口的每个帧与“dl_eth_vlan_ipv4_udp_gtp_dist”分发相匹配,因为它首先出现在“policy”元素的分发顺序列表中。帧是否匹配取决于“dl_eth_vlan_ipv4_udp_gtp_dist”分发的定义,未显示该分发。如果帧匹配,则将根据此分发定义的规则进行处理。如果帧不匹配,FMan接下来会将其与“garbage_dist”分发进行比较,因为它出现在分发顺序列表的第二位。由于此分布的定义(也未显示),它匹配所有帧,从而确保以一种或另一种方式处理每个帧。

举例说明策略元素的复杂使用:

下图显示了 pktwire 应用程序的Policy文件。与前面的示例相比,此应用程序需要更复杂的策略和分发的使用。

这个Policy文件定义了10个‘Policy’元素——pktwr_policy_0、pktwr_policy_1、…pktwr_policy_9 – 其中一些元素如图所示。

配置文件(没有展示)将这些策略分配给SoC的十个FMan端口中的一个——第一个FMan (fm0)上有五个,第二个FMan (fm1)上有五个。

注意:不是所有QorIQ设备都有两个fman。也不是每个FMan都有5个以太网端口。请参阅QorIQ设备的参考手册,以确定该设备支持的FMan和FMan端口的数量。

<policy name = "pktwr_policy_0">
	<dist_order>
		<distributionref name = "pktwr_dist_0"/>
		<distributionref name = "garbage_dist_0"/>
	</dist_order>
</policy>

<policy name = "pktwr_policy_1">
	<dist_order>
		<distributionref name = "pktwr_dist_1"/>
		<distributionref name = "garbage_dist_1"/>
	</dist_order>
</policy>

<policy name = "pktwr_policy_2">
	<dist_order>
		<distributionref name = "pktwr_dist_2"/>
		<distributionref name = "garbage_dist_2"/>
	</dist_order>
</policy>

Policy文件还定义了10个发行版——pktwr_dist_0、pktwr_dist_1、…pktwr_dist_9——其中一些如图131所示。在585页。

<netpcd xmlns  xsi="http ://ww.w3.org/2001/XMLSchema-instance"
xsi  noNamespaceSchemaLocation="xmlProject/pcd. xsd" name="example"
description="PktWire configuration">
<distribution name="pktwr dist 0 " >
<queue (count = 32  base="Ox2860"/>
<key>
<fieldref name="ipv4. src"/>
<fieldref name="ipv4.dst"/>
</key>
</distribution>
<distribution name="pktwr dist 1 “ >
<queue count="32" base="Ox400"/>
<key>
<fieldref name="ipv4. src"/>
<fieldref name="ipv4.dst"/>
</key>
</distribution>
<distribution name="pktwr dist 2 “ >
<queue count="32" base="Ox800"/>
<key>
<fieldref name="ipv4. src"/>
<fieldref name="ipv4.dst"/>
</key>
</distribution>

如上所述,每个发行版都被分配给一个策略,而该策略又被分配给一个端口。一个帧“匹配”分配给该帧到达的端口,如果它的头包含ipv4和ipv4。src和ipv4。dst字段。

对于每一个匹配的帧,KeyGen 子块使用 ipv4 的连接计算一个哈希结果。src 和 ipv4。将 Dist 字段作为散列键。然后 KeyGen 子块使用哈希结果来计算 FQID。

得到的FQID在’queue’元素指定的范围内。例如,对于分发版本“pktwr_dist_0”,产生的FQID将在0x2800 - 0x281F范围内。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值