程序文件rpl-mhrof.c 实现了具有MRHOF(Hystere Objective Function)的最小rank 值,目标函数使用ETX 作为路由度量标准。在此介绍该程序文件中的主要函数calculate_path_metric()、neighbor_link_callback()、calculate_rank()和best_parent():
函数calculate_path_metric()根据目标函数OF 计算路径度量值,如果没有双亲节点,那么基于使用的最大路径开销计算默认的度量值。如果没有前面提到的目标函数OF,那么路径度量值是rank 值和链路度量值的总和。对于基于ETX的目标函数OF,它是ETX测量值(p->mc.obj.etx)和链路度量的总和。同样的,如果目标函数OF 是基于能量度量值的,那么能量度量值(p->mc.obj.energy.energy_est)会被加到链路度量值中。为了比较这两个双亲节点的路径度量值,函数best_parent()将调用函数calculate_path_metric()。
函数neighbor_link_callback()接收链路层的邻居信息,设置参数status 为1或0,参数numetx 为邻居节点指定当前的ETX。recorded_etx 值是链路度量值link_metric,packet_etx 是传递给该函数的numetx 参数值,new_etx 是基于使用recorded_etx和packet_etx的公式计算的。link_metric值由新的ETX值更新。
这里的calculate_rank()函数与前面解释的函数calculate_rank()相似,但略有不同。在该目标函数OF 中,如果双亲节点为NULL,变量rank_increase 的增加值等于RPL_INIT_LINK_METRIC,否则增加值为link_metric 度量值,新的rank值是加到基准rank值上的增量。(www.xing528.com)
这里的函数best_parent()与之前提到的函数best_parent()相似,目的是比较两个双亲节点,并且返回最优的一个。这里为每个双亲节点计算的路径度量值是比较的基础,首先检查双亲节点中的任何一个是否被设置为建立有向无环图DAG 更适合的双亲,如果是,则将这个节点选为最优的双亲节点(基于标准RFC 6719),否则,比较这两个计算的度量值,具有较低度量值的节点是最优的双亲节点。在该目标函数OF 中,只有当比当前路径短(就路径代价而言)至少一个给定的阈值时,才会切换到具有最小rank 值的路径,第二种机制被称为“滞后(hysteresis) ”(RFC 6719),这里将阈值PARENT_SWITCH_THRESHOLD_DIV 定义为2。
双亲节点的选择出现在以下情况中:网络初始建立阶段;到邻居节点的路径代价改变或一个新节点出现在节点的邻居节点中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。