SwiftMRP 是 802.1Q SRP 协议套件(MMRP、MVRP 和 MSRP)的实现。它们在 AVB/TSN 网络中用于协调以太网桥之间的流预留。
SwiftMRP 的独特之处与其说是用 Swift 编写(虽然这确实促进了其快速开发),不如说在于它被设计为支持桥接,并且使用标准的 Linux 内核接口来实现这一点。作者能够找到的其他开源 SRP 实现通常仅支持终端站,或使用专有的内核接口。
libnl-3
的 Swift 结构化并发包装器(现在已拆分为一个独立的软件包)MMRP、MVRP 和 MSRP 是通用 MRP 协议和状态机的“应用”。应用负责响应 MRP 注册(例如,通过添加 FDB 条目)以及将 MRP 声明传播到其他网桥端口。
请注意,虽然 SwiftMRP 确实有一个平台抽象层,但初始平台是 Linux,并且我们更倾向于将交换机特定功能推送到内核中,而不是单独的平台后端。
注意:由于 Linux 具有内核 MVRP 申请者,因此 mrpd
不会自动通告静态配置的 VLAN。如果您希望这样做,则应创建 VLAN 接口,并使用 ip link set dev
将 mvrp
标志设置为 on
。(如果您希望发送 AVTP 数据包,您还应该阅读此关于配置 egress-qos-map
的文档。但请记住,在撰写本文时,SwiftMRP 终端站支持尚不完整。)
运行 mrpd
守护进程之前的配置留给管理员进行,可以使用标准的 Linux 工具(如 bridge
和 tc
)执行。顶层目录中的 config-srp.sh
脚本是一个很好的起点,但基本上假设如下
mrpd
在 MMRP/MVRP 数据包被桥接之前拦截它们(见下文注释)mqprio
qdisc。请注意,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_NP
和 GET_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
。
当前的测试环境包括
ts2phc
和 ptp4l
(不再进行测试)ptp4l
我们正在测试的端点包括
我们正在间接测试的网桥
如有更多信息,请联系我 (lukeh at
lukktone dot
com)。