软件开始对维护的数据结构(host,rt_table,log等),用于不同机器间aodv通信的socket,和与uuaodv内核模块,路由表通信的netlink socket进行初始化,然后调用hello_start()发送第一个hello消息。
1,hello的发送
hello_start()--->hello_send()
hello_send()--->rrep_create(),aodv_socket_send(),timer_set_timeout().
首先创建一个ttl为1的rrep消息,通过上面的函数广播出去(uuaodv就是一个处理aodv命令的服务器),设置个时钟,1s左右再调用hello_send(),循环往复,以至无穷。
aodv_socket_send()
做一些检查,通过sendto()将数据发送出去
2,aodv_socket的初始化和数据的接收
aodv_socket_init(),创建socket,并且当有数据到达这个socket时调用aodv_socket_read.
aodv_socket_read()---->recvmsg(),aodv_socket_process_packet()
接受数据,并调用第二个函数进行具体的处理
aodv_socket_process_packet()
把数据包的源地址加入到邻居列表(uuaodv维护的列表和系统路由表)
并根据收到消息的类型,调用hello_process(),rreq_process(),rrep_process(),rerr_process(),rrep_ack_process()进行具体的处理
3,对hello消息的处理
就是更新一下hello对应的邻居路由信息
4,其他的参照AODV的处理流程,跟HELLO类似
阅读(1627) | 评论(1) | 转发(0) |