GPSR协议是基于地理位置的协议。GPSR协议每个节点需要维护两个表,一个是neighborhood表,存储邻居节点;一个是sinklist表,用来存放数据接收节点,存放了本网络当中的所有节点。
下面谈一下,这两个表的建立以及维护工作。
对于邻居节点列表,节点会周期性的向其所有邻居节点广播hello分组,周期性由GPSRHelloTimer定时器控制,由以下代码实现:
void
GPSRAgent::hellotout(){
hellomsg();
hello_timer_.resched(hello_period_);
}
hellotout()函数第一条语句hellomsg()填充hello分组后,然后将hello分组广播出去;第二条语句hello_timer_.resched(hello_period_),调用hello_timei_对象(该对象是GPSRHelloTimer定时器类)。每个节点都会周期性的发送helo分组,用来告知其邻居节点。邻居节点收到hello分组后,调用recvHello()函数,具体代码如下:
void
GPSRAgent::recvHello(Packet*p){
struct hdr_cmn *cmh = HDR_CMN(p);
struct hdr_gpsr_hell