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.

[参考译文] Linux/AM5716:双 EMAC 模式下的 VLAN0问题

Guru**** 2587365 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/627036/linux-am5716-problems-with-vlan0-in-dual-emac-mode

器件型号:AM5716

工具/软件:Linux

你(们)好。

双 Mac 模式下的默认 VLAN 处理有很大问题。 在具有 VLAN ID 0的 CPSW 帧中、似乎未标记。 有人能解释一下为什么? 我需要 VLAN ID 0标签、因为我的传输协议需要它以获得正确的响应。 我没有其他使用 VLAN 功能的用例。

我的端口有一个名为 cpsw_ale_add_vlan 的函数(cpsw_ne_open)、它似乎能够强制特定端口进行标记或取消标记。 这两个选项的优点是、如果我使用标记每个帧的所有端口、则会得到 VLAN 帧部分、这非常令人不愉快。 如果我取消所有标记、无论我的 paket 中是否有 VLAN 帧、都将强制删除该 VLAN 帧。 因此、传出端口中不再有 VLAN 帧。

我对 cpsw 代码以及如何配置数据包的保留、就像使用原始套接字时一样、我还不清楚。 为什么所有 VLAN 标记都将被删除或连接到每个帧?

VLAN_Aware 模式已激活。

希望有人能帮我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我通过变通办法解决了这个问题。 VLAN 感知模式是问题所在,我已停止使用此模式设置主机端口。 但我在源代码中执行了它。 如何设置 ALE_CONTROL 寄存器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉解决了错误:)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TI 文件系统中有一个名为 switch-config 的工具、可用于转储 ALE 的内容。

    这是显示如何访问应用中可用 ALE 的工具源。
    git.ti.com/.../

    理想情况下、您无需修改驱动程序。 能否将 switch-config -d 发布到链接? 您能否解释一下您尝试对应用程序执行什么操作以及为什么需要 VLAN0?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我现在无法获得 Switch-config -d 的故障行为输出、因为我有点忙。 这是 switch-config -d 的当前输出,但我想它是无用的,因为 cpsw.c 中的硬编码修复(避免启动 VLAN 感知模式)。

    CPsw 硬件版本1.15 (0)
    0:类型:vlan,vid = 2,untag_force = 0x5,reg_mcast = 0x5,unreg_mcast = 0x1, Member_list = 0x5
    1:类型:MCAST、vid = 2、addr = ff:ff:ff:ff:ff:ff:ff、mcast_state = f、no super、 PORT_MASK = 0x5
    2:类型:ucast、vid = 2、addr = fc:0f:4b:6e:2d:79、ucast_type =持久性、port_num = 0x0、 安全
    3:类型:vlan,vid = 0,untag_force = 0x7,reg_mcast = 0x0,unreg_mcast = 0x1, Member_list = 0x7
    4:类型:MCAST、vid = 2、addr = 01:00:5e:00:01、mcast_state = f、no super、 PORT_MASK = 0x5
    5:类型:MCAST、vid = 2、addr = 33:33:00:00:01、mcast_state = f、no super、 PORT_MASK = 0x5
    6:类型:vlan,vid = 1,untag_force = 0x3,reg_mcast = 0x3,unreg_mcast = 0x1, Member_list = 0x3
    7:类型:MCAST,vid = 1,addr = ff:ff:ff:ff:ff:ff:ff,mcast_state = f,无超级, PORT_MASK = 0x3
    8:类型:ucast、vid = 1、addr = fc:0f:4b:6d:2d:79、ucast_type =持久性、port_num = 0x0、 安全
    9:类型:MCAST、vid = 1、addr = 33:33:00:00:01、mcast_state = f、no super、 PORT_MASK = 0x3
    10:类型:MCAST、vid = 1、addr = 01:00:5e:00:01、mcast_state = f、no super、 PORT_MASK = 0x3
    11:类型:MCAST、vid = 2、addr = 33:33:ff:6e:2D:79、mcast_state = f、no super、 PORT_MASK = 0x5
    12:类型:MCAST、vid = 2、addr = 33:33:00:00:fb、mcast_state = f、no super、 PORT_MASK = 0x5
    13:类型:MCAST,vid = 2,addr = 33:33:00:01:00:03,mcast_state = f,无超级, PORT_MASK = 0x5
    17:类型:ucast,addr = 28:63:36:81:3D:C1,ucast_type =触控,port_num = 0x2
    23:类型:ucast,addr = 68:05:ca:36:4e:7c,ucast_type =不变,port_num = 0x2
    27:类型:ucast,addr = 00:90:68:00:D3:a0,ucast_type =不变,port_num = 0x2
    32:类型:ucast,addr = 00:0e:8c:f3:15:1c,ucast_type =不变,port_num = 0x2
    35:类型:ucast,addr = fc:0f:4b:6e:2d:79,ucast_type =不变,port_num = 0x0
    36:类型:ucast,addr = 00:1b:1b:23:81:36,ucast_type =触控,port_num = 0x2
    52:类型:ucast,addr = 00:1b:1b:0e:9e:64,ucast_type =触控,port_num = 0x2
    71:type:ucast,addr = fc:0f:4b:6e:2d:7a,ucast_type =不变,port_num = 0x0

    这就是我避免在 cpsw.c 中启动 VLAN 感知模式的方法:
    静态空 cpsw_init_host_port (struct cpsw_priv*)

    u32 fifo_mode;
    // u32 control_reg;
    struct cpsw_common *cpsw = priv->cpsw;

    /*软复位控制器并初始化 ALE */
    SOFT_RESET ("cpsw"、&cpsw->regs->SOFT_RESET);
    cpsw_ale_start (cpsw->ale);

    /*切换到不知道 VLAN 的模式*/
    // cpsw_ale_control_set (cpsw->ale、host_port_NUM、ale_vlan_aware、
    CPSW_ALE_VLAN_Aware);
    // control_reg = readl (&cpsw->regs->control);
    // control_reg |= CPSW_VLAN_Aware;
    // writel(control_reg,&cpsw->regs->control);
    …μ A



    如何在不修改驱动程序的情况下设置 ALE_CONTROL 寄存器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    为了进行实验、还提供了另一个名为 omapconf 的实用程序。 使用-h 选项将显示大量命令、因此您可能希望尝试使用" omapconf --help| more "将其管道传递到更多命令。 在帮助"omapconf write..."中查看这两个命令 或" omapconf set bit ..."

    如果可以、请告诉我。

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

    这可能起作用、我可以将 omapconf 设置位0x48484004 1的 ALE_CONTROL 更改为 VLAN 感知模式、但如果工作正常、则无法尝试。 如果每个 paket 中都出现 VLAN 标记,我想我必须重新启动网络驱动程序以查看每个 paket 中的更改。