Я работаю над созданием модифицированной версии MRHOF для RPL. Однако у меня есть некоторые сомнения относительно используемых метрик ETX. я запускаю пример rpl-udp (.... / contiki-3.0 / examples / ipv6 / rpl-udp) .
Насколько я понимаю, общее определение ETX следующее:
ETX = 1/(df * dr)
, где df
- это измеренная вероятность того, что пакет данных успешно прибудет в получатель, а dr
- вероятность успешного получения пакета ACK.
Реализация ETX определена в neighbor_link_callback(rpl_parent_t *p, int status, int numtx)
(contiki / core / net / rpl / rpl-mrhof. c) как показано ниже:
new_etx = ((uint32_t)recorded_etx * ETX_ALPHA +(uint32_t)packet_etx * (ETX_SCALE - ETX_ALPHA)) / ETX_SCALE
где
recorded_etx = nbr->link_metric
packet_etx = MAX_LINK_METRIC * RPL_DAG_MC_ETX_DIVISOR
nbr->link_metric = RPL_INIT_LINK_METRIC * RPL_DAG_MC_ETX_DIVISOR (rpl-dag.c)
RPL_INIT_LINK_METRIC = 2 (rpl-conf.h)
ETX_SCALE = 100
ETX_ALPHA = 90
RPL_DAG_MC_ETX_DIVISOR = 256 (rpl-private.h)
MAX_LINK_METRIC = 10
Здесь каждый раз, когда канальный уровень получает ACK или событие тайм-аута, функция внутри этот файл (neighbour_link_callback) запущен.
Я понял формальное определение ETX, но когда я пытаюсь сопоставить стандартную формулу ETX с формулой ETX contikiRPL, то я сталкиваюсь с некоторыми проблемами в понимании реализации ETX в contikiRPL.
Как реализуется вероятность успешного получения пакета данных получателем (df
) и вероятность успешного получения пакета ACK (dr
) Тед в ContikiRPL?