摘要:通信工程师互联网技术家乡代理(HA)的设计:HA从逻辑上主要包含两个模块,一个是inh模块,用来初始化各种参数和变里:另一个是mainloop模块,它是一个无限循环,根据各种事件触发进行相应操作。
2.3.4 家乡代理(HA)的设计
HA从逻辑上主要包含两个模块,一个是init模块,用来初始化各种参数和变里:另一个是mainloop模块,它是一个无限循环,根据各种事件触发进行相应操作。流程图如图2-9所示。
其中,init模块包含以下子模块,如图2-10所示。
init模块的各个子模块是按照箭头指示顺序执行的,具体功能如下。
ha_parse_command_line
解析输入的命令行
load-config
从配置文件中读取配罝参数,利用读取的数值对结构体变最config进行初始化。
set_ha_nai
根据全局结构体变量config_ha_nai的值建立全局变摄ha_nai。该函数释放之前分配的堆栈存储,为HANAI(NetworkAccessIdentifier,网络接入标识符)扩展重新分配一-个新的空间。
chcck_kemel_support
检测当前操作系统是否支持IP1P、NETLINK,只要对其中的任意一个不支持,进程退出,不再运行。这两个功能分别是ipip隧道和NETLINK系统调用,在编译内核的时候需要将它们编进内核,或者编译成模块,在运行前加载。
binding_init
初始化绑定列表,进行动态分配绑定表格的内存。
init_interfaces
对每个接口进行初始化,为每个接口建立3个套接U,udp_sock是一个UDP套接口,使用地址族AFJNET,通过setsockopt函数设置SO_BINDTODEVICE、IP_RECVTTL、IP.PKTINFO,SO.PRIORITY(根据配置文件可选)、IP^RECVERR的属性,绑定接口地址和434端口;udp_bc_sock是一个UDP套接口,使用地址族AFJNET,通过setsockopt函数设罝SCLBINDTODEVICE、IP_RECVTTL.IP_PKTINFO.SO.PRIORITY(根据配置文件可选)、IP_RECVERR的属性,绑定接口的广播地址和434端口;udp_bc_sock2是一个UDP套接口,绑定地址(255.255.255.255)和434端口:icmp_sock是一个UDP套接U,使用协议族PF_PACKET,通过setsockopt函数设SSO_ATTACH_FILTER,添加一个过滤器,只允许代理请求消息进入该套接口。
tunnel_init
初始化隧道的配置信息,对隧道的散列表进行初始化。
api_open_socket
创建两个UNIX域套接口,用于处理dynha_tool发送过来的API命令,其中一个处理特权命令,另一个处理非特权命令。
signal
对控制信号SIGTERM、SIGINT、SIGHUP的操作进行设定。
send_agent_advs
进入无限循环之前,发送相应的代理通告。
main.loop模块包含以下子模块,见图2-11。
模块里面的子模块的运行是事件触发的,根据不同的事件调用相应的模块,这点与init模块不同,
set_expr_timer
设置下一个到期的定时器。
check_bindings
检查绑定是否到期,更新各种计时器,当绑定失效的时候发送相应信息。
handle_api
处理经dynha_tool工具输入的特权命令和非特权命令。
handle_reg_msg
处理使用UDP数据报承载的各种注册消息。
handle一icmp
处理MN发送的代理请求消息,验证代理请求消息合法之后,回复代理通吿。
send_agent_advs
根据配置文件定义的方式,在指定接口周期性地发送代理通告或者在收到代理请求的时候才发送代理通吿。
tunnel-check-delayed
检查隧道的生存时间是否到达。
check_queuedgratuitousarp
定时给移动节点发送免费ARP消息。
在HA所有函数中,HA主要的处理函数是handle_reg_msg()。
handle_reg_msg函数的流程图如图2-12所示。
返回目录:通信工程师互联网技术培训移动IPv4技术
通信工程师备考资料免费领取
去领取