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.

[参考译文] RTOS/PROCESSOR-SDK-AM57X:拒绝 ARP 数据包

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/602203/rtos-processor-sdk-am57x-arp-packets-rejected

器件型号:PROCESSOR-SDK-AM57X

工具/软件:TI-RTOS

我正在使用 NDK 为 Processor SDK RTOS 开发 CCLink 示例。 我正在使用的 CCLink 代码是一个工作代码、它在 Linux 和 Windows 上都能正常工作。

 

我在 ARP 过程中遇到了一个问题、我正在尝试了解这种情况。 目前、这就是我的测试设置的完成方式。 它们未连接任何外部网络。

IDKAM572x <->{network switch}<-> IDKAM572x

 

我的一个主板首先发送 ARP 请求以查找另一个主板的 IP 地址。 请求发送板的 MAC 地址为“FD:F6:a0:00:98:af”。 另一个主板能够接收此 ARP 请求。 收到以下 ARP 数据包后,它将进入该 c 文件"ti/ndk/stack/li/lliin.c"。它将进入183行号。 我已复制粘贴了代码的快照。 它拒绝高光行上的代码。 因为它说源 MAC 地址无效。 但是、我已经验证了 MAC 地址是否正确且有效。 我正在从 Efuse 读取 MAC 地址值。

 

   /*默认情况下:我们将使用 MAC 地址进行回复*/

   mmCopy (replymac、ptr_net_device->mac_address、6);

 

   /*基本验证:如果源 MAC 是多播或广播,则这是

    *非法 ARP 数据包。 我们只需忽略它。 *

   if (pArpHdr->SrcAddr[0]& 1)

       转至 LLIRXEXIT;

 

   /*获取 IP 源和目标*/

 

请帮助我理解为什么我的数据包被拒绝?

 

此外、我认为应用程序代码没有任何问题。 如果用 Linux 或 Window PC 替换其中一个电路板、则可以正常工作。 他们接受 ARP 数据包并发回 ARP 响应、我的应用程序工作正常。

 

请帮我解决这个问题。 这是 NDK 中的错误吗?

 

谢谢、

Suraj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suraj、

    [引用 user="Suraj Das"]请求发送板的 MAC 地址为“fd:f6:a0:00:98:af”[/quot]

    您如何确定其有效性?

    我看到上述地址中第一个字节的最低有效位将为1 (作为0xd ==1101)。

    这意味着 MAC 地址不是单播 MAC 地址、这就是堆栈将其放入您找到的那一行代码的原因。

    有关 MAC 的 Wikipedia 主题讨论 了以下内容:

    " MAC 地址的第一个八位字节的最低有效位将各个地址与组地址区分开来。 该位在各个地址中设置为0、在组地址中设置为1。"

    Steve