Я хочу реализовать DAG Metri c Типы объектов контейнера, такие как энергия, пропускная способность, задержка, количество переходов в целевой функции mrhrof в contikirpl. Я пытаюсь получить пакет данных пакета данных, такой как отметка времени отправки / получения пакета, пакеты, полученные непосредственным родительским участником и т. Д. c.
Экспериментальная установка: один приемник (mote1) (udp-сервер. c), три источника (mote2,3 и 4) (udp-slient. c) (.... / contiki-3.0 / examples / ipv6 / rpl-udp).
mote1 <----> mote2 <----> mote3 <- -> mote4
(1) Для подсчета полученных пакетов я попробовал очень простой код в neighbour_link_callback () , потому что эта функция получает информацию о соседях канального уровня. (..contiki-3.0 / core / net / rpl / rpl-mrhof. c)
#include "sys/node-id.h"
(включено в файл для доступа к идентификатору узла)
static uint16_t pkt1=0,pkt2=0,pkt3=0; /* pkt1,2 and 3 store incoming packets for mote2,3 and 4 respectively */
if(status == MAC_TX_OK) // pkts transmission successfully
{
switch (node_id) {
case 2:
pkt1++;
break;
case 3:
pkt2++;
break;
case 4:
pkt3++;
break;
default:
PRINTF("Other::error outside of three mote \n");
break;
}
}
Проблема с этим кодом заключается в том, что я получаю больше пакетов в этой переменной. Я думаю, из-за этого хранятся все типы пакетов (контроль и пакеты данных). Как получить только пакеты данных в этих переменных (pkt1, pkt2, pkt3).
(2) Для вычисления задержки я хочу получить метку времени отправки / получения пакета в mrhrof. c Мудро, но я могу получать время только на udp-сервере. c и udp-клиенте. c
(.... / contiki-3.0 / examples / ipv6 / rpl- udp)
Для этого я написал следующий код: udp-клиент. c
stati c uint16_t pkt1_s = 0, pkt2_s = 0, pkt3_s = 0;
Внутри "stati c void send_packet (void * ptr)"
pkt_send_time = clock_seconds();
switch (node_id) {
case 2:
PRINTF("::No of pkt_send:: %u by \t mote %d at \t pkt_send_time:: %u \n",++pkt1_s,node_id,pkt_send_time);
break;
case 3:
PRINTF("::#pkt_send:: %u \t by mote %d at \t pkt_send_time:: %u \n",++pkt2_s,node_id,pkt_send_time);
break;
case 4:
PRINTF("::#pkt_send:: %u \t by mote %d at \t pkt_send_time:: %u \n",++pkt3_s,node_id,pkt_send_time);
break;
default:
PRINTF("::error send pkt outside range \n");
break;
}
Я написал такой же код для udp-сервера. c .
Здесь я сталкиваюсь со следующими проблемами:
- Функция clock_seconds () предоставляет время в секундах, но мне нужно время в милисекундах.
- Как получить точную метку времени отправки / получения пакетов данных в rpl-mhrof. c