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/DK-TM4C129X:需要有关设置和获取网关 IP 的帮助

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/727990/rtos-dk-tm4c129x-need-help-setting-and-obtaining-gateway-ip

器件型号:DK-TM4C129X

工具/软件:TI-RTOS

您好!

我一直在尝试找到一种方法来在运行时设置网关并获取它以供显示。 我看了各种帖子、但找不到清晰的方法。 到目前为止、我能够设置和获取 IP 和掩码。 我还能够显示 MAC。 我可能已经找到了一种获取网关并显示它的方法、但我不确定。 以下是我的代码。

谢谢

AJ

void enet_open_hook (void)

   CI_IPNet NA;
   句柄 hCfgIpAddr;
   write_console_msg ("\n\n\rRunning Enet open hook……");

    write_console_msg ("\n\n\r 设置静态 IP...");
       /*设置手册 IP 地址*/
       bzero (不适用、sizeof (不适用));
       na.ipaddr = inet_addr ("10.20.30.120");
       na.ipMask = inet_addr ("255.255.255.0);
       strcpy (na.Domain、"demo.net");
       NA.NetType = 0;
       /*获取当前静态 IP 条目*/
       CfgGetEntry (0、CFGTAG _IPNet、1、1、&hCfgIpAddr);
       /*删除当前静态 IP 条目*/
       CfgRemoveEntry (0、hCfgIpAddr);
       /*添加新的静态 IP 条目*/
       CfgAddEntry (0、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、 (uint8 *)不适用、0);
       //添加默认网关。

   //semaphore_post (web_server_start_semaphore);
}//end void enet_open_hook (void)
/********* /
void enet_ip_add_hook (unsigned int ipaddr、unsigned int IfIdx、unsigned int fAdd)

   char       val_array[10];
   字符       IPString[16];
   uint8      mac_address[6];
   uint16     MTU;
   int        ret_code;
   NIMU_IF_REQ IF_REQ;
   CI_IPNet   NA;
   CI_route   RT;
   write_console_msg ("\n\n\rRunning Enet IP add hook...");
//   write_console_msg ("\n\n\rLocal IP:");
//   display_ip_address (ipaddr);
   if_req.name[0]= 0;
   if_req.index  = 1;
   /*获取设备 MTU */
   RET_CODE = NIMUIoctl (NIMU_GET_DEVICE_MTU、&IF_req、&MTU、sizeof (UINT16));
   如果(RET_CODE < 0)
   {
       write_console_msg ("\n\rGet MTU 失败");
   }
   /*获取设备 MAC 地址*/
   RET_CODE = NIMUIoctl (NIMU_GET_DEVICE_MAC、&if_req、&mac_address、sizeof (mac_address));
   如果(RET_CODE < 0)
   {
       write_console_msg ("\n\n\rGet MAC Add Failed");
   }
   write_console_msg ("\n\n\rMTU           :");
   Ulong_TO_ASCII (MTU、val_array);
   write_console_msg (val_array);
   write_console_msg ("\n\n\rMAC 地址   :");
   Ulong_TO_hex_ascii (mac_address[0]、val_array);
   write_console_msg (val_array);
   write_console_char ('-');
   Ulong_TO_hex_ascii (mac_address[1]、val_array);
   write_console_msg (val_array);
   write_console_char ('-');
   Ulong_TO_hex_ascii (mac_address[2]、val_array);
   write_console_msg (val_array);
   write_console_char ('-');
   Ulong_TO_hex_ascii (mac_address[3]、val_array);
   write_console_msg (val_array);
   write_console_char ('-');
   Ulong_TO_hex_ascii (mac_address[4]、val_array);
   write_console_msg (val_array);
   write_console_char ('-');
   Ulong_TO_hex_ascii (mac_address[5]、val_array);
   write_console_msg (val_array);
   if (CfgGetImmadiate(0、CFGTAG _IPNet、1、1、sizeof (NA)、 (uint8 *)&nA)=sizeof (nA)
   {
       //是的,设备已配置,我们获得了 IP 地址/掩码*/
       NtIPN2Str (na.ipaddr、IPString);
       write_console_msg ("\n\n\rip Address    :");
       write_console_msg (IPString);
       //write_console_msg ("\n\n"r);
       NtIPN2Str (na.IPMask、IPString);
       write_console_msg ("\n\rip Mask       :");
       write_console_msg (IPString);
   }//结束 IF (CfgGetImmadiate(0)、CFGTAG _IPNet、1、1、sizeof (NA)、 (uint8 *)&nA)=sizeof (nA)
   if (CfgGetImmadiate(0、CFGTAG _route、0、1、sizeof (RT)、 (uint8 *)&RT)=sizeof (RT)
   {
       //是的,设备已配置,我们获得了 IP 地址/掩码*/
       NtIPN2Str (RT.IPGateAddr、IPString);
       Write_console_msg ("\n\n\r 网关地址:");
       write_console_msg (IPString);
   }//结束 IF (CfgGetImmadiate(0)、CFGTAG _IPNet、1、1、sizeof (NA)、 (uint8 *)&nA)=sizeof (nA)
   Semaphore_post (web_server_start_semaphore);
//end void enet_ip_add_hook (void)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我希望这两个帖子会有所帮助。

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

    您好、Charles、

    谢谢。 我查看了线程。 我已经能够获取并显示网关 IP。 我可以在源文件中将 GatewayIP 声明为全局外部字符*、并从中获取值或使用  

       if (CfgGetImmass调和(0、CFGTAG _route、0、1、sizeof (RT)、 (uint8 *)&RT)=sizeof (RT)
       {
           //是的,设备已配置,我们获得了 IP 地址/掩码*/
           NtIPN2Str (RT.IPGateAddr、IPString);
           Write_console_msg ("\n\n\r 网关地址:");
           write_console_msg (IPString);
       }//结束 IF (CfgGetImmadiate(0)、CFGTAG _IPNet、1、1、sizeof (NA)、 (uint8 *)&nA)=sizeof (nA)

    这两种方式都将打印出网关。 但是、在运行时设置网关仍有问题。 我能够成功设置 IP 和掩码、但网关不会改变。 这是我到目前为止拥有的东西

    您可以忽略变量 IP_Type。 我正在使用它进行其他测试。  

    我不能弄清楚我缺少的内容。  这是我从以下代码获得的输出。 0.0.0.0是我在 cfg 文件中设置的值。 它不会改变。。。   

    谢谢。

    AJ

    正在运行 Enet IP 添加挂钩...
    MTU           :1500
    MAC 地址   :0-1A-B6-2-81-CF
    IP 地址    :10.20.30.120
    IP 掩码       :255.255.255.0
    网关地址:0.0.0.0

    void enet_open_hook (void)

       CI_IPNet NA;
       句柄 hCfgIpAddr;
       CI_route   RT;
       句柄 hCfgGateAddr;
       write_console_msg ("\n\n\rRunning Enet open hook……");
       if (IP_Type = 1)
       {
           write_console_msg ("\n\n\r 设置静态 IP...");
           /*设置手册 IP 地址*/
           bzero (不适用、sizeof (不适用));
           na.ipaddr = inet_addr ("10.20.30.120");
           na.ipMask = inet_addr ("255.255.255.0);
           strcpy (na.Domain、"demo.net");
           NA.NetType = 0;
           /*获取当前静态 IP 条目*/
           CfgGetEntry (0、CFGTAG _IPNet、1、1、&hCfgIpAddr);
           /*删除当前静态 IP 条目*/
           CfgRemoveEntry (0、hCfgIpAddr);
           /*添加新的静态 IP 条目*/
           CfgAddEntry (0、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、 (uint8 *)不适用、0);

           bzero (&RT、sizeof (RT));
           rt.IPDestAddr = 0;
           rt.IPDestMask = 0;
           rt.IPGateAddr = inet_addr ("10.20.30.51");
           CfgGetEntry (0、CFGTAG _route、0、1、hCfgGateAddr);
           CfgRemoveEntry (0、hCfgGateAddr);
           CfgAddEntry (0、CFGTAG _route、0、0、
                   sizeof (CI_route)、(uint8 *)&RT、0);
       }//end if (IP_Type = 1)
       //semaphore_post (web_server_start_semaphore);
    }//end void enet_open_hook (void)
    /********* /

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

    我最后取得了一些进展。 至於这种做法的原因,我没有想到,但我希望有人能解释为何会这样。 我所做的是通过先在 IP 和掩码之前配置网关 IP 来反转配置顺序。 这是下面的代码。 如果我先配置 IP 和掩码、网关不会更改。 我只能通过如下所示的方式更改网关。

    我仍然不是100%满意、因为我不明白为什么它以这种方式工作、而不是像上一篇文章中所示的那样以其他方式工作。  

    此致、

    AJ

    正在运行 Enet IP 添加挂钩...
    MTU           :1500
    MAC 地址   :0-1A-B6-2-81-CF
    IP 地址    :10.20.30.120
    IP 掩码       :255.255.255.0
    网关地址:10.20.30.60
    void enet_open_hook (void)

       CI_IPNet NA;
       句柄 hCfgIpAddr;
       CI_route   RT;
       句柄 hCfgGateAddr;
       write_console_msg ("\n\n\rRunning Enet open hook……");
       if (IP_Type = 1)
       {
           write_console_msg ("\n\n\r 设置静态 IP...");
           bzero (&RT、sizeof (RT));
           rt.IPDestAddr = 0;
           rt.IPDestMask = 0;
           rt.IPGateAddr = inet_addr ("10.20.30.60");
           CfgGetEntry (0、CFGTAG _route、0、1、hCfgGateAddr);
           CfgRemoveEntry (0、hCfgGateAddr);
           CfgAddEntry (0、CFGTAG _route、0、0、sizeof (CI_route)、 (uint8 *)&RT、0);

           /*设置手册 IP 地址*/
           bzero (不适用、sizeof (不适用));
           na.ipaddr = inet_addr ("10.20.30.120");
           na.ipMask = inet_addr ("255.255.255.0);
           strcpy (na.Domain、"demo.net");
           NA.NetType = 0;
           /*获取当前静态 IP 条目*/
           CfgGetEntry (0、CFGTAG _IPNet、1、1、&hCfgIpAddr);
           /*删除当前静态 IP 条目*/
           CfgRemoveEntry (0、hCfgIpAddr);
           /*添加新的静态 IP 条目*/
           CfgAddEntry (0、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、 (uint8 *)不适用、0);
       }//end if (IP_Type = 1)
       //semaphore_post (web_server_start_semaphore);
    }//end void enet_open_hook (void)
    /********* /