Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

gNOI 诊断 (Diag) 服务

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

概述

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

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

您必须在链路的两侧运行 gNOI BERT,以便设备可以比较结果。您测试的链路在 BERT 期间会关闭,BERT 结束后会重新连接。但是,如果运行 BERT 的一个设备重新启动,则链路将继续关闭,除非您在其他设备上停止 BERT。

您可以从几个预先确定的类型中选择测试模式。BERT 或 PRBS 测试模式以 PRBSx 的形式命名,其中 x 是一个数字。Junos 设备支持以下 GNOIBERT 测试模式:

  • 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 的所有请求结果,请将 result_from_all_ports 消息中的 GetBERTResultRequest 字段设置为 True

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

  • 链路质量很差。
  • 其中一台设备在 BERT 期间脱机。
  • BERT 仅在一台设备上运行。
  • BERT 不会同时在两台设备上启动和停止。

为了避免出现上一个错误,我们建议同时将 StartBERT() RPC 发送至两台设备。如果在一台设备上先启动 BERT,则第一个设备直到另一台设备上的 BERT 启动才会收到响应。第一个设备将缺乏响应记录为不匹配的比特。第一个设备会继续报告错误,直到第二个设备启动 BERT。如果无法同时启动 BERT,我们建议在 GetBERTResult() 上次启动 BERT 的设备上运行 RPC。由于第一个设备已经在运行 BERT,因此第二个设备不应报告任何误报位。

支持的 RPC

表 1:支持的 diag.proto RPC
版本中引入的 RPC 说明
StartBERT()

在一组端口上启动 BERT。Junos 设备支持以下 PRBS 模式用于 GNOIBERT:

  • PRBS7
  • PRBS9
  • PRBS15
  • PRBS23
  • PRBS31

Junos OS Evolved 22.2R1

StopBert()

在一组端口上阻止已经正在进行的 BERT。

Junos OS Evolved 22.2R1

GetBERTResult()

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

Junos OS Evolved 22.2R1

网络设备配置

  • 按照配置 gRPC 服务中的说明,在网络设备上 配置 gRPC 服务
  • 按照配置 gNOI 服务中的说明,配置网络管理系统以支持 gNOI 操作
  • 对于要运行 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 Topology During the BERT 期间的网络拓扑

BERT 在设置的时间到期后结束。然后,客户端使用 GetBERTResult() RPC 第二次执行应用程序,以便从服务器获取 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,请设置为messageStartBERTRequest并设置为 input_file input_bert_start.json 文件路径。对于每台设备,输入文件应指定在该设备上测试的接口。状态BERT_STATUS_OK表示 BERT 启动成功。

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

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

    BERT 成功完成,并显示链路质量良好。