第 4 章 - NAT 服务说明

本章将按字母顺序介绍下列所有 NetX Duo NAT API 服务。

注意

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

nx_nat_create

创建 NAT 服务器

原型

UINT nx_nat_create(
    NX_NAT_DEVICE *nat_ptr,
    NX_IP *ip_ptr,
    UINT global_interface_index,
    VOID *dynamic_cache_memory,
    UINT dynamic_cache_size);

说明

此服务用于创建 NAT 服务器的实例。

输入参数

  • nat_ptr:指向要创建的 NAT 实例的指针
  • ip_ptr:指向 IP 实例的指针
  • global_interface_index:全局网络接口的索引
  • dynamic_cache_memory:NAT 表的指针内存区域
  • dynamic_cache_size:NAT 表的内存区域大小

返回值

  • NX_SUCCESS (0x00):已成功创建 NAT 服务器
  • NX_PTR_ERROR (0x07):输入指针参数无效
  • NX_NAT_PARAM_ERROR (0xD01):非指针输入无效
  • NX_NAT_CACHE_ERROR (0xD02):缓存指针输入无效

允许来自

应用程序代码

示例

#define NX_NAT_ENTRY_CACHE_SIZE 20480

static UCHAR nat_cache[NX_NAT_ENTRY_CACHE_SIZE];
UINT global_interface_index = 0;

/* Create a NAT Server and cache with a global interface index. */
status = nx_nat_create(nat_ptr, ip_ptr, global_interface_index,
    nat_cache, NX_NAT_ENTRY_CACHE_SIZE);

/* If status = NX_SUCCESS, the NAT instance was successfully
    created. */

nx_nat_delete

删除 NAT 服务器

原型

UINT nx_nat_delete(NX_NAT_DEVICE *nat_ptr);

说明

此服务用于删除以前创建的 NAT 服务器。

输入参数

  • nat_ptr:指向要删除的 NAT 实例的指针

返回值

  • NX_SUCCESS (0x00):已成功删除 NAT 服务器
  • NX_PTR_ERROR (0x07):输入指针参数无效

允许来自

应用程序代码

示例

/* Delete the NAT instance. */
status = nx_nat_delete (nat_ptr);

/* If the NAT instance was successfully deleted, status = NX_SUCCESS. */

nx_nat_enable

启用 NAT 的 IP 实例

原型

UINT nx_nat_enable(NX_NAT_DEVICE *nat_ptr);

说明

此服务用于启用 NAT 的 IP 实例(例如,将接收的数据包转发到 NAT 服务器)。

输入参数

  • nat_ptr:指向 NAT 实例的指针

返回值

  • NX_SUCCESS (0x00):已成功启用 NAT
  • NX_PTR_ERROR (0x07):输入指针参数无效

允许来自

应用程序代码

示例

/* Enable the NAT server. */
status = nx_nat_enable (nat_ptr);

/* If status = NX_SUCCESS, the IP instance was successfully enabled for NAT. */

nx_nat_disable

禁用 NAT 的 IP 实例

原型

UINT nx_nat_disable(NX_NAT_DEVICE *nat_ptr);

说明

此服务用于在 IP 实例上禁用 NAT。

输入参数

  • nat_ptr:指向 NAT 实例的指针

返回值

  • NX_SUCCESS (0x00):已成功禁用 NAT
  • NX_PTR_ERROR (0x07):输入指针参数无效

允许来自

应用程序代码

示例

/* Disable the NAT server. */
status = nx_nat_disable (nat_ptr);

/* If status = NX_SUCCESS the NAT operation successfully disable. */

nx_nat_cache_notify_set

设置缓存已满通知回调函数

原型

UINT nx_nat_cache_notify_set(
    NX_NAT_DEVICE *nat_ptr,
    VOID (*cache_full_notify_cb)(NX_NAT_DEVICE *nat_ptr)));

说明

此服务用于注册带有输入函数指针 cache_full_notify_cb 的缓存已满回调,该指针指向用户定义的缓存已满通知函数。

输入参数

  • nat_ptr:指向 NAT 实例的指针
  • cache_full_notify_cb:指向缓存已满通知函数的指针

返回值

  • NX_SUCCESS (0x00):已成功设置缓存已满通知函数
  • NX_PTR_ERROR (0x07):输入指针参数无效
  • NX_NAT_PARAM_ERROR (0xD01):非指针输入无效

允许来自

应用程序代码

示例

/* Set the cache full notify callback function to the NAT instance. */
status = nx_nat_cache_notify_set(nat_ptr, cache_full_notify_cb);

/* If status = NX_SUCCESS the callback function was successfully set. */

nx_nat_inbound_entry_create

在 NAT 转换表中创建入站条目

原型

UINT nx_nat_inbound_entry_create(
    NX_NAT_DEVICE *nat_ptr,
    NX_NAT_TRANSLATION_ENTRY *entry_ptr
    ULONG local_ip_address,
    USHORT external_port,
    USHORT local_port,
    UCHAR protocol);

说明

此服务用于创建静态的入站条目(永久条目,永不过期),并将其添加到 NAT 转换表中。 这些条目通常是为本地主机服务器创建的,在这些主机服务器上,连接从外部网络中的主机启动。 NAT 服务器会检查以确保外部端口未在转换表中使用,或者不受同一协议的现有 NetX Duo 套接字所约束。

输入参数

  • nat_ptr:指向 NAT 实例的指针
  • entry_ptr:指向转换条目的指针
  • local_ip_address:本地主机 IP 地址
  • external_port:外部网络上的目标端口
  • local_port:源(本地主机)端口
  • protocol:数据包协议(例如 TCP)

返回值

  • NX_SUCCESS (0x00):已成功创建条目
  • NX_NAT_PORT_UNAVAILABLE (0xD0D):外部端口无效
  • NX_PTR_ERROR (0x07):输入指针参数无效
  • NX_NAT_PARAM_ERROR (0xD01):非指针输入无效

允许来自

应用程序代码

示例

/* Create an entry for an inbound TCP packet. */
status = nx_nat_inbound_entry_create(nat_ptr, entry_ptr,
    IP_ADDRESS(192,168,2,2), 5001, 5001,
    NX_PROTOCOL_TCP);

/* If status = NX_SUCCESS the entry was successfully created. */

nx_nat_inbound_entry_delete

删除 NAT 转换表中的入站条目

原型

UINT nx_nat_inbound_entry_delete(
    NX_NAT_DEVICE *nat_ptr,
    NX_NAT_TRANSLATION_ENTRY *delete_entry_ptr)

说明

此服务用于从转换表中删除指定的入站条目。

输入参数

  • nat_ptr:指向 NAT 实例的指针
  • delete_entry_ptr:指向 NAT 转换条目的指针

返回值

  • NX_SUCCESS (0x00):已成功删除条目
  • NX_NAT_ENTRY_NOT_FOUND (0xD04):找不到该条目
  • NX_PTR_ERROR (0x07):输入指针参数无效
  • NX_NAT_ENTRY_TYPE_ERROR (0xD0C):转换类型无效

允许来自

应用程序代码

示例

/* Delete the specified static entry from the translation table. */
status = nx_nat_inbound_entry_delete(nat_ptr, delete_entry_ptr);

/* If status = NX_SUCCESS the entry was successfully deleted. */