This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSICE3359:交换机模式下的 cpsw 在电缆交换之后不会双向转发数据包

Guru**** 2487425 points
Other Parts Discussed in Thread: TMDSICE3359

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1432834/tmdsice3359-cpsw-in-switch-mode-does-not-forward-packets-in-both-directions-after-cable-swap

器件型号:TMDSICE3359

工具与软件:

我们正在使用  ti-processor-sdk-linux-rt-am335x-evm-09.01.00.001-Linux-x86-Install.bin 中提供的最近订购的运行 Linux 的 TMDSICE3359、未进行任何修改。

我们的目标是测试 cpsw 的开关功能、这是我们应用所需的。 我们的测试设置如下所示:

Host 1 <-> eth0 of TMDSICE3359 , eth1 of TMDSICE3359  <-> Host 2 

主机1连接到 TMDSICE3359的以太网0端口 、主机2连接到 TMDSICE3359的以太网1端口。

cpsw 配置为交换机模式、并使用内核文档(https://docs.kernel.org/networking/device_drivers/ethernet/ti/cpsw_switchdev.html)中的以下命令创建网桥。

devlink dev param set platform/4a100000.switch name switch_mode value 1 cmode runtime
ip link add name br0 type bridge
ip link set dev eth0 master br0
ip link set dev eth1 master br0
ip link set eth0 down;ip link set eth1 down
ip link set eth0 up;ip link set eth1 up
ip link set br0 up

To generate test traffic we constantly ping Host 2 from Host 1 and Host 1 from Host 2. Everything works as expected.

Then we physically swap the cables at the ports of TMDSICE3359. Now, Host 1 is connected with Ethernet 1 port of TMDSICE3359 and Host 2 is connected with Ethernet 0 port of TMDSICE3359.

The setup looks like this:

Host 2 <-> eth0 of TMDSICE3359 , eth1 of TMDSICE3359  <-> Host 1

After the cable swapping the requests from each host reach the other host, but the replies are not forwarded back.

Communication works as expected only if both ports are forced down and up by:

ip link set eth0 down;ip link set eth1 down
ip link set eth0 up;ip link set eth1 up

Why is this necessary? We would expect that the communication recovers without any additional interaction.

Thank you for your help and best regards

Panagiotis

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我会和开发团队一起探讨。 拔下电缆应该是链路断开事件、而插回电缆应该是如您所述的链路接通事件。 是否在交换电缆后执行桥接设置?  

    另外出于好奇心、您能否描述此测试案例背后的原因?

    此致、

    Schuyler  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Schuyler:

    感谢您的答复。

    我将在交换电缆之前执行桥接设置、完全按照上述顺序进行。

    拔下电缆并插回电缆当然是链路断开和链路接通事件、但显然这与使用 ip link 命令强制链路断开和接通并不相同。

    以下是交换电缆时的内核消息:

    [  250.166198] cpsw-switch 4a100000.switch eth0: Link is Down
    [  250.195145] br0: port 1(eth0) entered disabled state
    [  253.286238] cpsw-switch 4a100000.switch eth1: Link is Down
    [  253.315141] br0: port 2(eth1) entered disabled state
    [  258.486269] cpsw-switch 4a100000.switch eth0: Link is Up - 100Mbps/Full - flow control off
    [  258.486416] br0: port 1(eth0) entered blocking state
    [  258.486440] br0: port 1(eth0) entered forwarding state
    [  260.566274] cpsw-switch 4a100000.switch eth1: Link is Up - 100Mbps/Full - flow control off
    [  260.566415] br0: port 2(eth1) entered blocking state
    [  260.566437] br0: port 2(eth1) entered forwarding state

    以下是使用 ip link 命令强制断开和启动链路时的内核消息:

    root@am335x-evm:~# ip link set eth0 down;ip link set eth1 down
    [  347.395362] cpsw-switch 4a100000.switch eth0: Link is Down
    [  347.445311] br0: port 1(eth0) entered disabled state
    [  347.495317] cpsw-switch 4a100000.switch eth1: Link is Down
    [  347.545086] br0: port 2(eth1) entered disabled state
    root@am335x-evm:~# ip link set eth0 up;ip link set eth1 up
    [  362.105337] cpsw-switch 4a100000.switch: starting ndev. mode: switch
    [  362.114348] Generic PHY 4a101000.mdio:01: attached PHY driver (mii_bus:phy_addr=4a101000.mdio:01, irq=POLL)
    [  362.162995] cpsw-switch 4a100000.switch: starting ndev. mode: switch
    [  362.195857] Generic PHY 4a101000.mdio:03: attached PHY driver (mii_bus:phy_addr=4a101000.mdio:03, irq=POLL)
    [  364.165708] cpsw-switch 4a100000.switch eth0: Link is Up - 100Mbps/Full - flow control off
    [  364.165778] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    [  364.167589] br0: port 1(eth0) entered blocking state
    [  364.167619] br0: port 1(eth0) entered forwarding state
    [  364.246327] cpsw-switch 4a100000.switch eth1: Link is Up - 100Mbps/Full - flow control off
    [  364.246404] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
    [  364.247526] br0: port 2(eth1) entered blocking state
    [  364.247551] br0: port 2(eth1) entered forwarding state
    在第二种情况下、cpsw 驱动程序会在第一次未启动时重新启动网络设备。 您能解释一下上述区别吗? 这可能是问题的根本原因。
    我们的应用要求该器件作为三端口开关运行、以便能够在网络中以菊花链形式连接多个节点。 即使拓扑和电缆链路发生变化、节点也应该能够相互通信。
    我对五个不同的开关设备执行了上述测试用例、所有这些设备都在两个方向转发数据包、并且电缆交换后通信恢复。 这是我期望开关工作的方式。
    此致、
    Panagiotis
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Panagiotis:

    感谢您提供更多信息。 我需要花几天时间与开发团队进行讨论。 我将在一周结束前作出答复。

    此致、

    Schuyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Panagiotis:

    我还在努力就您的问题获得开发团队的帮助。 我将在下周中旬之前再次发布到这一主题。

    此致、

    Schuyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Schuyler:

    您是否有关于此主题的最新信息?

    此致

    Panagiotis