RPL 协议目标函数0的实现在程序文件rpl-of0.c中,下面说明该文件中最重要的三个函数:calculate_rank()、best_dag()和best_parent()。
函数calculate_rank()计算节点的rank值,节点的rank是基于它的双亲节点rank和基准rank的。如果节点基准rank是0,并且没有双亲节点,那么该节点的rank是无穷大。如果节点的基准rank是0,并且存在双亲节点,则该节点的基准rank 等于双亲节点的rank。如果节点的基准rank 不为零,则取决于该节点是否有双亲节点,基准rank增加值为DAG实例上双亲节点的min_hoprankinc值或默认的rank增量DEFAULT_RANK_INCREMENT。简单来说,如果双亲节点为NULL,那么基准rank 值base_rank 增加一个默认值,否则基准rank 值base_rank 增加一个根据双亲节点信息计算的值。最后,如果计算的新rank 小于基准rank,则由于环绕而使新rank 变为无穷大,新计算的rank 等于增加的基准rank。
函数best_dag()比较两个有向无环图DAGs,并且根据目标函数返回这两个有向无环图DAGs(输入d1 和d2)中最优的一个。有三个找到最佳有向无环图DAG 的标准:第一个标准是DAG 是否接地(grounded),即DAG 根是否提供默认路由;第二个标准是每个DAG采用的度量值(preference metric);第三个标准是每个DAG的rank值。
(www.xing528.com)
图12-6 双亲节点选择
如图12-6所示,函数best_parent()比较两个双亲节点,根据目标函数返回最佳双亲节点。也就是说,基于双亲节点的rank 值和ETX 值比较双亲节点。best_parent()是最重要的函数之一,因为选择最佳的有向无环图DAG 之后,路由信息是基于该函数选择双亲节点的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。