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.

[参考译文] CC3220SF-LAUNCHXL:使用 SimpleLink 堆栈的免费 ARP。

Guru**** 2589265 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/894276/cc3220sf-launchxl-gratuitous-arp-using-the-simplelink-stack

器件型号:CC3220SF-LAUNCHXL

您好!

传感器上的 WiFi 芯片运行的代码与 network_terminal 示例类似。
它当前运行的是最新的堆栈版本: simplelink_cc32xx_sdk_3_40_00_05。

在我们的无线路由器中、我们发现 TI WiFi 芯片  显示在 其-ARP 列表中。 (所有其他器件都可以。)
我们想知道、SimpleLink 堆栈在获取 IP 地址后是否会执行免费的 ARP?

如果没有、我们是否可以命令 WiFi 芯片执行 ARP?

谢谢、Glenn。

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

    您好、Glenn、

    您是否曾尝试执行一些会触发 CC3220上的 ARP 的网络活动? 作为代码的一部分、您可能会连接到远程服务器、作为连接的一部分、CC3220将自动执行 ARP。 此 ARP 应填充 AP 的 ARP 列表。

    也就是说,有一种方法可以触发手动 ARP 请求。 您可以打开一个原始套接字、构建 ARP 请求、然后发出此 ARP 请求。 我在下面的文章中详细介绍了该过程:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/845693/3134002#3134002

    请告诉我您是否需要更多的说明或对执行该 ARP 有进一步的问题。

    此致、

    Michael

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

    您好、Michael、

    我尝试使用您引用的代码、我的版本附在下面。
    我验证了我的 IP 和网关、可以 ping 我的地址、并在 Wireshark 捕获中看到它。
    我看不到来自此发送的任何 ARP。

    您在我的函数中看到了什么问题吗?

    谢谢、Glenn。

    int WiFi_Send_ARP (空)

      int len、lstatus;
      char buf[100];

      struct arp_hdr* arp1;
      struct arp_ETHIP* ETHIP;
      struct arp_eth_hdr* ethhdr1;
      无符号字符 dest_mac[6]={0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、 0xFF};
      unsigned char eth_type[2]={0x08、0x06};

     //检查网络连接
      if (!(APP_CB.CON_CB.IpAddr)&!(APP_CB.CON_CB.GatewayIP))
        返回-3;

     //设置数据包
      ethhdr1 =(struct arp_eth_HDR*) buf;
      memcpy (ethhdr1->dst_mac、dest_mac、ETH_ADDR_LEN);
      memcpy (ethhdr1->src_Mac、myMacAddress、ETH_ADDR_LEN);
      memcpy(ethhdr1->type,eth_type,2);  

      arp1 =(struct arp_hdr*)(buf+ ETH_HDR_LEN);
      arp1->ar_HRD = sl_Htons (ARP_HRD_ETH);
      arp1->ar_pro = sl_Htons (ARP_PRO_IP);
      arp1->ar_hln = ETH_ADDR_LEN;
      arp1->ar_PLN = IP_ADDR_LEN;
      arp1->ar_op = sl_Htons (ARP_HRD_ETH);

      ETHIP =(struct arp_ETHIP*)(buf + ARP_HDR_LEN + ETH_HDR_LEN);
      memcpy (ETHIP->ar_SHA、myMacAddress、ETH_ADDR_LEN);
      memcpy (ETHIP->ar_spa、(void *) app_CB.con_cb.IpAddr、IP_ADDR_LEN);/src IP
      memcpy (ETHIP->ar_tha、dest_Mac、ETH_ADDR_LEN);
      memcpy (ETHIP->ar_TPA、(void *) app_CB.CON_CB.GatewayIP、IP_ADDR_LEN);//dst IP          

      Len = ARP_HDR_LEN + ARP_ETHIP_LEN + ETH_HDR_LEN;

     //发送数据包
      lstatus = sl_Send (app_bc.socket、buf、len、0);
      返回(lstatus);

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

    您可以关闭它。 I.M 现在正在工作。