DPAA2 交换机驱动程序¶
- 版权:
© 2021 NXP
DPAA2 交换机驱动程序在数据路径交换机 (DPSW) 对象上探测,该对象可以在以下 DPAA2 SoC 及其变体上实例化:LS2088A 和 LX2160A。
该驱动程序使用交换机设备驱动程序模型,并将每个交换机端口公开为网络接口,该接口可以包含在网桥中或用作独立的接口。端口之间切换的流量被卸载到硬件中。
DPSW 的端口可以连接到 DPNI 或 DPMAC 以进行外部访问。
[ethA] [ethB] [ethC] [ethD] [ethE] [ethF]
: : : : : :
: : : : : :
[dpaa2-eth] [dpaa2-eth] [ dpaa2-switch ]
: : : : : : kernel
=============================================================================
: : : : : : hardware
[DPNI] [DPNI] [============= DPSW =================]
| | | | | |
| ---------- | [DPMAC] [DPMAC]
------------------------------- | |
| |
[PHY] [PHY]
创建以太网交换机¶
dpaa2-switch 驱动程序在 fsl-mc 总线上找到的 DPSW 设备上探测。这些设备可以通过启动时配置文件 - 数据路径布局 (DPL) 静态创建,也可以在运行时使用 DPAA2 对象 API(已合并到 restool 用户空间工具中)创建。
目前,dpaa2-switch 驱动程序对它将探测的 DPSW 对象施加以下限制
FDB 的最小数量应至少等于交换机接口的数量。这是必要的,以便可以进行交换机端口的分离,即当不在网桥下时,每个交换机端口将有自己的 FDB。
fsl_dpaa2_switch dpsw.0: The number of FDBs is lower than the number of ports, cannot probe广播和洪泛配置都应按 FDB 进行。这使驱动程序能够根据共享它的交换机端口(即在同一网桥下)限制每个 FDB 的广播和洪泛域。
fsl_dpaa2_switch dpsw.0: Flooding domain is not per FDB, cannot probe fsl_dpaa2_switch dpsw.0: Broadcast domain is not per FDB, cannot probe交换机的控制接口不应禁用(DPSW_OPT_CTRL_IF_DIS 不作为创建时选项传递)。如果没有控制接口,驱动程序将无法在交换机端口网络设备上提供正确的 Rx/Tx 流量支持。
fsl_dpaa2_switch dpsw.0: Control Interface is disabled, cannot probe
除了实际 DPSW 对象的配置之外,dpaa2-switch 驱动程序还需要以下 DPAA2 对象
1 个 DPMCP - 与 MC 固件交互需要一个管理命令门户对象。
1 个 DPBP - 缓冲区池用于播种控制接口上 Rx 路径的缓冲区。
需要访问至少一个 DPIO 对象(软件门户)才能对控制接口队列执行任何入队/出队操作。DPIO 对象将被共享,无需私有对象。
交换功能¶
该驱动程序支持在硬件中配置 L2 转发规则,用于端口桥接以及独立使用独立的交换机接口。
硬件在 VLAN 感知方面是不可配置的,因此任何 DPAA2 交换机端口都应仅在具有 VLAN 感知网桥的用例中使用
$ ip link add dev br0 type bridge vlan_filtering 1
$ ip link add dev br1 type bridge
$ ip link set dev ethX master br1
Error: fsl_dpaa2_switch: Cannot join a VLAN-unaware bridge
当在网桥创建时使用 stp_state 1
时,支持通过 STP 进行拓扑和环路检测
$ ip link add dev br0 type bridge vlan_filtering 1 stp_state 1
支持 L2 FDB 操作(添加/删除/转储)。
可以通过网桥命令在每个交换机端口上独立配置 HW FDB 学习。当禁用 HW 学习时,将运行快速老化程序,并且将删除任何先前学习的地址。
$ bridge link set dev ethX learning off
$ bridge link set dev ethX learning on
支持限制未知单播和多播洪泛域,但不能彼此独立
$ ip link set dev ethX type bridge_slave flood off mcast_flood off
$ ip link set dev ethX type bridge_slave flood off mcast_flood on
Error: fsl_dpaa2_switch: Cannot configure multicast flooding independently of unicast.
可以通过 brport sysfs 禁用/启用交换机端口上的广播洪泛
$ echo 0 > /sys/bus/fsl-mc/devices/dpsw.Y/net/ethX/brport/broadcast_flood
卸载¶
路由操作(重定向、陷阱、丢弃)¶
DPAA2 交换机能够利用 ACL 表卸载基于流的数据包重定向。通过在多个端口之间共享单个 ACL 表来支持共享过滤器块。
支持以下流键
以太网:dst_mac/src_mac
IPv4:dst_ip/src_ip/ip_proto/tos
VLAN:vlan_id/vlan_prio/vlan_tpid/vlan_dei
L4:dst_port/src_port
此外,matchall 过滤器可用于重定向端口上接收的所有流量。
根据流操作,支持以下操作
丢弃
镜像出口重定向
陷阱
每个 ACL 条目(过滤器)只能设置一个列出的操作。
示例 1:将 SA 为 00:01:02:03:04:05 的 eth4 上接收的帧发送到 CPU
$ tc qdisc add dev eth4 clsact
$ tc filter add dev eth4 ingress flower src_mac 00:01:02:03:04:05 skip_sw action trap
示例 2:丢弃在 VID 为 100 和 PCP 为 3 的 eth4 上接收的帧
$ tc filter add dev eth4 ingress protocol 802.1q flower skip_sw vlan_id 100 vlan_prio 3 action drop
示例 3:将所有在 eth4 上接收的帧重定向到 eth1
$ tc filter add dev eth4 ingress matchall action mirred egress redirect dev eth1
示例 4:在 eth5 和 eth6 上使用单个共享过滤器块
$ tc qdisc add dev eth5 ingress_block 1 clsact
$ tc qdisc add dev eth6 ingress_block 1 clsact
$ tc filter add block 1 ingress flower dst_mac 00:01:02:03:04:04 skip_sw \
action trap
$ tc filter add block 1 ingress protocol ipv4 flower src_ip 192.168.1.1 skip_sw \
action mirred egress redirect dev eth3
镜像¶
DPAA2 交换机仅支持按端口镜像和按 VLAN 镜像。还支持在共享块中添加镜像过滤器。
当将 tc-flower 分类器与 802.1q 协议一起使用时,只会接受“vlan_id”键。将拒绝基于 802.1q 协议中任何其他字段的镜像
$ tc qdisc add dev eth8 ingress_block 1 clsact
$ tc filter add block 1 ingress protocol 802.1q flower skip_sw vlan_prio 3 action mirred egress mirror dev eth6
Error: fsl_dpaa2_switch: Only matching on VLAN ID supported.
We have an error talking to the kernel
如果在端口上请求镜像 VLAN 过滤器,则必须使用“bridge”或通过创建 VLAN 上层设备(如果交换机端口用作独立接口)在相关交换机端口上安装 VLAN
$ tc qdisc add dev eth8 ingress_block 1 clsact
$ tc filter add block 1 ingress protocol 802.1q flower skip_sw vlan_id 200 action mirred egress mirror dev eth6
Error: VLAN must be installed on the switch port.
We have an error talking to the kernel
$ bridge vlan add vid 200 dev eth8
$ tc filter add block 1 ingress protocol 802.1q flower skip_sw vlan_id 200 action mirred egress mirror dev eth6
$ ip link add link eth8 name eth8.200 type vlan id 200
$ tc filter add block 1 ingress protocol 802.1q flower skip_sw vlan_id 200 action mirred egress mirror dev eth6
此外,应注意,镜像的流量将受到与任何其他流量相同的出口限制。这意味着,当镜像的数据包到达镜像端口时,如果数据包中找到的 VLAN 未安装在端口上,则该数据包将被丢弃。
DPAA2 交换机仅支持单个镜像目标,因此可以安装多个镜像规则,但它们的“to”端口必须相同
$ tc filter add block 1 ingress protocol 802.1q flower skip_sw vlan_id 200 action mirred egress mirror dev eth6
$ tc filter add block 1 ingress protocol 802.1q flower skip_sw vlan_id 100 action mirred egress mirror dev eth7
Error: fsl_dpaa2_switch: Multiple mirror ports not supported.
We have an error talking to the kernel