SwiftMRP

SwiftMRP 是 802.1Q SRP 协议套件(MMRP、MVRP 和 MSRP)的实现。它们在 AVB/TSN 网络中用于协调以太网桥之间的流预留。

SwiftMRP 的独特之处与其说是用 Swift 编写(虽然这确实促进了其快速开发),不如说在于它被设计为支持桥接,并且使用标准的 Linux 内核接口来实现这一点。作者能够找到的其他开源 SRP 实现通常仅支持终端站,或使用专有的内核接口。

架构

MMRP、MVRP 和 MSRP 是通用 MRP 协议和状态机的“应用”。应用负责响应 MRP 注册(例如,通过添加 FDB 条目)以及将 MRP 声明传播到其他网桥端口。

请注意,虽然 SwiftMRP 确实有一个平台抽象层,但初始平台是 Linux,并且我们更倾向于将交换机特定功能推送到内核中,而不是单独的平台后端。

注意:由于 Linux 具有内核 MVRP 申请者,因此 mrpd 不会自动通告静态配置的 VLAN。如果您希望这样做,则应创建 VLAN 接口,并使用 ip link set devmvrp 标志设置为 on。(如果您希望发送 AVTP 数据包,您还应该阅读关于配置 egress-qos-map 的文档。但请记住,在撰写本文时,SwiftMRP 终端站支持尚不完整。)

配置

运行 mrpd 守护进程之前的配置留给管理员进行,可以使用标准的 Linux 工具(如 bridgetc)执行。顶层目录中的 config-srp.sh 脚本是一个很好的起点,但基本上假设如下

请注意,mrpd 将根据流预留动态调整基于信用的整形器 (CBS) 参数(如果没有预留,cbs qdisc 将被替换为默认的 pfifo_fast qdisc)。

以下命令确保发往客户网桥 MRP 组地址的数据包不会被转发

nft add rule bridge nat PREROUTING meta ibrname ${BR} ether daddr 01:80:c2:00:00:21 log group 10 drop

(使用 nflog 捕获和丢弃 MVRP 数据包的灵感来自 Michael Braun 的 mvrpd。)

请注意,如果您使用与默认值 (10) 不同的组号,则需要使用 --nf-group 作为选项传递给 mrpd。同样,如果您希望使用 0x9000 以外的父 qdisc 句柄,您也需要使用 --q-disc-handle 作为选项传递给 mrpd

SRP 累积延迟的准确报告需要一个本地 PTP 实例,该实例可以通过 PTP 管理接口报告平均链路延迟。目前仅支持 LinuxPTP,尽管任何支持通过域套接字进行 PMC 以及 LinuxPTP GET_PORT_DATA_SET_NPGET_PORT_PROPERTIES_NP 扩展的 PTP 服务器都应该可以工作。

mrpd 有各种参数,可以使用 --help 选项列出。

运行

mrpd 守护进程的命令行用法如下

USAGE: mrpd [<options>] --bridge-interface <bridge-interface>

OPTIONS:
  -b, --bridge-interface <bridge-interface>
                          Master bridge interface name
  -n, --nf-group <nf-group>
                          NetFilter group (default: 10)
  -q, --q-disc-handle <q-disc-handle>
                          QDisc handle (default: 36864)
  --force-avb-capable     Force ports to advertise as AVB capable
  --enable-talker-pruning Enable MSRP talker pruning
  --max-fan-in-ports <max-fan-in-ports>
                          Maximum number of MSRP fan-in ports (default: 0)
  --class-a-qdisc-handle <class-a-qdisc-handle>
                          MSRP SR class A Qdisc handle (queue) (default: 4)
  --class-b-qdisc-handle <class-b-qdisc-handle>
                          MSRP SR class B Qdsisc handle (queue) (default: 3)
  --class-a-delta-bandwidth <class-a-delta-bandwidth>
                          MSRP SR class A delta bandwidth percentage
  --class-b-delta-bandwidth <class-b-delta-bandwidth>
                          MSRP SR class B delta bandwidth percentage
  --sr-p-vid <sr-p-vid>   Default MSRP SR PVID (default: 2)
  --exclude-iface <exclude-iface>
                          Exclude physical interface (may be specified multiple times)
  --exclude-vlan <exclude-vlan>
                          Exclude VLAN From MVRP (may be specified multiple times)
  -l, --log-level <log-level>
                          Log level (values: trace, debug, info, notice, warning, error, critical; default: info)
  --enable-mmrp           Enable MMRP
  --enable-mvrp           Enable MVRP
  --enable-msrp           Enable MSRP
  --pmc-uds-path <pmc-uds-path>
                          PTP management client domain socket path
  -h, --help              Show help information.

典型的调用如下所示

mrpd -b br0 --enable-mmrp --enable-mvrp --enable-msrp -l debug

请注意,trace 日志级别将记录大量消息。 --enable-srp 是一个(隐藏的)同义词,它将启用 MMRP、MVRP 和 MSRP。

较高的队列号具有较高的调度优先级,但是这在使用 Intel i210 驱动程序时会被破坏。使用推荐的配置,当使用此网卡时,您需要传递 --class-a-qdisc-handle 1 --class-b-qdisc-handle 2

测试

当前的测试环境包括

我们正在测试的端点包括

我们正在间接测试的网桥

如有更多信息,请联系我 (lukeh at lukktone dot com)。