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