信雅纳400/800G网络测试仪之 CDF/ Extended Payload 功能:完全用户自定义的协议报文支持/可编程的协议内容支持

news2024/9/20 4:44:47

Note# 2024-3-21

今天被一个做芯片测试的客户追着问,应该合作在测试仪上做完全自定义的报文,添加自己的私有协议进去,他觉得每次都导入报头太麻烦了,然后就看了下Application Note关于CDF功能的描述,照着机翻的版本来回看了看,好像是有点意思。

场景需求:可自由编程/自定义的测试数据封包


在以太网通信产品研发过程中,灵活生成测试数据封包的能力是很有必要的,如测试验证 NPU(Network Processor Unit)需要用户能够对数据封包中的每个字节进行可编程/自定义控制。

NPU 可用于Switch、Router、Firewall、DPI等通信网络设备中,其在设备中承担任务包含:
- 识别区分数据封包中的每个比特字符
- 路由信息表查询
- 根据需要更改数据包中的某字段
- 管理队列和缓冲区

在开发过程中,必须验证 NPU 不仅在处理预期数据包时具有可预测的行为,而且在异常数据包到达 NPU 时也具有可预测的行为,开发过程还可能涉及需要 NPU 执行特定操作的新协议报文格式。可自由编程的测试数据封包功能将帮助开发人员生成测试流量,从而评估异常数据封包、新协议报文格式和其他流量条件下对设备的影响。同样的其他设通信设备的开发也会需要可自由编程的测试数据封包。


信雅纳:CDF(Custom Data Field )/自定义数据字段


自定义数据字段(CDF)已在新Odin-10G,Loki-100G,Thor-400G,Freya-800G上做支持。

它允许为测试流量Streams定义一系列自定义数据字段

  • 每个 CDF 将按照Streams中定义的顺序作为独立的测试数据封包发送
  • 每个CDF 可以设定不同的长度大小和不同的内容
  • 每个CDF 可按照为数据流指定的偏移值插入到测试数据包


如果为数据流指定了一组协议报文头(Protocol Header Segment),且 CDF 偏移值位于报文头所占区域内,则 CDF 数据可能会覆盖掉协议报文头数据。如果偏移量为 0,CDF 将覆盖为测试数据包定义的所有协议报文头。如果将偏移量设为 0,同时禁用帧校验序列(FCS)和仪表标签跟踪数据(TPLD)字段,则可以自由编程测试数据包中的所有字节。如何禁用 FCS 和 TPLD 将在后续说明。


每个测试端口的 CDF内存被分成 CDF 小块,每个小块包含一个CDF。数据块的大小对数据流中的所有 CDF 都是相同的,并且尺寸适合最大的 CDF。块大小为 2的n次方字节,范围从 64 字节到端口的最大传输单元 (MTU)。如果 CDF 短于数据块大小,数据块的剩余部分将用系统自动填充,自动填充的内容在数据流属性面板的 "Payload Content "部分定义为 "Payload Type"。

如果上面一段机翻的很拗口,可以总结为以下内容

Protocol Header 与Payload本质是一样的,所以定义了CDF字段,如果没有加Offset偏移量,将是会替换掉之前设定Segment/Protocol Header.

默认测试仪会计算加上FCS/CRC校验和在最后面,以及加入TPLD标签(用以追踪区分是否为仪表的发出的数据包),想发送完全自定义的报文,需要禁用掉FCS & TPLD.


图 2 展示了以数据流形式发送的测试数据包,该数据包定义了两个覆盖部分 MAC 标头的 CDF。每个 CDF 都作为单独的测试数据包发送。对于数据流中定义的测试数据包,偏移和协议报头是通用的。如果需要在每个测试数据包中显示数据包头,偏移量必须至少设置为数据包头部分的长度。如果需要对偏移和协议标头进行不同的定义,则必须在单独的数据流中定义 CDF。

信雅纳CDF自定义数据段内容
图 2:使用两个 CDF 覆盖部分 MAC 标头的数据流定义
测试数据包的总长度在数据流属性面板的 "数据包内容 "部分定义(见图 5)。
- 如果测试数据包的总长度大于偏移 + CDF 块 + PTLD + FCS 的大小,则会在 CDF 块和 TPLD 之间添加填充 - 图 2 显示了两个测试数据包,其中在实际 CDF 之后和 CDF 块之后都添加了填充。
- 如果测试数据包的总长度短于偏移 + CDF 块 + PTLD + FCS 的大小,则会从 CDF 块的末端(即填充可能所在的位置)切下 CDF 块,使其与测试数据包相匹配。
- 如果 CDF 数据偏移设置在协议标头段结束后的位置,则在协议标头和 CDF 之间添加填充(见图 3)。

信雅纳NPU芯片测试
图 3:带有一个 CDF 的测试数据包,从协议标头(此处为 MAC 标头)后 10 个字节开始

启用 CDF 功能


在父端口属性面板(见图 4)的 "Custom Data Field "字段中选择 "Payload mode",即可启用 CDF 功能。这将启用该端口上所有数据流的功能。

图 4:有效负载模式字段


定义数据包总大小和填充


在数据流属性面板的数据包内容部分,可以定义与 CDF 相关的几个参数:
- 数据包大小类型
- 指定数据流中测试数据包总长度的信息
- 有效载荷类型(Payload Type),定义测试数据包中 CDF 块前后和内部可能使用的填充。

图 5:所选有效载荷类型将用作填充

配置 CDF


如图 6 所示,在数据流的父端口上启用 CDF 功能后,数据流属性页面中将启用新的自定义数据字段部分。


图 6:CDF 配置
单击添加另一个 CDF。添加新的 CDF 时,需要定义其长度。以后可以通过点击 。
数据流中 CDF 的偏移量(即数据包的起点)在 "字段偏移量 "字段中设置。
在 "字段数据值 "中输入所需的 CDF 内容。


禁用 FCS


在数据流属性面板的 "错误处理 "部分取消选中 "插入帧校验和(FCS)"复选框,就可以从测试数据包中省略帧校验序列(FCS)。

图 7:数据流属性面板的 "错误处理 "部分


禁用 TPLD


在标准 Xena 测试数据包的末尾,默认添加了一个特殊的专有数据区,称为仪表追踪标签数据(TPLD)(见图 2、图 3 和图 12)。TPLD 包含数据包的各种信息,允许 Xena 测试仪检测数据包丢失或排序错误等异常情况,并测量以太网链路上的延迟和数据包抖动。启用 CDF 功能后,您可能需要从传输流中的测试数据包中移除 TPLD,以便完全控制数据包的内容。

创建数据流时,将为该数据流分配一个数据流编号和一个测试有效载荷 ID (TID),用于标识 TPLD。如果如图 8 所示移除测试有效载荷 ID,则 TPLD 将被省略。

图 8:数据流属性面板的标识部分
自由编程测试数据包的六个步骤
总结:要启用可自由编程的测试数据包,即用户可以在支持 CDF 的 测试板卡模块上定义数据包的所有字节,必须执行以下步骤:
1. 激活测试端口上的 CDF 功能(见图 4)
2. 设置数据包大小,使其与所需测试数据包的长度完全匹配(见图 5) 3.
3. 将偏移设置为 0(见图 6)
4. 将所需内容输入 CDF(见图 6) 5.
5. 禁用 FCS(见图 7)
6. 禁用 TPLD(见图 8)
如果需要不同大小的 CDF 且不想添加填充,则必须为每种 CDF 大小定义一个新的数据流。


数据包顺序


默认情况下,数据流被独立处理,并合并为端口的综合流量模式,同时考虑为每个数据流定义的传输配置文件(见图 10,正常端口 TX 模式)。


图 9:数据流属性面板的识别部分
如果将父端口属性面板中的端口 TX 模式设置为顺序(图 9),则可以顺序发送测试数据包: 每个数据流依次发送一个或多个数据包,然后以循环模式继续发送到下一个数据流。数据流的数据包数量输入该数据流传输配置文件中的 Seq.Packets 字段(见图 10,顺序 TX 模式)。单个数据流的传输速率将被忽略;总体传输速率由传输配置文件部分的端口级别决定(图 9)。考虑到数据包长度和数量,这反过来又决定了每个数据流的速率。一个周期内的最大数据包数(即所有启用数据流的 Seq.Packets 之和)为 500。

正常端口传输模式(默认) 顺序传输模式

以下解释的是端口的调度模式与流的调度模式


图 10:数据流传输配置文件定义
- 如果 Seq.Packets 字段中的数字与数据流中的 CDF 数量一致,则先发送该数据流中的所有 CDF,然后再发送下一个数据流中的 CDF。
- 如果 Seq.Packets 数量高于数据流中的 CDF 数量,则重复发送该数据流中的 CDF,直到达到 Seq.Packets 数量;然后发送下一个数据流中的 CDF。
- 如果 Seq.Packets 数量少于数据流中的 CDF 数量,则在可以发送数据流中的 CDF 时,按数据流中定义的顺序发送该数量的 CDF。
图 11 展示了 Seq.Packets 的不同设置对流量模式的影响。在所有示例中,为数据流 1 定义了两个 CDF,而为数据流 0、2 和 3 定义了一个 CDF。

图 11:不同 Seq.Packets 设置下的顺序测试数据包流量示例
CDF 规格
CDF 功能可用的总面积取决于测试模块类型和端口配置。
每个 100G 端口的基本 CDF 规格:
- 最大 CDF 数量: 4096
- 最大 CDF 大小: 端口的 MTU。
- 最大 CDF 偏移量 = 2032
- 最大 CDF 内存:262144 字节(256 k字节)
端口的 MTU 可以在端口属性面板的端口功能部分找到,即 "最大数据包长度"(请注意,不同数据速率的端口可能有不同的 MTU):


图 13:最大数据包长度(字节)是端口的 MTU(本例中为 12288 字节)
未来版本的 M1QSFP28SFP28 测试模块在 100G 时将支持以下功能:
- 最大 CDF 数量: 14336
- 最大 CDF 大小: 端口的 MTU。
- 最大 CDF 偏移量 = 2032
- 最大 CDF 内存:917504 字节(892 千字节)
当模块以较低的端口速度运行时,各端口共享上述 CDF 内存和每个端口的最大 CDF 数量,具体如下:
每个端口的 CDF 内存:
- 40G/50G 端口: 最大 100G CDF 内存/2
- 25G 端口: 最大 100G CDF 内存 / 4
- 10G 端口: 最大 100G CDF 内存 / 8
每个端口的最大 CDF 数量:
- 40G/50G 端口: 最大 100G CDF 数量 / 2
- 25G 端口: 最大 100G CDF 数量 / 4
- 10G 端口: 最大 100G CDF 数量 / 8

CDF 内存分配


单个数据流使用的 CDF 内存量分三步计算:
1. 计算 CDF 大小
CDF 的大小由其包含的数据字节数及其在数据包中的偏移量组合而成。计算公式如下
CDF 大小 = datasize(字节数)+ (offsetbytes_value modulo 8)。
例如,偏移量为 3、数据大小为 234 字节的 CDF,其 CDF 大小为 237 字节;如果偏移量为 11,则 CDF 大小也为 237 字节(11 取 8 为 3)。
2. 计算 CDF 块内存大小
每个数据流的 CDF 内存被分割成若干块,每个块包含一个 CDF。CDF 块的大小对于数据流中的所有 CDF 都是相同的,长度为 2n 字节,尺寸为适合最大 CDF 的大小(见步骤 1)。
(见步骤 1)。数据块大小的范围从 64 字节到端口的 MTU。
举个例子: 如果为数据流定义的最大 CDF 条目为 237 字节,则数据块大小为 256 字节。因此,该数据流的所有 CDF 都将使用 256 字节内存,而不考虑它们各自的大小。
3. 计算单个数据流的 CDF 内存使用量
根据上述两个步骤,计算单个数据流的 CDF 内存使用量的公式为
数据流 CDF 内存使用量 = CDF_memory_block_size *_of_CDFs 数量 
因此,如果上述示例中描述的数据流有 500 个 CDF,则该数据流使用的 CDF 内存总量为:256 字节 * 500 = 128000 字节。


信雅纳:Extended Payload/扩展有效载荷


扩展有效载荷功能是 Xena Networks 高速测试模块的另一项功能。扩展有效载荷允许用户定义很长的有效载荷。扩展有效载荷将占据测试数据包中紧随协议头部分之后的整个有效载荷字段。
启用扩展有效载荷功能
在父端口面板的 "有效载荷模式 "字段中选择 "扩展有效载荷",即可启用扩展有效载荷功能(见图 4)。这将启用该端口上所有数据流的功能。


配置扩展有效负载


启用扩展有效载荷后,就可以在 "扩展有效载荷大小 "字段中为图 14 所示的数据流设置所需的数据包内容区域大小。但请注意,测试数据包的总大小(也在图 14 中定义)必须小于为数据流定义的协议头大小 + 扩展有效载荷 + TPLD + FCS。
- 如果数据包总大小小于此值,扩展有效载荷将被剪切以适应测试数据包。
- 如果数据包较长,将在扩展有效载荷和 TPLD 之间插入衬垫

图 14:设置扩展有效载荷大小


图 15:流协议标头编辑器
如图 15 所示,设置好大小后,流协议标头编辑器中就会出现相应的数据区。用户可以在数据区填入所需的内容。
与 CDF 一样,扩展有效载荷也被填入一个长度为 2n 字节的数据块中。块的大小从 64 字节到端口的 MTU 不等;扩展有效载荷适合的最小大小被使用。扩展有效载荷未使用的数据块中的字节会像 CDF 数据块一样被填充。


图 16 展示了一个测试数据包,在 166 字节的测试数据包中包含 120 字节的扩展有效载荷。对于图 16 中的测试数据包,这意味着扩展有效载荷和扩展有效载荷占用的内存块中剩余的 8 个字节有足够的空间。
图 16:带有 120 字节扩展有效载荷的测试数据包

禁用 FCS 和 TPLD


如图 7 和图 8 所示,对于 CDF,可在带有扩展有效载荷的测试数据包中省略 FCS 和 TPLD。
 

扩展有效载荷内存分配

扩展有效载荷功能是 CDF 功能的一种特殊应用,其偏移量与测试包中的标头相匹配。因此,有关 CDF 规范和 CDF 内存分配的章节也适用于扩展有效载荷功能。


修改器/Modifers/字段跳变

可以在扩展有效载荷区域设置修改器,就像在普通协议字段中设置修改器一样。
修改器不能在 CDF 上设置,因为该功能本身可被视为具有与修改器选项相同的某些特性,但规模要大得多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1535415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字孪生与智慧城市:重塑城市生活的新模式

随着信息技术的迅猛发展,数字孪生作为一种新兴的技术理念,正在逐渐改变城市建设和管理的传统模式。智慧城市作为数字孪生技术应用的重要领域,正在以其独特的优势和潜力,重塑着城市生活的方方面面。本文将从数字孪生的概念、智慧城…

工控机在机器人领域的应用丨工业一体机的应用

随着机器人技术的不断发展,机器人在制造、物流等领域得到了广泛应用。而工业控制计算机(工控机)作为机器人控制系统的核心设备,也在机器人领域发挥着越来越重要的作用。 机器人控制系统是机器人的核心部分,控制系统的…

【文末附gpt升级4.0方案】FastGPT详解

FastGPT知识库结构讲解 FastGPT是一个基于GPT模型的知识库,它的结构可以分为以下几个部分: 1. 数据收集:FastGPT的知识库是通过从互联网上收集大量的文本数据来构建的。这些数据可以包括维基百科、新闻文章、论坛帖子等各种类型的文本。 2…

QT的学习

代码练习 做一个UI登录页面 源文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("洛克启动!");this->…

MYSQL索引、事务、存储引擎(一)

目录 一、索引 1、索引的概念 2、索引的作用 3、索引的副作用 4、创建索引的原则依据 二、索引的分类 1、普通索引 1.直接创建索引 2.修改方式创建索引 3.创建表的时候指定索引 2、唯一索引 1.直接创建唯一索引 2.修改表方式创建索引 3.创建表的时候指定索引 3、…

嵌入式驱动学习第四周——设备树

前言 掌握设备树是 Linux 驱动开发人员必备的技能!因为在新版本的 Linux 中,ARM 相关的驱动全部采用了设备树。本篇博客重点介绍一下设备树与设备树语法。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本…

Leetcode热题100:图论

Leetcode 200. 岛屿数量 深度优先搜索法: 对于这道题来说,是一个非常经典的图的问题,我们可以先从宏观上面来看问题,也就是说在不想具体算法的前提下,简单的说出如何找到所有的岛屿呢? 如图中所示&#x…

C#探索之路基础篇(1):编程中面向过程、数据、对象的概念辨析

文章目录 C#探索之路基础篇(1):编程中面向过程、数据、对象的概念辨析1 面向过程编程1.1 概念1.2 示例代码:1.3 使用范围与时机:1.4 注意事项:1.5 通俗讲法 2 面向对象编程2.1 概念2.2 示例代码2.3 使用范围2.4 注意事项2.5 通俗讲…

将数据转换成xml格式的文档并下载

现在有一个实体类对象的集合&#xff0c;需要将它们转换为xml文档&#xff0c;xml文档就是标签集合的嵌套&#xff0c;例如一个学生类&#xff0c;有姓名、年龄等&#xff0c;需要转换成一下效果&#xff1a; <student><age>14</age><name>张三</na…

十、C#基数排序算法

简介 基数排序是一种非比较性排序算法&#xff0c;它通过将待排序的数据拆分成多个数字位进行排序。 实现原理 首先找出待排序数组中的最大值&#xff0c;并确定排序的位数。 从最低位&#xff08;个位&#xff09;开始&#xff0c;按照个位数的大小进行桶排序&#xff0c;将…

STL —— string(1)

目录 1. 模板 1.1 泛型编程 1.2 函数模板 1.2.1 函数模板概念 1.2.2 函数模板格式 1.2.3 函数模板的原理 1.2.4 显式实例化 1.2.5 模板参数的匹配原则 1.3 类模板 1.3.1 类模板定义格式 1.3.2 类模板的实例化 2. STL —— string类 2.1 STL 简介 2.2 标准库中的s…

地理信息数据处理-线面数据转化和数据合并(二)

需求 1.数据为LineString&#xff0c;需要转化为Polygon 2.数据为多个分散的线、面数据&#xff0c;需要转化为一条Multi类型数据 解决方案使用&#xff0c;arcgis转化工具。 需求1&#xff1a;线-面数据转化 1.在arcgis中选中对应图层&#xff0c; 然后在“数据管理工具-要…

pcl采样:随机采样

pcl 随机采样,实际上就是抽稀 头文件 代码 结果

阿里云2024最新优惠:WoSign SSL证书首购4折

阿里云SSL证书 2024 最新优惠来啦&#xff01;阿里云SSL证书新用户&#xff0c;wosign SSL证书低至4折&#xff0c;WoSign SSL提供全球信任RSA SSL证书和国密算法SM2 SSL证书&#xff01;阿里云官网官方优惠&#xff0c;需要开年采购SSL证书的用户抓紧申请这波优惠&#xff01;…

mybatis-flex入门体验(一)

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 趁着下午的空闲时间&#xff0c;研究了一下mybatis-flex&#xff0c;看着对我还…

【php基础】输出、变量、布尔类型、字符串

php基础补充 1. 输出2.和"的区别3.变量3.1变量的命名规则3.2 两个对象指向同一个值3.3 可变变量 4.变量的作用域5. 检测变量6. 布尔类型7.字符串定义与转义8.字符串常用函数9.常量 1. 输出 echo: 输出 print: 输出&#xff0c;输出成功返回1 print_r(): 输出数组 var_dum…

HarmonyOS入门学习

HarmonyOS入门学习 前言快速入门ArkTS组件基础组件Image组件Text组件TextInput 文本输入框Buttonslider 滑动组件 页面布局循环控制ForEach循环创建组件 List自定义组件创建自定义组件Builder 自定义函数 状态管理Prop和LinkProvide和ConsumeObjectLink和Observed ArkUI页面路由…

【网络安全】CobaltStrike 使用

本文章仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若读者因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与作者无关。 Cobalt Strike是一款渗透测试神器&#xff0c;Cobalt Strike已经不再使用MSF而是作为单独的平台使…

如何避免OKR成为形式主义,真正发挥其作用?

OKR&#xff08;Objectives and Key Results&#xff09;作为一种目标管理方法&#xff0c;旨在通过设定明确的目标和可衡量的关键成果&#xff0c;帮助企业实现高效、精准的管理。然而&#xff0c;在实际应用中&#xff0c;许多企业却陷入了形式主义的泥潭&#xff0c;使OKR失…

1.什么是exchange的自签名证书?安装exchange后,默认生成的证书介绍?如何查看exchange的证书情况?命令是?

目录 1.exchange的自签名证介绍 2.如何查看exchange的证书&#xff1f; 3.默认生成证书介绍 第一张&#xff1a;Microsoft Exchange 第二张&#xff1a;Microsoft Exchange Server Auth Certificate 第三张&#xff1a;WMSVC 总结&#xff1a; 1.exchange的自签名证介绍…