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