第 4 章 - Azure RTOS NetX Duo DHCPv6 客户端服务

本章按字母顺序介绍了所有 Azure RTOS NetX Duo DHCPv6 客户端服务(如下所列)。

在以下 API 说明的“返回值”部分中,以粗体显示的值不受定义用于禁用 API 错误检查的 NX_DISABLE_ERROR_CHECKING 影响,而不以粗体显示的值则完全禁用。

nx_dhcpv6_client_create

创建 DHCPv6 客户端实例

原型

UINT  nx_dhcpv6_client_create(
    NX_DHCPV6 *dhcpv6_ptr, 
    NX_IP *ip_ptr,
    CHAR *name_ptr, 
    NX_PACKET_POOL *packet_pool_ptr, 
    VOID *stack_ptr,
    ULONG stack_size,
    VOID (*dhcpv6_state_change_notify)(
        struct NX_DHCPV6_STRUCT *dhcpv6_ptr, 
        UINT old_state,
        UINT new_state), 
    VOID (*dhcpv6_server_error_handler)(
        struct NX_DHCPV6_STRUCT *dhcpv6_ptr, 
        UINT op_code, UINT status_code, 
        UINT message_type));

说明

此服务用于创建 DHCPv6 客户端实例,包括回叫函数。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 控制块的指针

  • ip_ptr:指向客户端 IP 实例的指针

  • name_ptr:指向 DHCPv6 实例名称的指针

  • packet_pool_ptr:指向客户端数据包池的指针

  • stack_ptr:指向客户端堆栈内存的指针

  • stack_size:客户端堆栈内存大小

  • dhcpv6_state_change_notify:指向在客户端向服务器发起新的 DHCPv6 请求时调用的回叫函数的指针

  • dhcpv6_server_error_handler:指向在客户端收到来自服务器的错误状态时调用的回叫函数的指针

返回值

  • NX_SUCCESS (0x00):已成功创建客户端

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_DHCPV6_PARAM_ERROR (0xE93):非指针输入无效

允许调用自

线程数

示例

/* Create a DHCPv6 client instance without specifying link local or preferred
   global IP address.  */
status =  nx_dhcpv6_client_create(&dhcp_0, &ip_0, "DHCPv6 Client", &pool_0,
                                  NULL, NULL, pointer, 2048,        
                                  dhcpv6_state_change_notify, 
                                  dhcpv6_server_error_handler);

/* If status is NX_SUCCESS a DHCPv6 client instance was successfully
   created.  */

另请参阅

  • nx_dhcpv6_client_delete

nx_dhcpv6_client_delete

删除 DHCPv6 客户端实例

原型

UINT nx_dhcpv6_client_delete(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于删除之前创建的 DHCPv6 客户端实例。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功删除 DHCPv6 客户端实例

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_DHCPV6_PARAM_ERROR (0xE93):非指针输入无效

允许调用自

线程数

示例

/* Delete a DHCPv6 client instance.  */
status =  nx_dhcpv6_client_delete(&my_dhcp);

/* If status is NX_SUCCESS the DHCPv6 client instance was successfully
   deleted.  */

另请参阅

  • nx_dhcpv6_client_create

nx_dhcpv6_client_set_interface

设置客户端与 DHCPv6 服务器通信的网络接口

原型

UINT    nx_dhcpv6_client_set_interface(
    NX_DHCPV6 *dhcpv6_ptr, 
    UINT *interface_index);

说明

此服务用于将客户端与 DHCPv6 服务器通信的网络接口设置为指定的输入接口索引。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • interface_index:网络接口索引

返回值

  • NX_SUCCESS (0x00):已成功设置接口

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_INVALID_INTERFACE (0x4C):接口索引输入无效

允许调用自

线程数

示例

/* Set the client interface for DHCPv6 communication with the Server to 
   the secondary interface (1). */

UINT index = 1;
status = nx_dhcpv6_client_set_interface(&dhcp_0, index);

/* If status is NX_SUCCESS, the Client successfully set 
   the DHCPv6 network interface.  */

另请参阅

  • nx_dhcpv6_client _create
  • nx_dhcpv6_start

nx_dhcpv6_client_set_destination_address

设置 DHCPv6 消息应发送到的目标地址

原型

UINT nx_dhcpv6_client_set_destination_address(
    NX_DHCPV6 *dhcpv6_ptr,
    NXD_ADDRESS *destination_address);

说明

此服务用于设置 DHCPv6 消息应发送到的目标地址。 默认为 ALL_DHCP_Relay_Agents_and_Servers(FF02::1:2)。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • destination_address:目标地址

返回值

  • NX_SUCCESS (0x00):已成功设置接口

  • NX_PTR_ERROR (0x07):指针输入无效

  • NX_DHCPV6_PARAM_ERROR (0xE93):参数错误

允许调用自

线程数

示例

/* Set the destination address where DHCPv6 message should be sent to. */

NXD_ADDRESS dest_address; /* Set the destination address.  */

status = nx_dhcpv6_client_set_destination_address(&dhcp_0, &dest_address);

/* If status is NX_SUCCESS, the Client successfully set the destination address. */

另请参阅

  • nx_dhcpv6_client _create
  • nx_dhcpv6_start

nx_dhcpv6_create_client_duid

创建客户端 DUID 对象

原型

UINT nx_dhcpv6_create_client_duid(
    NX_DHCPV6 *dhcpv6_ptr,
    UINT duid_type, UINT hardware_type,
    ULONG time);

说明

此服务用于使用输入参数来创建客户端 DUID。 如果没有提供时间输入,并且 DUID 类型表示有时间的链路层,那么此函数将提供包含唯一性随机因素的时间。 不支持供应商分配的(企业)DUID 类型。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • duid_type:DUID 类型(硬件、企业等)

  • hardware_type:网络硬件,例如 IEEE 802

  • time:用于创建唯一标识符的值

返回值

  • NX_SUCCESS (0x00):已成功创建客户端 DUID

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_DHCPV6_PARAM_ERROR (0xE93):非指针输入无效

  • NX_DHCPV6_UNSUPPORTED_DUID_TYPE (0xE98):DUID 类型未知或不受支持

  • NX_DHCPV6_UNSUPPORTED_DUID_HW_TYPE (0xE99):DUID 硬件类型未知或不受支持

允许调用自

线程数

示例

/* Create the Client DUID from the supplied input.
   The time field is left NULL so the DHCPv6 client will provide one.  */
status = nx_dhcpv6_create_client_duid(&dhcp_0, NX_DHCPV6_DUID_TYPE_LINK_TIME,
                                      NX_DHCPV6_HW_TYPE_IEEE_802, 0)

/* If status is NX_SUCCESS the client DUID was successfully created.  */

另请参阅

  • nx_dhcpv6_create_client_ia
  • nx_dhcpv6_create_client_iana
  • nx_dhcpv6_create_server_duid

nx_dhcpv6_create_client_ia

向客户端添加标识关联

原型

UINT nx_dhcpv6_create_client_ia(
    NX_DHCPV6 *dhcpv6_ptr,
    NXD_ADDRESS *ipv6_address,
    ULONG preferred_lifetime,
    ULONG valid_lifetime);

说明

此服务与 nx_dhcpv6_add_client_ia 服务完全相同。 它使用所提供的参数来填充客户端记录,从而添加客户端标识关联。 若要请求获取最长首选生存期和有效生存期,请将这些参数设置为无穷大。 若要将多个 IA 添加到 DHCPv6 客户端,请将 NX_DHCPV6_MAX_IA_ADDRESS 的值设置为大于默认值 1。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • ipv6_address:指向 NetX Duo IP 地址块的指针

  • preferred_lifetime:IP 地址在多长时间后被弃用

  • valid_lifetime:IP 地址在多长时间后到期

返回值

  • NX_SUCCESS (0x00):已成功添加客户端 IA

  • NX_DHCPV6_IA_ADDRESS_ALREADY_EXIST (0xEAF):IA 地址重复

  • NX_DHCPV6_REACHED_MAX_IA_ADDRESS (0xEAE):IA 超过了客户端可以存储的最大 IA

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_DHCPV6_INVALID_IA_ADDRESS (0xEA4):IA 中的 IA 地址无效(例如,null)

  • NX_DHCPV6_PARAM_ERROR (0xE93):非指针输入无效

允许调用自

线程数

示例

/* Add an Client IA using the supplied input.   */
status = nx_dhcpv6_create_client_ia(&dhcp_0, &ipv6_address, 
NX_DHCPV6_PREFERRED_LIFETIME, NX_DHCPV6_VALID_LIFETIME);

/* If status is NX_SUCCESS the client IA was successfully added.  */

另请参阅

  • nx_dhcpv6_add_client_duid
  • nx_dhcpv6_create_server_duid
  • nx_dhcpv6_create_client_iana

nx_dhcpv6_create_client_iana

创建客户端标识关联(非临时)

原型

UINT nx_dhcpv6_create_client_iana(
    NX_DHCPV6 *dhcpv6_ptr, 
    UINT IA_ident,
    ULONG T1, ULONG T2);

说明

此服务用于根据所提供的参数来创建客户端非临时标识关联 (IANA)。 若要在 DHCPv6 客户端请求中将 T1 和 T2 时间设置为最大值(无穷大),请将这些参数设置为 NX_DHCPV6_INFINITE_LEASE。

注意

客户端只有一个 IANA。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • IA_ident:标识关联唯一标识符

  • T1:客户端何时必须启动 IPv6 地址续订

  • T2:客户端何时必须启动 IPv6 地址重新绑定

返回值

  • NX_SUCCESS (0x00):已成功创建 IANA

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_DHCPV6_PARAM_ERROR (0xE93):非指针输入无效

允许调用自

线程数

示例

/* Create the Client IANA from the supplied input.  */
status = nx_dhcpv6_create_client_iana(&dhcp_0, DHCPV6_IA_ID, DHCPV6_T1,   
                                      DHCPV6_T2);

/* If status is NX_SUCCESS the client IANA was successfully created.  */

另请参阅

  • nx_dhcpv6_create_client_duid
  • nx_dhcpv6_create_server_duid
  • nx_dhcpv6_add_client_ia

nx_dhcpv6_add_client_ia

向客户端添加标识关联

原型

UINT nx_dhcpv6_add_client_ia(
    NX_DHCPV6 *dhcpv6_ptr, 
    NXD_ADDRESS *ipv6_address, 
    ULONG preferred_lifetime, 
    ULONG valid_lifetime);

说明

此服务用于使用所提供的参数来填充客户端记录,从而添加客户端标识关联。 若要请求获取最长首选生存期和有效生存期,请将这些参数设置为无穷大。 若要将多个 IA 添加到 DHCPv6 客户端,请将 NX_DHCPV6_MAX_IA_ADDRESS 的值设置为大于默认值 1。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • ipv6_address:指向 NetX Duo IP 地址块的指针

  • preferred_lifetime:IP 地址在多长时间后被弃用

  • valid_lifetime:IP 地址在多长时间后到期

返回值

  • NX_SUCCESS (0x00):已成功添加客户端 IA

  • NX_DHCPV6_IA_ADDRESS_ALREADY_EXIST (0xEAF):IA 地址重复

  • NX_DHCPV6_REACHED_MAX_IA_ADDRESS (0xEAE):IA 超过了客户端可以存储的最大 IA

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_DHCPV6_INVALID_IA_ADDRESS (0xEA4):IA 中的 IA 地址无效(例如,null)

  • NX_DHCPV6_PARAM_ERROR (0xE93):非指针输入无效

允许调用自

线程数

示例

/* Add an Client IA using the supplied input.   */
status = nx_dhcpv6_add_client_ia(&dhcp_0, &ipv6_address, 
								 NX_DHCPV6_PREFERRED_LIFETIME,
                                 NX_DHCPV6_VALID_LIFETIME);

/* If status is NX_SUCCESS the client IA was successfully added.  */

另请参阅

  • nx_dhcpv6_create_client_duid
  • nx_dhcpv6_create_server_duid
  • nx_dhcpv6_create_client_iana

nx_dhcpv6_get_client_duid_time_id

从客户端 DUID 中检索时间 ID

原型

UINT nx_dhcpv6_get_client_duid_time_id(
    NX_DHCPV6 *dhcpv6_ptr,
    ULONG *time_id);

说明

此服务用于从客户端 DUID 中检索时间 ID 字段。 应用程序必须先调用 nx_dhcpv6_create_client_duid 来填充 DHCPv6 客户端实例中的客户端 DUID,否则此字段的值将为 null。 目的是让应用程序保存此数据,并跨重启向服务器呈现相同的客户端 DUID(包括时间字段)。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • time_id:指向客户端 DUID 时间字段的指针

返回值

  • NX_SUCCESS (0x00):已成功检索 IP 租用数据

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Retrieve the time ID from the Client DUID.  */
status = nx_dhcpv6_get_client_duid_time_id(&dhcp_0, &time_ID);

/* If status is NX_SUCCESS the time ID was retrieved. */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_time_lease_data
  • nx_dhcpv6_get_other_option_data
  • nx_dhcpv6_get_time_accrued

nx_dhcpv6_get_IP_address

检索客户端的全局 IPv6 地址

原型

UINT nx_dhcpv6_get_IP_address(
    NX_DHCPV6 *dhcpv6_ptr, 
    NXD_ADDRESS *ip_address);

说明

此服务用于检索客户端的全局 IPv6 地址。 如果客户端没有有效的地址,则返回错误状态。 如果客户端有多个全局 IPv6 地址,则返回主 IPv6 地址。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • ip_address:指向 IPv6 地址的指针

返回值

  • NX_SUCCESS (0x00):已成功分配 IPv6 地址

  • NX_DHCPV6_IA_ADDRESS_NOT_VALID (0xEAD):IPv6 地址无效

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

UINT address_status;
UINT address_index;

/* Retrieve the client’s assigned IP address.  */
status = nx_dhcpv6_get_IP_address(&dhcp_0, &ipv6_address);

/* If status is NX_SUCCESS the client IP address was assigned.
   Now register it with NetX Duo on the primary interface (index zero). 
   The address index is returned in the address_index field*/
status = nxd_ipv6_address_set(&ip_0, 0, &ipv6_address, 64, &address_index);

另请参阅

  • nx_dhcpv6_get_lease_time_data
  • nx_dhcpv6_get_client_duid_time_id
  • nx_dhcpv6_get_other_option_data
  • nx_dhcpv6_get_time_accrued

nx_dhcpv6_get_lease_time_data

检索客户端的 IA 地址租用时间数据

原型

UINT nx_dhcpv6_get_lease_time_data(
    NX_DHCPV6 *dhcpv6_ptr,
    ULONG *T1, 
    ULONG *T2,
    ULONG *preferred_lifetime, 
    ULONG *valid_lifetime);

说明

此服务用于检索客户端的全局 IA 地址时间数据。 如果客户端 IA 地址状态无效,则时间数据被设置为零,并返回“成功完成”状态。 如果客户端有多个全局 IPv6 地址,则返回主 IA 地址数据。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • T1:指向 IA 地址续订时间的指针

  • T2:指向 IA 地址重新绑定时间的指针

  • preferred_lifetime:指向 IA 地址弃用时间的指针

  • valid_lifetime:指向 IA 地址到期时间的指针

返回值

  • NX_SUCCESS (0x00):已成功检索 IA 租用数据

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Retrieve the client’s assigned IA lease data.  */
status = nx_dhcpv6_get_lease_time_data(&dhcp_0, &T1, &T2, &preferred_lifetime, 
                                       &valid_lifetime);

/* If status is NX_SUCCESS the client IA address lease data was retrieved.  */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_client_duid_time_id
  • nx_dhcpv6_get_other_option_data
  • nx_dhcpv6_get_time_accrued
  • nx_dhcpv6_get_iana_lease_time

nx_dhcpv6_get_iana lease_time

检索客户端的 IANA 租用时间数据

原型

UINT nx_dhcpv6_get_iana_lease_time(
    NX_DHCPV6 *dhcpv6_ptr,
    ULONG *T1, 
    ULONG *T2);

说明

此服务用于检索客户端的全局 IA-NA 租用时间数据(T1 和 T2)。 如果客户端 IA-NA 地址都没有有效的地址状态,则时间数据被设置为零,并返回“成功完成”状态。 如果客户端有多个全局 IPv6 地址,则返回主 IA 地址数据。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • T1:指向租用续订开始时间的指针

  • T2:指向租用重新绑定开始时间的指针

返回值

  • NX_SUCCESS (0x00):已成功检索 IANA 租用数据

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Retrieve the client’s assigned IANA lease data.  */
status = nx_dhcpv6_get_iana_lease_time(&dhcp_0, &T1, &T2);

/* If status is NX_SUCCESS the client IA address lease data was retrieved.  */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_client_duid_time_id
  • nx_dhcpv6_get_other_option_data
  • nx_dhcpv6_get_time_accrued
  • nx_dhcpv6_get_lease_time_data

nx_dhcpv6_get_valid_ip_address_count

检索客户端的有效 IA 地址计数

原型

UINT nx_dhcpv6_get_valid_ip_address_count(
    NX_DHCPV6 *dhcpv6_ptr, 
    UINT *address_count);

说明

此服务用于检索客户端的有效 IPv6 地址计数。 有效的 IPv6 地址被绑定(分配)到客户端,并向 IP 实例注册。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • address_count:指向要返回的地址计数的指针

返回值

  • NX_SUCCESS (0x00):已成功检索 IANA 租用数据

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

UINT address_count; 

/* Retrieve the count of valid IA-NA addresses.  */
status = nx_dhcpv6_get_valid_ip_address_count(&dhcp_0, &address_count);

/* If status is NX_SUCCESS the client IA address count was retrieved.  */

nx_dhcpv6_get_valid_ip_address_lease_time

按地址索引检索客户端 IA 数据

原型

UINT nx_dhcpv6_get_valid_ip_address_lease_time(
    NX_DHCPV6 *dhcpv6_ptr, 
    UINT address_index,
    NXD_ADDRESS *ip_address,
    ULONG *preferred_lifetime,
    ULONG *valid_lifetime);

说明

此服务用于按地址索引检索客户端的 IA 地址和租用数据。 如果所提供的索引无效,或索引处的 IPv6 地址无效,则此服务返回 NX_DHCPV6_IA_ADDRESS_NOT_VALID 错误状态。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • address_index:DHCPv6 IA 表的索引

  • ip_address:指向要检索的 IPv6 地址的指针

  • preferred_lifetime:指向 IA 地址弃用时间的指针

  • valid_lifetime:指向 IA 地址到期时间的指针

返回值

  • NX_SUCCESS (0x00):已成功检索 IANA 数据

  • NX_DHCPV6_IA_ADDRESS_NOT_VALID (0xEAD):索引无效或所提供的索引处的 IPv6 地址无效

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

UINT address_index = 1; 
NXD_ADDRESS *ip_address;

/* Retrieve the IPv6 address, and valid and preferred lifetime for the IA record
   Saved at index 1 in the DHCPv6 table.  */
status = nx_dhcpv6_get_valid_ip_address_lease_time(&dhcp_0, address_index, 
                                                   &ip_address, 
                                                   &preferred_lifetime,  
                                                   &valid_lifetime);

/* If status is NX_SUCCESS the client IA address and lease data were retrieved.  */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_iana_lease_time
  • nx_dhcpv6_get_lease_time_data

nx_dhcpv6_get_DNS_server_address

检索 DNS 服务器地址

原型

UINT nx_dhcpv6_get_DNS_server_address(
    NX_DHCPV6 *dhcpv6_ptr,
    UINT index,
    NXD_ADDRESS *server_address);

说明

此服务用于在客户端列表中指定的索引处检索 DNS 服务器 IPv6 地址数据。 如果列表不包含索引处的服务器地址,则返回错误。 索引不得超过由用户可配置选项 NX_DHCPV6_NUM_DNS_SERVERS 指定的 DNS 服务器列表的大小。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • index:DNS 服务器列表的索引

  • server_address:指向服务器地址缓冲区的指针

返回值

  • NX_SUCCESS (0x00):已成功检索地址

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Retrieve the DNS server at the specified index in the list. */

UINT index = 0;
NXD_ADDRESS server_address;


        status = nx_dhcpv6_get_DNS_server_address(&dhcp_0, index, &server_address);

/* If status == NX_SUCCESS, the DNS server IP address successfully retrieved. */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_lease_time_data
  • nx_dhcpv6_get_time_accrued

nx_dhcpv6_get_other_option_data

检索 DHCPv6 选项数据

原型

UINT  nx_dhcpv6_get_other_option_data(
    NX_DHCPV6 *dhcpv6_ptr, 
    UINT option_code,
    UCHAR *buffer);

说明

此服务用于从指定选项代码的 DHCPv6 消息中检索 DHCPv6 选项数据。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • option 代码:要检索的数据的选项代码

  • buffer:指向要将数据复制到的缓冲区的指针

返回值

  • NX_SUCCESS (0x00):已成功检索选项数据

  • NX_DHCPV6_UNKNOWN_OPTION (0xEAB):选项代码未知/不受支持

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_DHCPV6_PARAM_ERROR (0xE93):非指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Retrieve the option data specified by the input option code. */
status = nx_dhcpv6_get_other_option_data(&dhcp_0, option_code, buffer);

/* If status is NX_SUCCESS the option data was retrieved. */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_lease_time_data
  • nx_dhcpv6_get_time_accrued

nx_dhcpv6_get_time_accrued

检索客户端 IP 地址租用的应计时间

原型

UINT nx_dhcpv6_get_time_accrued(
    NX_DHCPV6 *dhcpv6_ptr,
    ULONG *time_accrued);

说明

此服务用于检索客户端 IPv6 地址租用的应计时间。 此函数检查分配给客户端的所有 IPv6 地址中是否有第一个有效地址。 如果找不到有效地址,则返回值为零的应计时间。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • time_accrued:指向 IP 租用的应计时间的指针

返回值

  • NX_SUCCESS (0x00):已成功检索应计时间

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Retrieve time accrued time on the Client address lease. */
status = nx_dhcpv6_get_time_accrued(&dhcp_0, &time_accrued);

/* If status is NX_SUCCESS the time accrued on the client IP address 
   lease was retrieved. */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_other_option_data
  • nx_dhcpv6_get_lease_time_data
  • nx_dhcpv6_set_time_accrued

nx_dhcpv6_get_time_server_address

检索时间服务器地址

原型

UINT  nx_dhcpv6_get_time_server_address(
    NX_DHCPV6 *dhcpv6_ptr,
    UINT index, 
    NXD_ADDRESS *server_address);

说明

此服务用于在客户端列表中指定的索引处检索时间服务器 IPv6 地址数据。 如果列表不包含索引处的服务器地址,则返回错误。 索引不得超过由用户可配置选项 NX_DHCPV6_NUM_TIME_SERVERS 指定的时间服务器列表的大小。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • index:时间服务器列表的索引

  • server_address:指向服务器地址缓冲区的指针

返回值

  • NX_SUCCESS (0x00):已成功检索地址

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Retrieve the Time server at the specified index in the list. */

UINT index = 0;
NXD_ADDRESS server_address;


      status = nx_dhcpv6_get_time_server_address(&dhcp_0, index, &server_address);

/* If status == NX_SUCCESS, the Time server IP address successfully retrieved. */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_lease_time_data
  • nx_dhcpv6_get_time_accrued
  • nx_dhcpv6_get_DNS_server_address

nx_dhcpv6_reinitialize

从 IP 表中删除客户端 IP 地址

原型

UINT nx_dhcpv6_reinitialize(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于重新初始化客户端,以重启 DHCPv6 状态机,并重新运行 DHCPv6 协议。 如果客户端之前没有启动 DHPCv6 状态机或没有被分配任何 IPv6 地址,则不需要这样做。 保存到 DHCPv6 客户端的地址和向 IP 实例注册的地址都将被清除。

注意

应用程序仍必须使用 nx_dhcpv6_start 服务来启动 DHCPv6 客户端,并通过调用 nx_dhcpv6_request_solicit 来开始请求分配 IPv6 地址。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功删除地址

  • NX_DHCPV6_ALREADY_STARTED (0xE91):DHCPv6 客户端已在运行

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Clear the assigned IP address(es) from the Client and the IP instance */
status = nx_dhcpv6_reinitialize(&dhcp_0);

/* If status is NX_SUCCESS the Client IP address was successfully removed. */

另请参阅

  • nx_dhcpv6_stop
  • nx_dhcpv6_start

nx_dhcpv6_request_confirm

处理客户端的 CONFIRM 状态

原型

UINT nx_dhcpv6_request_confirm(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于发送 CONFIRM 请求。 如果收到来自服务器的答复,那么 DHCPv6 客户端就会使用收到的数据来更新其租用参数。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功发送并处理 CONFIRM 消息

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Send a CONFIRM message to the Server. */
status = nx_dhcpv6_request_confirm(&dhcp_0);

/* If status is NX_SUCCESS the Client successfully sent the CONFIRM message. */

另请参阅

  • nx_dhcpv6_request_inform_request
  • nx_dhcpv6_request_release
  • nx_dhcpv6_request_solicit

nx_dhcpv6_request_inform_request

处理客户端的 INFORM REQUEST 状态

原型

UINT nx_dhcpv6_request_inform_request(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于发送 INFORM REQUEST 消息。 如果收到了答复,则处理答复以确定它是否有效,且服务器是否授予了请求。 然后,根据需要使用服务器信息来更新客户端实例。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功创建并处理 INFORM REQUEST 消息

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Send an INFORM REQUEST message to the server. */
status = nx_dhcpv6_request_inform_request(&dhcp_0);

/* If status is NX_SUCCESS the Client successfully sent the INFORM REQUEST 
   message and processed the reply. */

另请参阅

  • nx_dhcpv6_request_confirm

nx_dhcpv6_request_option_DNS_server

向 DHCPv6 选项请求添加 DNS 服务器选项

原型

UINT nx_dhcpv6_request_option_DNS_server(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于向 DHCPv6 选项请求添加用于请求 DNS 服务器信息的选项。 如果服务器答复包括 DNS 服务器数据,则客户端会存储 DNS 服务器(如果有空间的话)。 客户端可以存储的 DNS 服务器数量由可配置选项 NX_DHCPV6_NUM_DNS_SERVERS(默认值为 2)决定。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已添加 DNS 服务器选项

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Set the DNS server option in Client requests. */
nx_dhcpv6_request_option_DNS_server(&dhcp_0, NX_TRUE);

另请参阅

  • nx_dhcpv6_request_option_domain_name
  • nx_dhcpv6_request_option_time_server
  • nx_dhcpv6_request_option_timezone

nx_dhcpv6_request_option_FQDN

向选项请求列表添加完全限定的域名选项

原型

UINT nx_dhcpv6_request_option_FQDN(
    NX_DHCPV6 *dhcpv6_ptr,
    UCHAR *domain_name, 
    UINT op);

说明

此服务用于向 DHCPv6 选项请求添加用于添加客户端完全限定的域名的选项。 若要添加 FQDN 选项,有三种选择:

  • NX_DHCPV6_CLIENT_DESIRES_UPDATE_AAAA_RR 0:为客户端使用的 FQDN 和地址更新 FQDN 到 IPv6 地址的映射。

  • NX_DHCPV6_CLIENT_DESIRES_SERVER_DO_DNS_UPDATE 1:为客户端使用的 FQDN 和地址将 FQDN 到 IPv6 地址的映射更新到服务器中。

  • NX_DHCPV6_CLIENT_DESIRES_NO_SERVER_DNS_UPDATE 2:请求服务器不代表客户端执行 DNS 更新。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • domain_name:保留域名的字符串

  • op:要应用的 FQDN 选项的类型(见上面的列表)

返回值

  • NX_SUCCESS (0x00) :已添加 FQDN 选项

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Set the FQDN option in Client DHCPv6 request. */
nx_dhcpv6_request_option_FQDN(&dhcp_0, “DHCPv6_Client”, 
							  NX_DHCPV6_CLIENT_DESIRES_NO_SERVER_DNS_UPDATE);

另请参阅

  • nx_dhcpv6_request_option_domain_name
  • nx_dhcpv6_request_option_time_server
  • nx_dhcpv6_request_option_timezone

nx_dhcpv6_request_option_domain_name

向 DHCPv6 选项请求添加域名选项

原型

UINT nx_dhcpv6_request_option_domain_name(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于向客户端请求消息中的选项请求添加域名选项。 如果服务器答复包含域名数据,且域名的大小不超过用于保留域名的缓冲区大小,那么客户端会存储域名信息。 此缓冲区大小是可配置选项 (NX_DHCPV6_DOMAIN_NAME_BUFFER_SIZE),默认值为 30 字节。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已设置域名选项

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Set the domain name option in Client requests. */
nx_dhcpv6_request_option_domain_name(&dhcp_0, NX_TRUE);

另请参阅

  • nx_dhcpv6_request_option_DNS_server
  • nx_dhcpv6_request_option_time_server
  • nx_dhcpv6_request_option_timezone

nx_dhcpv6_request_option_time_server

将时间服务器数据设置为选项请求

原型

UINT nx_dhcpv6_request_option_time_server(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于向客户端请求消息的选项请求添加用于请求时间服务器信息的选项。 如果服务器答复包含时间服务器数据,则客户端会存储时间服务器(如果有空间的话)。 客户端可以存储的时间服务器数量由可配置选项

NX_DHCPV6_NUM_TIME _SERVERS(默认值为 1)决定。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已添加时间服务器选项

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Set the time server option in Client request messages. */
nx_dhcpv6_request_option_time_server(&dhcp_0, NX_TRUE);

另请参阅

  • nx_dhcpv6_request_option_DNS_server
  • nx_dhcpv6_request_option_domain_name
  • nx_dhcpv6_request_option_timezone

nx_dhcpv6_request_option_timezone

将时区数据设置为选项请求

原型

UINT nx_dhcpv6_request_option_timezone(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于向客户端选项请求添加用于请求时区信息的选项。 如果服务器答复包含时区数据,且时区的大小不超过用于保留时区的缓冲区大小,那么客户端会存储时区信息。 此缓冲区大小是可配置选项 (NX_DHCPV6_ TIME_ZONE _BUFFER_SIZE),默认值为 10 字节。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已添加时区选项

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Set time zone option in Client request messages. */
nx_dhcpv6_request_option_timezone(&dhcp_0, NX_TRUE);

另请参阅

  • nx_dhcpv6_request_option_DNS_server
  • nx_dhcpv6_request_option_domain_name
  • nx_dhcpv6_request_option_time_server

nx_dhcpv6_request_release

发送 DHCPv6 RELEASE 消息

原型

UINT nx_dhcpv6_request_release(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于在客户端网络上发送 RELEASE 消息。 如果消息发送成功,则返回成功状态。 成功完成并不意味着客户端已收到响应或已经被授予 IPv6 地址。 DHCPv6 客户端线程任务等待 DHCPv6 服务器的答复。 如果收到了答复,它会检查答复是否有效,并将数据存储到客户端记录中。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功发送 RELEASE 消息

  • NX_DHCPV6_NOT_STARTED (0xE92):DHCPv6 客户端任务未启动

  • NX_DHCPV6_IA_ADDRESS_NOT_VALID (0xEAD):地址未绑定到客户端

  • NX_INVALID_INTERFACE (0x4C):在 IP 地址表中找不到

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Send an RELEASE message to the Server. */
status = nx_dhcpv6_request_release(&dhcp_0);

/* If status is NX_SUCCESS the Client successfully sent the RELEASE message. */

另请参阅

  • nx_dhcpv6_request_confirm
  • nx_dhcpv6_request_inform_request
  • nx_dhcpv6_request_solicit

nx_dhcpv6_request_solicit

发送 SOLICIT 消息

原型

UINT nx_dhcpv6_request_solicit(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于在网络上发送 SOLICIT 消息。 如果消息发送成功,则返回成功状态。 成功完成并不意味着客户端已收到响应或已经被授予 IPv6 地址。 DHCPv6 客户端线程任务等待 DHCPv6 服务器的答复(ADVERTISE 消息)。 如果收到了答复,它会检查答复是否有效,将数据存储到客户端记录中,并将客户端提升为 REQUEST 状态。

注意

如果设置了“快速提交”选项,那么 DHCPv6 客户端会在收到有效的服务器 ADVERTISE 消息时直接进入 BOUND 状态。 有关更多详情,请参阅 nx_dhcpv6_request_solicit_rapid 的服务说明。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功发送 SOLICIT 消息

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Send an SOLICIT message to the server. */
status = nx_dhcpv6_request_solicit(&dhcp_0);

/* If status is NX_SUCCESS the Client successfully sent the SOLICIT message. */

nx_dhcpv6_request_solicit_rapid

使用“快速提交”选项发送 SOLICIT 消息

原型

UINT nx_dhcpv6_request_solicit_rapid(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于在设置了“快速提交”选项的网络上发送 SOLICIT 消息。 如果消息发送成功,则返回成功状态。 成功完成并不意味着客户端已收到响应或已经被授予 IPv6 地址。 DHCPv6 客户端线程任务等待 DHCPv6 服务器的答复(ADVERTISE 消息)。 如果收到了答复,它会检查答复是否有效,将数据存储到客户端记录中,并将客户端提升为 BOUND 状态。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功发送 SOLICIT 消息

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Send an SOLICIT message to the server. */
status = nx_dhcpv6_request_solicit_rapid(&dhcp_0);

/* If status is NX_SUCCESS the Client successfully sent the SOLICIT message. */

另请参阅

  • nx_dhcpv6_request_solicit
  • nx_dhcpv6_request_confirm
  • nx_dhcpv6_request_inform_request
  • nx_dhcpv6_request_release

nx_dhcpv6_resume

恢复 DHCPv6 客户端任务

原型

UINT nx_dhcpv6_resume(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于恢复 DHCPv6 客户端线程任务。 当前的 DHCPv6 客户端状态(例如,BOUND、SOLICIT)将被处理

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功恢复客户端任务

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Resume the DHCPv6 Client task. */
status = nx_dhcpv6_resume(&dhcp_0);

/* If status is NX_SUCCESS the Client thread task successfully resumed. */

另请参阅

  • nx_dhcpv6_start
  • nx_dhcpv6_stop
  • nx_dhcpv6_suspend

nx_dhcpv6_set_ time_accrued

设置客户端 IP 地址租用的应计时间

原型

UINT nx_dhcpv6_set_time_accrued(
    NX_DHCPV6 *dhcpv6_ptr,
    ULONG time_accrued);

说明

此服务用于设置客户端的全局 IP 地址自被服务器分配以来的应计时间。 只有在客户端当前绑定到已分配的 IPv6 地址时,才应使用此服务。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

  • time_accrued:IP 租用的应计时间

返回值

  • NX_SUCCESS (0x00):已成功设置应计时间

  • NX_PTR_ERROR (0x16):指针输入无效

获准方式

线程数

示例

/* Set time accrued since client’s assigned IP address was assigned. */
status = nx_dhcpv6_set_time_accrued(&dhcp_0, time_accrued);

/* If status is NX_SUCCESS the time accrued on the client IP address lease was 
   successfully set. */

另请参阅

  • nx_dhcpv6_get_IP_address
  • nx_dhcpv6_get_other_option_data
  • nx_dhcpv6_get_lease_time_data
  • nx_dhcpv6_get_time_accrued

nx_dhcpv6_start

启动 DHCPv6 客户端任务

原型

UINT nx_dhcpv6_start(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于启动 DHCPv6 客户端任务,并让客户端准备好运行 DHCPv6 协议。 它验证客户端实例是否有足够的信息(如客户端 DUID),创建并绑定 UDP 套接字来发送和接收 DHCPv6 消息,并激活计时器来跟踪会话时间以及当前 IPv6 租用的到期时间。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功启动客户端

  • NX_DHCPV6_MISSING_REQUIRED_OPTIONS (0xEA9):客户端缺少必需选项

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Start the DHCPv6 Client task. */
status = nx_dhcpv6_start(&dhcp_0);

/* If status is NX_SUCCESS the Client successfully started. */

另请参阅

  • nx_dhcpv6_resume
  • nx_dhcpv6_suspend
  • nx_dhcpv6_stop
  • nx_dhcpv6_reinitialize

nx_dhcpv6_stop

停止 DHCPv6 客户端任务

原型

UINT nx_dhcpv6_stop(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于停止 DHCPv6 客户端任务,清除重新传输计数、最大重新传输间隔,停用会话和租用到期计时器,并解除绑定 DHCPv6 客户端套接字端口。 若要重启客户端,必须先停止并视需要选择重新初始化客户端,再启动与任何 DHCPv6 服务器的另一个会话。 有关更多详情,请参阅“小型示例”部分。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功停止客户端

  • NX_DHCPV6_NOT_STARTED (0xE92):客户端线程未启动

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Stop the DHCPv6 Client task. */
status = nx_dhcpv6_start(&dhcp_0);

/* If status is NX_SUCCESS the Client successfully stopped. */

另请参阅

  • nx_dhcpv6_resume
  • nx_dhcpv6_suspend
  • nx_dhcpv6_reinitialize
  • nx_dhcpv6_start

nx_dhcpv6_suspend

暂停 DHCPv6 客户端任务

原型

UINT nx_dhcpv6_suspend(NX_DHCPV6 *dhcpv6_ptr);

说明

此服务用于暂停 DHCPv6 客户端任务及其在处理过程中的任何请求。 计时器被停用,且客户端状态被设置为“未运行”。

输入参数

  • dhcpv6_ptr:指向 DHCPv6 客户端实例的指针

返回值

  • NX_SUCCESS (0x00):已成功暂停客户端

  • NX_DHCPV6_NOT_STARTED (0XE92):客户端未运行,因此无法暂停

  • NX_PTR_ERROR (0x16):指针输入无效

  • NX_CALLER_ERROR (0x11):必须从线程调用

允许调用自

线程数

示例

/* Suspend the DHCPv6 Client task. */
status = nx_dhcpv6_suspend(&dhcp_0);

/* If status is NX_SUCCESS the Client successfully suspended. */

另请参阅

  • nx_dhcpv6_resume
  • nx_dhcpv6_start
  • nx_dhcpv6_reinitialize
  • nx_dhcpv6_stop