unsigned long timestamp; //时间戳
NAT_ALG *alg; //应用层网关函数指针
int alg_use; //标志,是否需要应用层网关
NAT_SESSION *parent; //ftp中指向控制连接session的指针
NAT_SESSION *next_hash; //Hash表下一表项
};
2)nat_interface接口结构
struct nat_interface
{
NAT_INTERFACE *next; //指向下一个接口结构
struct in_addr ipaddress; //接口地址(转换地址)
/* Pointer to table of session structures, and hash table: */
NAT_SESSION *sessions; //指向session结构表
NAT_SESSION **hashtable; //指向hash结构表
int next_session;
/* Pointer to table of fragment structures */
NAT_FRAGMENT *fragments; //指向fragment结构表
int frag_queued; //记录保存有多少个分片队列
/* Stats - counts of sessions */ //各种计数器
UINT32 tcp_out, udp_out;
UINT32 icmp_q_out, icmp_err_out, icmp_err_in;
UINT32 discard_in, discard_out, refused_in, del_early;
};
7.2.2 NAT 收发处理函数的绑定仔细分析 vxworks 协议栈代码后,觉得使用 _ipFilterHook 绑定 NAT 接收报文处理函数的方式比较可行,该钩子函数在协议栈接收到数据报文时被调用,函数输入输出格式如下:
BOOL NatIpFilterHookRtn
(
struct ifnet rcvifnet, /* 数据接收的接口*/
struct mbuf **m, /* 数据报文地址 */
struct ip **ip, /* IP 头部地址 */