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.

[参考译文] PROCESSOR-SDK-AM64X:AM64x 上的 CPSW MAC 硬件滤波

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1486769/processor-sdk-am64x-cpsw-mac-hardware-filtering-on-am64x

器件型号:PROCESSOR-SDK-AM64X

工具/软件:

您好 TI、

我正在使用 CPSW 的 AM64x。

CPWS 硬件中是否存在 MAC 过滤? 如果是、因为何时? (哪个 SDK)

通过查看用户手册+内核代码、内核中似乎有一个配置 ALE 的驱动程序可以处理 CPSW 内部的 MAC 滤波。 我的理解正确吗?

-天一

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

     :

    感谢您的查询。

    您使用的是 Linux 还是 RTOS?

    此致

    Ashwani

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

    是否可以分享 Linux 和 RTOS 状态?

    -天一

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

    你好 Ashwani GoelTian Liu

    主要问题与 AM64x 器件内的 CPWS 有关?   CPWS 是否支持 MAC 过滤?

    在 TRM 文档中、我会说是的...  

    12.2.1.1.1 CPSW0特性

    地址查找引擎(ALE)
    MAC 地址阻塞

    稍后、我们可以讨论在前一点响应 为正的情况下 Linux 和 MCU SDK (如果可用)中是否有驱动程序。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid="488374" url="~/support/processors-group/processors/f/processors-forum/1486769/processor-sdk-am64x-cpsw-mac-hardware-filtering-on-am64x/5714676 #5714676"]

    12.2.1.1.1 CPSW0特性

    地址查找引擎(ALE)

    [/报价]

    您可以参考-
    https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/latest/exports/docs/api_guide_am243x/enet_ioctl_interface.html#using_enet_ioctl

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/latest/exports/docs/api_guide_am243x/group__CPSW__ALE__MOD.html#gabed7e8ccaf9e220220ce26e85697cb98 、了解 有关如何使用 ALE 和其他 CPSW IOCTL 的更多详细信息

    下面是为 BC 帧创建添加条目的示例

        EnetApp_addMCastEntry(enetType,
                              instId,
                              EnetSoc_getCoreId(),
                              BROADCAST_MAC_ADDRESS,
                              CPSW_ALE_ALL_PORTS_MASK);

    void EnetApp_addMCastEntry(Enet_Type enetType,
                              uint32_t instId,
                              uint32_t coreId,
                              const uint8_t *testMCastAddr,
                              uint32_t portMask)
    {
        Enet_IoctlPrms prms;
        int32_t status;
        CpswAle_SetMcastEntryInArgs setMcastInArgs;
        uint32_t setMcastOutArgs;
    
        if (Enet_isCpswFamily(enetType))
        {
            Enet_Handle hEnet = Enet_getHandle(enetType, instId);
    
            EnetAppUtils_assert(hEnet != NULL);
            memset(&setMcastInArgs, 0, sizeof(setMcastInArgs));
            memcpy(&setMcastInArgs.addr.addr[0U], testMCastAddr,
                   sizeof(setMcastInArgs.addr.addr));
            setMcastInArgs.addr.vlanId  = 0;
            setMcastInArgs.info.super = false;
            setMcastInArgs.info.numIgnBits = 0;
            setMcastInArgs.info.fwdState = CPSW_ALE_FWDSTLVL_FWD;
            setMcastInArgs.info.portMask = portMask;
            ENET_IOCTL_SET_INOUT_ARGS(&prms, &setMcastInArgs, &setMcastOutArgs);
            ENET_IOCTL(hEnet, coreId, CPSW_ALE_IOCTL_ADD_MCAST, &prms, status);
            if (status != ENET_SOK)
            {
               EnetAppUtils_print("EnetTestBcastMcastLimit_AddAleEntry() failed CPSW_ALE_IOCTL_ADD_MCAST: %d\n",
                                   status);
            }
        }
    }

    此致

    Ashwani

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

    尊敬的

    您能否帮助了解您的使用案例以获得更好的进一步帮助?

    您是否在寻找:

    1. 将 MAC 地址列入白名单?
      1. 或将 MAC 地址列入黑名单?
    2. 基于源地址进行滤波
      1. 或目标 MAC 地址
    3. 用于挂接接收路径的过滤器
      1. 或转发/切换路径到另一个 MAC 端口

    此致

    Ashwani

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

    您好、

    我们需要阻止不需要的以太网帧来干扰 CPU。   根据 MAC 地址接收或丢弃数据包。  问题是我们是否可以 在 CPSW 而不是软件栈中执行此操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题是我们是否可以 在 CPSW 中执行此操作、而不是在软件栈中执行此操作。

    应该可以...只需要有关您正在查找的筛选器的更多具体信息?

    我们需要阻止不需要的以太网帧来干扰 CPU

    这些帧的哪种类型(特定的 EtherType)?  

    MC 或 UC 目标地址?

    根据 MAC 地址、将接收或丢弃数据包

    假设基于源地址?

    此致

    Ashwani

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

    它是用于鹅和 MC 的特定 EtherType

    https://en.wikipedia.org/wiki/Multicast_address

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

    您好、Milan、

    我正在内部进行相关工作。

    我会尽快回复您。

    此致

    Ashwani

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

    您好 Milan/Tian、

    我正在内部与 Ashwani 核实他在 RTOS 方面的当前进度。

    同时、我可以从 TRM 中找到以下内容:对于 ALE 表中的单播地址条目、可以通过设置块位丢弃特定单播数据包。 单播地址位表示48位数据包 MAC 地址。

    在 Linux 方面、在 am65-cpsw-nuss.c 驱动程序中、我看到下面一行似乎与单播数据包中的块位相对应。

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/net/ethernet/ti/am65-cpsw-nuss.c?h=ti-linux-6.6.y#n3055 

    我不确定多播数据包是否具有类似的阻塞功能、以及下面的"阻止/转发/学习"状态是否意味着多播数据包可以被阻止。 在内部对其进行双重检查。

    -道林

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们需要阻止不需要的以太网帧来干扰 CPU。   根据 MAC 地址接收或丢弃数据包。  问题是我们是否可以 在 CPSW 而不是软件栈中执行此操作。

    在内部进行检查后、仅根据硬件方面进行检查、CPSW 可以根据地址而不是 EtherType 阻止多播数据包。  

    请参阅 AM64x TRM 中的12.2.1.4.6.1.16数据包转发过程和12.2.1.4.6.1.16.1入口过滤过程、以查看丢弃数据包所需满足的条件列表。

    具体而言、以下情况可能与丢弃多播数据包最为相关。

    "IF ((ENABLE_RATE_LIMIT)和(超出速率限制) AND (不是 BCAST_MCAST_CTL)
    然后是((找到多播/广播目标地址)和(非超级地址)或(未找到多播/广播目标地址))
    然后丢弃数据包"

    -道林

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

    大家好、Daolin、好的、非常清楚。  

    由于 Ethertype 不能用于筛选具有 CPSW 的数据包、您是否知道可以阻止多少个多播地址 CPSW?

    -天一

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

    您好、天一:  

    因为 Ethertype 无法用于以 CPSW
    筛选数据包

    我只是想补充一点、因为大家知道、尽管在硬件中 CPSW 无法按 EtherType 进行滤波、但通过实施一些 eBPF 程序来实现这一点(假设您正在使用 Linux)。 我们没有任何 EtherType 通过 eBPF 进行滤波的示例、但由于 Milan 提到、 大家 可以研究软件实现、使用 eBFP 来实现这一点可能是一种选择。

    您是否知道可以阻止多少个多播地址 CPSW?

    以下是我们 CPSW 硬件设计专家的反馈:

    可通过将多播数据包添加到 ALE 表来阻止这些数据包。 我们支持多播范围。

    • 为多播添加 ALE 条目、将端口掩码设置为0、将忽略设置为 忽略最多1024个地址。

    -道林