工具/软件:TI-RTOS
所以... 仅仅是不能留下足够好的东西。
我现在让我的设备从 DHCP 获取它的 IP 和域。
我需要在此计算机上实施 SNTP 客户端、以获得正确的时间。
我是否可以通过任何方式获取 DHCP 提供的 SNTP 服务器的 IP?
它作为条目#4提供、但不确定如何检索它、或者我是否可以。
PS:不知为何、此页面上的标题设置为仅显示中文。 如何将它们改回、或者我可以更改吗?
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.
工具/软件:TI-RTOS
所以... 仅仅是不能留下足够好的东西。
我现在让我的设备从 DHCP 获取它的 IP 和域。
我需要在此计算机上实施 SNTP 客户端、以获得正确的时间。
我是否可以通过任何方式获取 DHCP 提供的 SNTP 服务器的 IP?
它作为条目#4提供、但不确定如何检索它、或者我是否可以。
PS:不知为何、此页面上的标题设置为仅显示中文。 如何将它们改回、或者我可以更改吗?
David、
我最后给你一个答复,但这不是一个简单的答复。
要从 DHCP 服务器获取 NTP 服务器地址、需要执行以下三个步骤:
1.使用 DHCP 选项请求 NTP 服务器地址
2.解析 DHCP 响应并解压缩选项 Reply (回复)
3.等待 NDK IP 地址挂钩,然后获取 NTP 地址
第一步是要启用 DHCP 选项的配置设置。 步骤2将由 NDK 堆栈线程处理。 您可以通过调用 NDK API 来检索 NTP 服务器地址来执行步骤3。
遗憾的是、我们在 NDK 中发现了与步骤1相关的错误;NDK 未实现步骤2;并且没有支持步骤3的 API。 但如果你如此倾向、我可以为你提供一个解决方案。
步骤1. 从 DHCP 服务器请求 NTP 服务器地址
有两个选项与时间服务器有关。 我不确定您想要哪一个。 如果需要、您可以参考 RFC2132来确定您需要哪一个。
启用这些选项的常规方法是将以下内容之一添加到应用程序配置脚本中。
时间服务器选项(RFC 代码#4)
VAR IP = xdc.useModule('ti.ndk.config.Ip');
ip.DHCPPT_TIME_Server = true;
网络时间协议服务器选项(RFC 代码#42)
VAR IP = xdc.useModule('ti.ndk.config.Ip');
ip.DHCPPT_NIS_TIME_Protocol_servers = true;
请注意、上面的名称拼写错误;它应该是 NTP 而不是 NIS。 但我们必须按照定义使用它。
但是、由于 NDK 中存在错误、这将不起作用。 另一种方法是在 NDK 中定义的 DHCPYPECode 数组中设置该选项的默认位,以启用该选项。 编辑以下文件:
/ti/ndk/nettools/dhcp/dhcptag.c
将标志 FlG_DEFAULT 添加到选项中。 这将默认启用该选项、并将包含在 DHCP Discover 数据包中。 例如,要启用 NTP 服务器选项,请按如下方式修改选项42:
4 | FLG_ISADDRESS | FLG_DEFAULT、// 42 - NIS 时间协议服务器*/
您需要重新构建 NDK 库才能使此更改生效(请参阅下文)。
步骤2. 解析 DHCP 响应并解压缩选项 Reply (回复)
当 NDK 收到 DHCP 响应时,将在函数 dhcpVerifyMessage()中解析数据包。 此函数已处理两个选项、但不处理时间服务器选项。 您可以添加以下将解析 NTP 服务器选项的 case 语句。 我已将第一个 IP 地址的值存储在全局变量中、因此您可以稍后访问它。 请注意,此选项可能会返回服务器地址列表。 我只保存第一个。 您需要修改代码以保存整个列表。 编辑以下文件:
/ti/ndk/nettools/dhcp/dhcppkt.c
在 dhcpVerifyMessage()函数之前定义全局变量:
IPN NDK_NTPServer = 0;
在 dhcpVerifyMessage()函数中添加以下 case 语句。
案例 DHCPPT_NIS_TIME_PROTOCOL_SERVERS:
TagLength =* PV++;
if (TagLength == 4)
bcopy( PV,&NDK_NTPServer,4 );
PV +=标志长度;
buffersize-= TagLength + 2;
中断;
您需要重新构建 NDK 库才能使此更改生效。
3.等待 NDK IP 地址挂钩,然后获取 NTP 地址
DHCP 服务器将在响应数据包中向您发送 NTP 服务器地址。 因此、NDK IP 地址挂钩是一个获取它的好地方。
外部 IPN NDK_NTPServer;
空 netAddrHook (uint32_t addr、uint32_t IfIdx、uint32_t fADD)
{
字符 IPString[50];
NtIPN2Str (NDK_NTPServer、IPString);
System_printf ("NTP 服务器:%s\n"、IPString);
}
要重建 NDK 库、请使用以下链接上的指令:
您的 TI-RTOS TivaC 安装中会随附 NDK 产品。 您可以在产品文件夹中找到它:
/tirtos_tivac_2_16_01_14/products/NDK_2_25_00_09
如果您有任何疑问、请告诉我。
~Ramsey
电源 关于论坛上的中文字体。 右上角的按钮将带您进入中国网站。 如果您误去了那里,同一个按钮会返回到美国网站。 也许您是偶然去的。