Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

gNOI 诊断(诊断)服务

使用 gNOI 诊断 (Diag) 服务测试两台设备之间链路的可靠性。

概述

使用 Diag 服务 RPC 对一对连接的端口执行误码率测试 (BERT)。 Diag 服务原型定义文件位于 https://github.com/openconfig/gnoi/blob/master/diag/diag.proto

BERT 也称为伪随机二进制序列 (PRBS) 测试,用于测试链路的可靠性。 StartBERT() gNOI RPC 在一对连接的物理接口上启动双向 BERT。设备在链路上交换一组 1 和 0 的模式。设备将接收到的消息与发送的消息进行比较,并计算错误数。错误数量越少,链路质量越高。

您必须在链路的两端运行 gNOI BERT,以便设备可以比较结果。您正在测试的链路在 BERT 期间关闭,并在 BERT 结束后恢复。但是,如果运行 BERT 的其中一台设备重新启动,则链路将保持关闭状态,除非您在另一台设备上停止 BERT。

您可以从几种预定类型中选择测试模式。BERT 或 PRBS 测试模式的标题为 PRBSx 形式,其中 x 是一个数字。Junos 设备支持以下 gNOI BERT 测试模式:

  • PRBS7
  • PRBS9
  • PRBS15
  • PRBS23
  • PRBS31

您必须为每个 gNOI BERT 指定一个唯一的操作 ID。启动 BERT、停止 BERT 和获取 BERT 结果的 RPC 由 BERT 操作 ID 链接。运行新的 BERT 时,必须将操作 ID 更改为新字符串。由于 RPC 通过其操作 ID 来标识每个 BERT,因此您可以使用相同的 ID 在不同的接口上运行多个 BERT。

设备将保留最近 5 个 BERT 操作的结果。但是,保存的 BERT 结果不是持久性的。如果系统重新启动,它们将丢失。

要查看特定已保存的 BERT 操作的结果,请发送GetBERTResultRequest所需 BERT 操作 ID 的消息,并将该result_from_all_ports字段False设置为 。要查看不同 ID 的所有请求结果,请将消息True中的GetBERTResultRequest字段设置为 result_from_all_ports

在设备上运行 GetBERTResult() RPC 时,RPC 会显示特定设备在 BERT 期间检测到的不匹配位数。由于 RPC 未配置通过或失败条件,因此由用户评估结果。由于多种原因,您可能会看到大量错误,包括:

  • 链路质量较差。
  • 在 BERT 期间,其中一台设备脱机了。
  • BERT 只能在一台设备上运行。
  • BERT 未在两台设备上同时启动和停止。

为避免最后一个错误,建议同时将 RPC 发送 StartBERT() 到两台设备。如果先在一台设备上启动 BERT,则在另一台设备上启动 BERT 之前,第一台设备不会收到响应。第一个设备将响应不足记录为不匹配位。第一台设备将继续报告错误,直到第二台设备上启动 BERT。如果无法同时启动 BERT,建议在最后启动 BERT 的设备上运行 GetBERTResult() RPC。由于 BERT 已经在第一个设备上运行,因此第二个设备不应报告任何错误的缺失位。

支持的 RPC

表 1:支持的 diag.proto RPC
RPC 描述 在版本中引入
StartBERT()

在一组端口上启动 BERT。Junos 设备可针对 gNOI BERT 使用以下 PRBS 模式:

  • PRBS7
  • PRBS9
  • PRBS15
  • PRBS23
  • PRBS31

Junos OS 演化版 22.2R1

StopBert()

在一组端口上停止正在进行的 BERT。

Junos OS 演化版 22.2R1

GetBERTResult()

在 BERT 期间或完成后获取 BERT 结果。

Junos OS 演化版 22.2R1

网络设备配置

开始之前:

  • 对于要运行 BERT 的链路,将服务器和对等接口速度配置为匹配。仅当接口速度匹配时,BERT 才会运行。

示例:运行 BERT

注意:

当某个接口上的 BERT 正在进行时,该接口上的物理链路将关闭。

配置 gNOI 客户端和服务器后,您就可以编写和执行应用程序以运行 BERT。在此示例中,客户端执行 gnoi_bert_client.py Python 应用程序以测试服务器与对等设备之间的链路。 gnoi_bert_client.py 应用程序可以启动 BERT、停止 BERT 或根据参数获取 BERT 结果。

首先,客户端用于 gnoi_bert_client.py 发送 StartBERT() RPC 以在服务器和对等方上启动 BERT。BERT 运行时,服务器和对等方通过 et-1/0/2 和 et-1/0/3 接口之间的链路交换 BERT 测试数据包。

图 1:BERT Network diagram of Bit Error Rate Test setup with Client, Server, and Peer exchanging test packets. 期间的网络拓扑结构

BERT 在设定的时间到期后结束。然后,客户端使用 RPC 再次 GetBERTResult() 执行应用程序,以从服务器获取 BERT 结果。

消息的 StartBERTRequest 参数存储在 input_bert_start.json JSON 文件中。此文件指定 BERT 应使用 PRBS 模式 31 运行 60 秒。消息的 GetBERTResultRequest 参数存储在 input_bert_get.json JSON 文件中。该 result_from_all_ports 字段设置为 False,因此 GetBERTResult() RPC 仅从此端口检索此特定 BERT 的结果。BERT 操作 ID 位于 BERT-operation id 1 两个 JSON 文件中。

应用程序导入grpc_channel模块以建立通道。配置 gNOI 服务中介绍了该grpc_channel模块。此处显示了应用程序文件和 JSON 文件。

gnoi_bert_client.py

input_bert_start.json

input_bert_get.json

执行应用

  1. 从客户端gnoi_bert_client.py运行应用程序以在对等方(未显示)上启动 BERT。然后运行gnoi_bert_client.py应用程序以在服务器上启动 BERT(如下所示)。要启动 BERT,请设置为 message StartBERTRequest 并设置为input_fileinput_bert_start.json文件路径。对于每个设备,输入文件应指定在该设备上测试的接口。状态表示 BERT_STATUS_OK BERT 已成功启动。

  2. (选答)运行 BERT 时,在服务器或对等设备上使用命令 show interfaces 查看正在进行的 BERT 结果。当 BERT 运行时,PRBS 模式为 Enabled。为清楚起见,此示例中的输出已被截短。

  3. BERT 完成后,再次message运行应用程序,gnoi_bert_client.pyGetBERTResultRequestinput_file设置为 input_bert_get.json 文件路径以获取测试结果。在本例中,BERT 在一分钟的测试中发现零错误。

    BERT成功完成,表明链路质量良好。