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:DK-TM4C129X 在以太网链路建立时不会发出免费的 ARP

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/593121/tm4c129xnczad-dk-tm4c129x-does-not-send-out-a-gratuitous-arp-when-its-ethernet-link-up

器件型号:TM4C129XNCZAD

大家好、

我将 DK-TM4C129X 与 TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c129x\enet_io 搭配使用。

我进行以下更改以使用静态 IP 192.168.127.1测试 IPADDR_USE_STATIC。

网址为 lwipopts.h

#define LWIP_DHCP            0
#define LWIP_AUTOIP           0

在 enet_io.c 中
lwIPInit (g_ui32SysClock、pui8MACArray、0xC0A87F01、0xFFFFFF00、0、 ipaddr_use_static);

我使用的计算机具有 Win7、Wireshark、Intel CPU 和 Intel I210 NIC。

我使用以太网电缆将 DK-TM4C129X 连接到 I210。

根据 third_parti\lwip-1.4.1\src\core\netif.c、

每次 调用 etharp_grated(netif)(以太网链路建立)时、应在我的 Wireshark 中捕获到一个免费 ARP、但没有发生。

只有当我通过 CCS 在 etharp_gratedatury (netif)设置断点以停止 TM4C129XNCZAD 并恢复时、 才可以在我的 Wireshark 中捕获免费 ARP。

有人能给我一些建议吗?

谢谢。

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

    [引用用户="chhyu wang"]是否有人可以给我一些建议?

    很抱歉(提前)这一天会很忙,我不能抗拒。    ("不能完全醒着"的员工让我...)

    希望任何/所有的建议都能证明(更多)"毫无道理"、而不是您不情愿的"原则"。    (我会有所帮助-但我在这一领域"脱离我的联盟"...有些人可能会说"任何/所有领域")

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您在 Wireshark 上看到了什么? 在不使用断点的情况下运行时、您是否在以太网报头中看到正在广播 FF:FF:FF:FF:FF:FF:FF?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    以下 ARP 数据包只能在我使用断点运行时捕获。

    谢谢。

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

    我不太确定您是否需要在您的应用中专门调用 etharp_gratous。 ARP 缓存表中保留了最近的 IP 地址和相应的硬件地址表。 如果传出数据包与任何已知硬件地址不匹配、代码将在链接上执行 ARP 查询以发现正确的地址。 这应该是透明的。

    下面是一些讨论免费 ARP 的链接。
    http://lwip.wikia.com/wiki/ARP
    networkengineering.stackexchange.com/.../how-does-gratuitous-arp-work
    wiki.wireshark.org/Gratuitous_ARP

    可以尝试一些操作吗?

    1.如果使用 DHCP,您是否会看到同样的问题?
    2.在调用 etharp_gratous 后延迟一段时间、看看这是否有任何效果。
    3.您能否在调用 etharp_grat偶然 之前设置 GIO 引脚、并在调用后清除该引脚? 希望确保输入函数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Charles Tsaaa">3. 您能否在调用 etharp_grat偶然 之前设置 GPIO 引脚、并在调用后清除该引脚?   希望确保输入函数。[/quot]

    不(部分)此类 GPIO 在函数代码中"在" etharp_gratous (尤其是放置/设置为"早期"-然后清除"延迟"-时)-而不是(仅)函数调用前后-提供(甚至)更有力的"函数条目"证据?

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

    您好 CB1、

     感谢您的建议。 在函数之前/之后进行切换将不知道是否输入了该函数、但在不真正执行任何 ARP 任务的情况下立即退出。 因此、策略性地将切换放置在功能内部是一个好问题。 etharp_grated()是 etharp_request()的宏。 海报可能需要深入探讨 etharp_raw、以了解为什么不发送 ARP。 我建议海报先检查返回的代码 err_t、看看为什么 ARP 第一次失败。  

    ERR_t
    etharp_request (struct nettif * netif、ip_addr_t * ipaddr)
    {
    LWIP_DEBUGF (ETHARP_DEBUG | LWIP_DBG_TRACE、("etharp_request:sending ARP request。\n");
    return etharp_raw (nettif、(structif、(structif) hwadr-)
    (struct eth_addr *) nettif->hwaddr、&nettif->IP_addr、&ethzero、
    ipaddr、arp_request);
    }