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.

[参考译文] TM4C129XNCZAD:MAC 滤波器(阻止除一个之外的所有滤波器)

Guru**** 2419530 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/681123/tm4c129xnczad-mac-filters-block-all-except-one

器件型号:TM4C129XNCZAD

我想使用 Mac 筛选器来允许来自单台 PC 的流量、并阻止来自所有其他 PC 的流量。
我尝试将不同的值编程到 Mac 地址寄存器和相应的控制寄存器中、但它要么会阻止所有流量、要么不会阻止任何流量。

EthernetMacAddr[0]=允许_MACADDR0;
EthernetMacAddr[1]=允许_MACADDR1;
EthernetMacAddr[2]=允许_MACADDR2;
EthernetMacAddr[3]=允许_MACADDR3;
EthernetMacAddr[4]=允许_MACADDR4;
EthernetMacAddr[5]=允许_MACADDR5;

EthernetMacCtrl   = 0xC0000000;

EMACAddrSet      (EMAC0_BASE、SNMP_MAC_FILTER_ADDR_01_ID、EthernetMacAddr);
EMACAddrFilterSet (EMAC0_BASE、SNMP_MAC_FILTER_ADDR_01_ID、EthernetMacCtrl);

EthernetFrameCtrl = 0x00000091;   EMACFrameFilterSet (EMAC0_BASE、u32Val);//不起作用
EthernetFrameCtrl = 0x00000190;   EMACFrameFilterSet (EMAC0_BASE、u32Val); //不起作用
EthernetFrameCtrl = 0x00000290;   EMACFrameFilterSet (EMAC0_BASE、u32Val);//不起作用
EthernetFrameCtrl = 0x00000291;   EMACFrameFilterSet (EMAC0_BASE、u32Val);//不起作用
EthernetFrameCtrl = 0x00000100;   EMACFrameFilterSet (EMAC0_BASE、u32Val);//不起作用
EthernetFrameCtrl = 0x00000200;  EMACFrameFilterSet (EMAC0_BASE、u32Val);//不起作用


它必须是一个简单的东西、但我无法使它正常工作。

谢谢。

Khaled。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不清楚您的代码片段。 传递给函数 EMACFrameFilerSet 的 u32Val 的值是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉

    这是更正后的代码。

    EthernetMacAddr[0]=允许_MACADDR0;
    EthernetMacAddr[1]=允许_MACADDR1;
    EthernetMacAddr[2]=允许_MACADDR2;
    EthernetMacAddr[3]=允许_MACADDR3;
    EthernetMacAddr[4]=允许_MACADDR4;
    EthernetMacAddr[5]=允许_MACADDR5;
    EthernetMacCtrl    = 0xC0000000;

    EMACAddrSet      (EMAC0_BASE、SNMP_MAC_FILTER_ADDR_01_ID、EthernetMacAddr);
    EMACAddrFilterSet (EMAC0_BASE、SNMP_MAC_FILTER_ADDR_01_ID、EthernetMacCtrl);

    EthernetFrameCtrl = 0x00000091;   EMACFrameFilterSet (EMAC0_BASE、EthernetFrameCtrl);//不起作用
    EthernetFrameCtrl = 0x00000190;   EMACFrameFilterSet (EMAC0_BASE、EthernetFrameCtrl); //不起作用
    EthernetFrameCtrl = 0x00000290;   EMACFrameFilterSet (EMAC0_BASE、EthernetFrameCtrl);//不起作用
    EthernetFrameCtrl = 0x00000291;   EMACFrameFilterSet (EMAC0_BASE、EthernetFrameCtrl);//不起作用
    EthernetFrameCtrl = 0x00000100;   EMACFrameFilterSet (EMAC0_BASE、EthernetFrameCtrl);//不起作用
    EthernetFrameCtrl = 0x00000200;  EMACFrameFilterSet (EMAC0_BASE、EthernetFrameCtrl);//不起作用

    Khaled。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、这就是我认为您的意思。 我的预期是使用0x200 (EMAC_FRMFILTER_SADDR)可以实现它。 我要求对本模块具有更多经验的人查看此主题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一些意见:

     1.您正在对传递给 EMACFrameFilterSet 的参数进行硬编码。  EMAC_FRMFILTER_SADDR 是您要滤波的吗? 使用定义的标志而不是硬编码值。  

     2.我再次建议您使用定义的标志、例如 EMAC_FILTER_ADDR_ENABLE | EMAC_FILTER_SOURCE_ADDR、而不是0xC0000000作为 要为 EMACAddrFilterSet 传递的参数。

     3.您能否在 CCS 寄存器窗口中检查 EMACFRAMEFLTR 寄存器? 是否设置了相应的滤波标志?

     4.我想知道您的 MAC 地址是否被反转。  请参阅下面的内容。 如果 MAC 地址 AA:BB:CC:DD:EE:FF、则 AA 存储在第一个字节中。  

    MAC-48地址定义为6个八位位组、如下例地址所示。 。
    数字以十六进制格式显示。
    AC-DE-48-00-80
    在这种表示中、前三个八位位组(AC-DE-48)是组织唯一标识符
    (OUI)。 这是由 IEEE 分配给请求块的组织的一个数字
    MAC 地址。 最后三个八位位组(00-00-80)是由 OUI 管理的24位数
    所有者唯一标识该组织内要连接的一个硬件
    以太网。
    在这种表示中,八位位组从左向右传输,其中“AC”八位位组为
    先发送,最后发送“80”八位位组。 在八位位组内、传输这些位
    LSB 至 MSB。 对于该地址,要发送的第一个位将为“0”,即“AC”的 LSB,
    最后一个要发送的位将是“1”,即“80”的 MSB。
    在 pui8MACAddr 数组中传递给该函数的地址由第一个字节排序
    在第一个数组条目中传输。 例如、上面给出的地址可能是
    使用以下数组表示:
    uint8_t g_pui8MACAddr[]={0xAC、0xDE、0x48、0x00、0x00、 0x80};
    如果此函数设置的 MAC 地址当前已启用、则此后将保持启用状态
    调用。 同样、为 MAC 地址配置的任何筛选器都不受中的更改的影响
    地址。

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

    按照您的建议检查了 MAC 地址、它是正确的 g_pui8MACAddr[0]= 0xAC、g_pui8MACAddr[1]= 0xDE、g_pui8MACAddr[2]= 0x48、g_pui8MACAddr[3]= 0x00、g_pui8MACAddr[4]= 0x00、 并且 g_pui8MACAddr[5]= 0x80。

    对 Cortex 进行了更多调试并缩小了范围。 已使用以下命令重新测试

    EthernetMacAddr[0]=允许_MACADDR0;
    EthernetMacAddr[1]=允许_MACADDR1;
    EthernetMacAddr[2]=允许_MACADDR2;
    EthernetMacAddr[3]=允许_MACADDR3;
    EthernetMacAddr[4]=允许_MACADDR4;
    EthernetMacAddr[5]=允许_MACADDR5;
    EthernetMacCtrl = EMAC_FILTER_ADDR_ENABLE | EMAC_FILTER_SOURC_ADDR;

    EMACAddrSet (EMAC0_BASE、SNMP_MAC_FILTER_ADDR_01_ID、EthernetMacAddr);
    EMACAddrFilterSet (EMAC0_BASE、SNMP_MAC_FILTER_ADDR_01_ID、EthernetMacCtrl);

    EthernetFrameCtrl = 0x00000200;EMACFrameFilterSet (EMAC0_BASE、EthernetFrameCtrl);

    上面的命令实际上会阻止所有以太网流量,但允许的单个 MAC 地址(allow_MACADDR0... ALLOW_MACADDR5)到达 Cortex 以太网 Rx FIFO。 这是预期行为。

    问题是回复消息不会从 Cortex 返回到允许的 Mac 地址!




    更具体地说、我有2个调制解调器连接到2台 PC、每个调制解调器都有一个 Cortex 控制器。
    如果在两个调制解调器上都禁用了筛选功能,则 ping 将正常
    PC 1 ->调制解调器1 ->调制解调器2 -> PC 2 ->调制解调器2 ->调制解调器1 -> PC 1 确定(已收到回复)

    如果调制解调器1上仅允许 PC1的 MAC 地址,而调制解调器2已禁用过滤功能,则 PC1可以 ping 调制解调器1,但不能 ping 调制解调器2或 PC 2。
    调试到调制解调器1/Cortex 上、发现 ping 发现消息执行以下路径:
    Ping 调制解调器1: PC1 ->调制解调器1 -> PC 1 确定(已收到回复)
    Ping 调制解调器2: PC1 ->调制解调器1 ->调制解调器2 ->调制解调器1 不正常(未收到回复)
    Ping PC 2: PC1 ->调制解调器1 ->调制解调器2 -> PC2 ->调制解调器2 ->调制解调器1 不正常(未收到回复)


    有什么想法吗?
    Khaled。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用 Wireshark 进行更多测试。 当调制解调器1有一个允许的 Mac 地址时、即允许 PC 1 Mac 地址
    PC 1接收来自调制解调器2或 PC 2的 ARP 消息
    从调制解调器2或 PC 2返回的 ICMP 消息被阻止。

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

    您好、Charles、

    有什么想法为什么 Cortex Mac 筛选的行为有所不同、不管是 ARP 消息还是 ICMP 消息?

    同样、当 Mac 筛选器控件设置为0x00000200、并且我从具有允许的 Mac 地址的 PC 发送时、不会阻止 ARP 消息(如预期的那样)、但 ICMP 消息是。

    谢谢。

    Khaled。

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

    您好、Charles、

    我需要更仔细地解决这个 Mac 筛选问题。

    请您再看一下吗?

    Khaled。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Khaled、
    我自上星期三以来已不在办公室、今天刚回来。 很抱歉耽误你的时间。

    我认为原因可能是 ARP 是一条广播(MAC 地址等于所有 F)消息、而 EMAC 模块不会对其应用过滤器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    希望你有一个放松的假期:-)

    是否:ARP 目标是广播,但 ARP 源不是。 ARP 源是发送 PC。
    由于 Mac 筛选器设置为按源地址筛选、因此它必须是控制寄存器中设置不正确的开关。
    您是否有工作示例代码?

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

    您好 Khaled、

    我已经做了一些研究来阅读驱动程序库用户指南、并且没有发现您用于滤波的代码设置有任何问题。 MAC 地址过滤仅应用于从1到(MAC 地址插槽- 1)的 MAC 地址插槽。 MAC 索引0存储本地 MAC 地址。 您会说、通过对传入帧的源地址启用过滤、传出帧(由 PC 使用其本地 MAC 地址进行传输)也会被阻止。  

      

     

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

    我的 PC <-->调制解调器1 (含 Cortex)<-->调制解调器2 (含 Cortex)<-->目标 PC。

    调制解调器1已启用 MAC 过滤器。
    调制解调器2未启用 MAC 过滤器。

    ARP 从我的 PC (源 PC)进入目标 PC 并返回到我的 PC (源 PC)。
    ICMP 从我的 PC (源 PC)传输到目标 PC,但不会返回到我的 PC。 据我所知、它被连接到我的 PC (源 PC)的 Cortex 阻止

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

    在调制解调器1过滤中,您是否尝试添加 Modem2 (可能包括 PC2)允许的 MAC 地址,并查看它的区别是什么?

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

    我没有。 我认为没有必要这么做。 Modem2过滤未启用(EthernetFrameCtrl = 0x0000291且 EthernetMacCtrl = 0x00000000)。

    问题必须在 Modem1上。 当 Modem1 EthernetFrameCtrl = 0x0000200时、允许 PC1发出 ARP 消息、并阻止来自任何其他 PC 的 ARP 消息、这正是我所期望的。 另一方面,ICMP 消息将被阻止,而不管消息是从 PC1还是任何其它 PC 发送到 Modem1。

    Khaled。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您有一个我可以尝试的示例代码、它可能有助于解决此问题。
    Khaled。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的意思是将 PC1和 Modem2的 MAC 地址包含在 Modem1的地址过滤器中? 我想您目前只在 Modem1的过滤器中添加了 PC1的 MAC 地址,对吧? 我并不是要向调制解调器2添加任何 MAC 地址。

    不、我们在这方面没有任何示例代码。 我尝试搜索 e2e 论坛、找不到任何应用此功能的人。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好,查尔斯

    使用 PC1对 MacAddress1进行编程、使用 Modem2对 MacAddress2进行编程。 我仍然无法 ping Modem2。

    接下来如何进行? 我们已经测试了每种组合。

    我认为驾驶员有问题。 TI 的某个人必须已经在这方面工作过。 是否可以跟踪他?

    我检查了 Erata、没有关于 MAC 地址过滤的建议。

    谢谢。

    Khaled。

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

    您好、Charles、

    是否有更新? 由于我认为这是一个 Cortex 错误、提出此请求的步骤是什么?

    Khaled。

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

    您好 Khaled、

     让我做一些调查、然后返回。

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

    您能否显示网络的拓扑? 一个简单的图表将有所帮助。 PC1、PC2、调制解调器1和型号2是否都未连接到 LAN? PC1和 PC2是否没有自己的 NIC?

    我有一个简单的设置、其中我的 PC1和 PC2以及 TM4C129 LaunchPad 都连接到我的本地网络。 我将 PC2的 NIC MAC 地址添加到 TM4C EMAC 中进行过滤。 与您在代码片段中显示的方法几乎相同。 如果我使用 PC1 ping LaunchPad、则请求将超时。 如果我使用 PC2对 LaunchPad 执行 ping 操作、则 ping 操作正常。 当 PC1 ping LaunchPad 时、ping 请求将发送到 TM4C 器件。 但是,PC1的 MAC 地址与 SA 过滤器不匹配,因此帧从堆栈中丢失。 ping 使用 ICMP 协议。 ICMP 是作为 IP 层(OSI 模型中的第3层)的一部分实现的,因此可以将 ICMP 处理视为与 IP 处理并行或作为 IP 处理的一部分。 由于帧未到达 IP 堆栈、LaunchPad 没有回声响应。

    请注意、我使用下面的进行帧过滤选项。

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

    您好、Charles、

    请参阅随附的 setup.pdf 文件。

    Khaled

    e2e.ti.com/.../Setup.pdf

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

    e2e.ti.com/.../8664.Setup.pdfminor修正 IP 和 Mac 值

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    调制解调器1和2是否用作某种网关? 您是否在 TM4C 中创建了一个应用程序(如调制解调器1中所示),以便从 PC1获取数据并将其发送到调制解调器2,因为图中所示的 PC1未直接连接到网络?

    向调制解调器2发送 ping 请求时,调制解调器1需要向调制解调器2发送 ICMP 回应请求消息。 如果调制解调器2接收到回显请求、它将回显回复消息发送回调制解调器1。 如果调制解调器1不包含调制解调器2 MAC 地址的 SA 过滤器,则可能是帧丢失的原因。 至于 ARP 的工作原理,我认为原因可能是 ARP 是一个第2层(OSI 中的链路层),它不涉及 IP 堆栈,而且过滤器可能对它没有影响。

    如果您故意使用了不正确的 SA 筛选器地址、ARP 是否仍会通过?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Modem1和 Modem2充当透明链路。 Modem1从 PC1接收消息并将其发送到 Modem2。 Modem2将消息转发给 PC2。 链路是双向的。
    PC1和 PC2不需要连接到网络。 当前网络是 PC1、PC2和/或 PC3的本地网络。

    如果 PC1向 Modem2发送 ping 命令,Modem1将作为透明链路,并将 ping 消息移至 Modem2。 当 MAC 过滤被禁用(不是过滤)时、Modem2会生成一条回显应答消息(具有其自己的 MAC 和 IP 地址)并将其发送回 Modem1。 Modem1最后将回波应答按原样转发给 PC1。

    尝试将 Modem2 MAC 地址添加到 Modem1的 SA 筛选器中、但仍然没有成功:据我所知、回显请求消息未到达 Modem2、并被 Modem1阻止。 另一方面,PC1收到的 ARP 消息到达 Modem2,Modem2应答 PC1。

    无论 SA 筛选器内容如何、ARP 消息似乎都要经过。

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

    Khaled Saab 说:
    无论 SA 筛选器内容如何,ARP 消息似乎都在传递。

    这似乎是我之前怀疑 ARP 将通过而不考虑过滤器的原因,因为它是一个不涉及 IP 堆栈的第2层协议。  

    我想知道您是否将调制解调器2 MAC 地址作为 DA (目标地址)筛选器而不是源地址包含在调制解调器1中、这会产生什么不同。 如下所示。

    EMACAddrFilterSet (EMAC0_BASE,2,EMAC_FILTER_ADDR_ENABLE);//为索引2中存储的 MAC 地址启用 DA 比较  

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

    我明天会尝试、但即使这种方法有效、也不符合我的要求、因为无法将所有调制解调器 Mac 地址添加到允许的目标列表中。

    Khaled

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

    您好、Charles、

    :-)

    您正在处理某件事。 当我按照您的建议将 Modem2和 PC2 DA 地址添加到 MAC 过滤器时:ping 运行正常,即我可以从 PC1而不是从 PC3中探测 Modem2和 PC2。

    现在、我们需要找到 SA 和 DA 地址以及要编程的帧控制寄存器的正确组合。 同样,我的目标是允许从单台 PC (PC1/Modem1)访问整个网络。 网络可以是20-100个节点。

    我们是否可以使用帧控制寄存器中的 DA 反向滤波器位来允许所有 DA 地址? 你有建议吗?

    Khaled。

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

    您好 Khaled、

     是的、您可以尝试一下。 您可能需要提供一个 MAC 地址、您知道该地址肯定不会出现在您的网络中、并对该地址应用反向滤波器。  

    另一个选项是存储任意 DA 地址。 此外、您将启用所有掩码字节控制位以忽略比较。 在您的帧控制中、只需应用 EMAC_FRMFILTER_SADDR。  

    EMACAddrFilterSet (EMAC0_BASE、2、EMAC_FILTER_ADDR_ENABLE | EMAC_FILTER_MASK_BYTE_6 | EMAC_FILTER_MASK_BYTE_5 | EMAC_FILTER_MASK_BYTE_4 | EMAC_FILTER_MASK_BYTE_3 | EMAC_FILTER_MASK_BYTE_2 | EMAC_BYTE_1;EMAC_MASK_MASK_1)

     请告诉我哪种方法最有效。

     

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

    我会尝试这个。

    但我的第一个问题是、为什么我必须完成此过程、即为什么我必须添加 DA? 这对我来说毫无意义。

    Khaled

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    意外行为:
    按照您的建议在第二个插槽中编程虚拟 DA MAC 地址(第一个插槽仍具有 PC1的 SA),错误地保持了帧过滤器不变,即仅使用 SA 的过滤器(没有更改以启用逆向 DA),它起作用了!!!!!!


    EMACAddrFilterSet (EMAC0_BASE,1,EMAC_FILTER_ADDR_ENABLE | EMAC_FILTER_SOURCE ADDR);

    EMACAddrFilterSet (EMAC0_BASE、2、EMAC_FILTER_ADDR_ENABLE | EMAC_FILTER_MASK_BYTE_6 | EMAC_FILTER_MASK_BYTE_5 |
    MAC_FILTER_MASK_BYTE_4 | EMAC_FILTER_MASK_BYTE_3 | EMAC_FILTER_MASK_BYTE_2 | EMAC_FILTER_MASK_BYTE_1);

    EMACFrameFilterSet (EMAC0_BASE、EMAC_FRMFILTER_SADDR);

    我想了解正在发生的情况。 显然、逻辑存在错误。
    它可能与所有 MBC 控制位都设置为1这一事实有关。
    但是、我为什么必须在第二个插槽中对 DA 地址进行编程?

    您可以再看一下、还是至少更新了文档? 我不想用没有记录行为的调制解调器联系客户。
    谢谢。
    Khaled。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Khaled、
    很高兴它能正常工作。 我将就您的未回答问题与您联系。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Khaled、
    我希望变通办法对您很有用。 我认为我没有充分的解释、为什么传出数据包被阻止、除非对 DA 地址使用筛选器。 在这个特定的设置中、使用 MCU 作为透明链路也许与您有关系。 当我将 PC、MCU 放在同一网络上时、我无法真正再现相同的内容。 也许这也是您可以尝试的东西。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢查尔斯回来了:-)

    我不明白您希望我尝试什么? 调制解调器充当透明链路的事实与 MCU 无关。 实际上、调制解调器代码本身并不在 MCU 上。 调制解调器代码在第二个 TI DSP 芯片 C6000芯片上运行。 MCU 主要用作连接用户的接口(以太网、RS232路由...)。 MCU 将以太网数据包发送到 C6000、后者按原样调制并转发以太网数据包到其目标 C6000芯片、后者将其转发到目标 MCU、最后转发到目标 IP。 反向应用同样的过程。

    如果需要、甚至可以从路径中移除 C6000、并使用任何可用接口将 MCU 连接在一起。 此外、当禁用 Mac 筛选器时、源 IP 和目标 IP 之间的通信效果良好。

    我想找一个可以向客户介绍的解释。 开发团队如何测试此功能? 我们的客户不接受未记录的行为。

    Khaled。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好,查尔斯
    是否幸运地获得更新后的文档?
    Khaled。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Khaled、
    很抱歉耽误你的回答。 我对这种行为还没有解释。 它可能是 EMAC 模块问题、也可能是与 TCP/IP 堆栈相关的问题、但我不知道。 您是否正在使用 LwIP?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、
    否我未使用 LwIP (至少未满)。
    但我看不到 LwIP 与设置 EMAC 滤波器有什么关系! 更确切地说、我们必须设置 DA 地址。

    您是否有能力将此问题提升到上层?
    即使 EMAC 没有固定、我至少需要一份文档来向客户提供。

    Khaled。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Khaled、
    如果您不使用 LwIP、那么您使用的是什么 TCP/IP 堆栈? 我不是说问题必须与堆栈相关。 这只是我想排除的事情。 作为透明链路、MCU (modem1)是否负责接收帧并将其从 PC1转发到 modem2? 这是由堆栈还是由您的应用固件代码处理? 我只是想排除您看到的行为是否依赖于底层堆栈。
    老实说、我们没有任何以太网专家。 我希望我可以将问题提交给比我更了解的人。 遗憾的是、如果问题真正与硬件相关、我们没有能够从设计角度进行调查的设计人员。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    所有这些都由我们的应用固件代码处理、并且没有协议栈:以太网消息由 modem1划分为小块并发送到调制解调器2。 调制解调器2重新组装模块并将重新组装的以太网消息从以太网端口转发出去。 任何步骤都不会对消息内容进行任何更改:调制解调器2重新汇编的消息是调制解调器1接收到的消息的准确副本。

    唯一的例外是 ARP 消息:调制解调器应用程序确实响应 ARP 消息。

    我不认为这个问题是我们应用的特定问题、这是 EMAC 硬件的一般问题。 阻塞单个 MAC 地址应该是 EMAC 人员执行的第一个测试之一。 有人做了这个基本的测试。 我要求您与 EMAC/硬件部门联系、 并向他们介绍问题。

    编写文档的部门可能有一些见解(就像一个想法一样)。

    谢谢。

    Khaled。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Khaled、
    是否有来自 PC1->modem1->modem2的 ping 命令的 Wireshark 捕获? 我想知道回波请求和响应是如何从 PC1传输到 modem2并返回到 PC1的。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    下面是 PC1和 PC2的 Wireshark 捕获( 有关 PC 和调制解调器配置,请参阅 Mac Filtering Setup.docx)。

    在 PC1 NoFilterOnModem1.pcapng 中,MAC 过滤被禁用,我能够 ping Modem1、Modem2和 PC2。 我还连接了 PC2 Wireshark 捕获

    PC1的 MacFilterOnModem1.pcapng Mac 过滤在 Modem1上启用。 在本例中、我能够 ping Modem1、但不能 ping Modem2或 PC2。 在本例中、Modem1 EMAC 配置如下:

    EMACFrameFilterSet (EMAC0_BASE、EMAC_FRMFILTER_SADDR);EMACAddrSet (EMAC0_BASE、1、A4-BA-db-ef-4a-14); EMACAddrFilterSet (EMAC0_BASE、1、EMAC_FILTER_ADDR_ENABLE | EMAC_FILTER_SOURC_ADDR)。

    Khaled

    我无法附加所有文件。 我每次发送一个。

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

    e2e.ti.com/.../2480.Mac-Filtering-Setup.docx

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

    e2e.ti.com/.../Mac.zip

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

    您好 Khaled、

     感谢您发送 Wireshark 捕获。 从捕获结果可以看出、在 PC1MacFilterOnModem1.pcapng 的数据包22中发送回波请求后、未收到任何响应。  我不确定 modem1是否未发出请求、因此 modem2未收到请求、因此未使用回波响应进行回复。 如果是这种情况、那么为什么我会在 Wireshark 捕获中看到请求(数据包22)? 或者、modem1已将回波请求发送到 modem2、但 modem2未使用回波响应进行回复。 如果是这种情况、那么为什么 modem2不接收请求、因为它没有应用 MAC 滤波器。  

     PC1是如何物理连接到 modem1的,modem1是如何物理连接到 modem2的? PC1和 modem2是否连接到某种类型的集线器或交换机? 您是否可以了解物理设置,包括 PC1、modem1、modem2和之间的网桥?

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

    您好、Charles、

    我更新了 Mac Filtering Setup.docx、以更好地说明所有设备的连接方式。 总结:PC1或 PC3通过以太网电缆连接到 Modem1。 Modem1和 Modem2使用我们专有的分段和重新组装协议通过120V 电力线电缆进行连接。 Modem2使用以太网电缆连接到 PC2。

    我已将调试代码添加到 Modem1中。 调试代码将记录调制解调器从以太网连接接收到的所有消息的 src、dst 和类型。

    我进行了2个测试用例:第一个测试用例禁用了 Mac 筛选、第二个测试用例启用了 Mac 筛选(与以前相同)。 在这两种情况下,PC1依次 ping Modem1、Modem2和 PC2。

    在第一种情况下(禁用过滤):如果查看"Modem1 NoFilterOnModem1.txt"文件,则可以看到来自 PC1的传入数据包,目标是 Modem1、Modem2和 PC2。 这与 Wireshark 日志相匹配。

    在第二种情况下(启用过滤):如果查看"Modem1 MacFilterOnModem1.txt"文件,则可以看到唯一传入的数据包是来自 PC1并发往 Modem1的数据包。 modem1不接收所有其它数据包(传输到 Modem2和 PC2)。 EMAC 阻止消息到达 modem1、即使 src MAC 地址有效。

    Khaled。

    e2e.ti.com/.../Mac20180611.zip

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

    启用过滤器后,我可以看到从 PC1到 modem1的 ping 请求被接收,并且 modem1将 ping 应答返回到 PC1。 这意味着 PC1的 MAC 地址被识别为有效的源地址。 不确定是否已尝试使用 PC3 ping modem3。 由于 PC3的 MAC 地址未添加到源地址筛选器列表中,因此它应该会失败。 我认为我们同意这一项。

    当 ping 数据包发往 modem2时,源地址仍然是同一 PC1的 MAC。 唯一的区别是目标地址是 modem2。 EMAC 将允许该数据包进入其 RXFIFO。 我认为最可能发生的情况是、启用滤波器后、滤波器地址(PC1的 MAC)将应用于源和目标滤波、而此时应应用于源地址检查。 在 ping 应答过程中,如果目的地址是 PC1,则目的地址通过过滤检查。 但是,当目的地址是 modem2或 PC2时,它不能通过目标地址过滤检查。 这就是为什么启用允许所有地址的目标地址过滤的变通办法将起作用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、
    我不确定我是否遵循您的想法。 但您似乎确认了我的假设:文档不完整或 EMAC 中存在错误。 在这两种情况下、我都无法将调制解调器发送给客户。 需要对文档或 EMAC 进行修复。
    谢谢。
    Khaled。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Khaled、
    我认为这可能是一个硬件问题、在这种情况下、我们可以尝试提供勘误更新。 但是、我还没有发布计划。

    同时,是否可以将 PC3添加到 SA 地址过滤器列表中,并从 PC1 ping PC3? 拆下您之前使用的虚拟 DA 滤波器。 过滤器地址列表中将仅包含 PC1和 PC3 SA。 ping 会成功吗?

    如果不将 PC3的 MAC 地址添加到 SA 筛选器中、ping 是否成功?

    我的理由是,如果 SA 过滤器同时应用于源地址和目标地址,然后将 PC3添加到列表中,则从 PC1 ping PC3应该会成功。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    当仅 PC1位于 Modem1 SA MAC 地址时:我无法 ping PC2或 Modem2 (与之前相同)

    已将 PC2添加到 Modem1 SA MAC 地址:仍然、我无法 ping PC2或 Modem2。

    您的假设没有保留。

    您是否希望我尝试其他组合? 如果是、请向我发送您想要查看的组合列表。

    谢谢。

    Khaled。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Khaled、
    在我上次的答复中,我建议尝试 PC1->modem1->PC3->modem1->PC1。 modem1是否不会将数据包从 PC1转发到 PC3? 根据 Wireshark 捕获,PC1的 ping 命令->modem1->PC1在启用过滤器的情况下工作。 没有必要为 DA 过滤器指定任何虚拟地址,以便从 modem1->PC1转发数据包。 这就是为什么我想知道是否根据源地址和目标地址来检查 PC'1 MAC 地址。 如果是这种情况,如果将 PC3的 MAC 地址添加到过滤器列表中,则 PC1->modem1->PC3->modem1->PC1也应成功。 如果这不起作用、那么我的理论就不起作用、我同意。

    我记得您在 SA 筛选器列表中添加了 modem2和 PC2的 MAC 地址、但不起作用。 但区别在于、modem2/PC2通过自适应电源线连接到 modem1、而 PC3通过以太网电缆连接到 modem1。 这是正确的理解。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Charles,我在 PC1和 PC3之间没有连接。 我将 PC1以太网电缆插入 Modem1,或者将 PC3以太网电缆插入 Modem1。 PC1和 PC3未使用路由器连接到 Modem1。
    很抱歉造成混淆。
    Khaled。