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 過濾器可用於重定向埠上接收到的所有流量。

根據流操作,支援以下操作

  • 丟棄

  • mirred 出口重定向

  • 陷阱

每個 ACL 條目(過濾器)只能設定一個列出的操作。

示例 1:將 eth4 上接收到的 SA 為 00:01:02:03:04:05 的幀傳送到 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:丟棄 eth4 上接收到的 VID 為 100 且 PCP 為 3 的幀

$ 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