Как подслушать соседний мот Tx/Rx в Contiki?

Я хочу знать, как в сетях RPL после того, как узел отправит один пакет другому узлу (например, RPL-Collect/udp-sender), как узнать, что предполагаемый узел будет пересылать этот пакет или нет? Я думаю, что подслушивание передачи соседей необходимо, но есть ли другой простой способ реализовать этот сценарий в Contiki/Cooja?


person Hamed    schedule 18.07.2018    source источник


Ответы (1)


Для прослушивания пакетов в дополнение к обычной работе вам необходимо сделать несколько вещей:

  1. Убедитесь, что радио включено и настроено на правильный канал. Если вы используете постоянно включенные CSMA или ContikiMAC, вам не нужно делать ничего особенного. То же самое для минимального расписания ТЩ. В противном случае для TSCH вам необходимо запланировать ячейку Rx с правильным смещением канала и в правильном временном интервале.

  2. Каким-то образом взломайте MAC-уровень, чтобы печатать или учитывать пакеты, не адресованные вам — обычно MAC-уровень молча отбрасывает такие пакеты.

  3. Убедитесь, что аппаратная фильтрация кадров отключена (радиостанция находится в беспорядочном режиме).

Пример:

radio_value_t radio_rx_mode;
/* Entering promiscuous mode so that the radio accepts all frames */
NETSTACK_RADIO.get_value(RADIO_PARAM_RX_MODE, &radio_rx_mode);
NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, radio_rx_mode & (~RADIO_RX_MODE_ADDRESS_FILTER));

Если вам просто нужно подслушивать пакеты и не нужна нормальная работа, то и попроще. Тогда вы можете использовать SenSniff.

person kfx    schedule 19.07.2018
comment
Отлично... Спасибо @kfx. Например, я хочу знать, какие узлы в RPL не пересылают полученные пакеты, подслушивая соседей. Я рассмотрел ваши несколько вещей, и это означает, что у меня есть несколько вопросов! - person Hamed; 21.07.2018
comment
1. Я использую ContikiMAC, кстати, добавляя NETSTACK_RDC.off(1) в свой поток процесса. 2. В функции input_packet() в contikimac.c я изменил базовый оператор, который принимает все пакеты, даже не предназначенные нам, но я не знаю, как распечатать и учесть эти буферизованные данные за несколько операций. . 3. Я думаю, что аппаратная фильтрация кадров отключается установкой CC2420_CONF_AUTOACK в ноль в project-conf (неразборчивый режим), кстати добавляя NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, 0) работает? Каково ваше мнение? - person Hamed; 21.07.2018
comment
@Hamed, у тебя все еще есть проблемы с этим? И нет, автоподтверждение и фильтрация кадров — это две разные настройки. Если думаете, что autoack будет работать, даже если фильтрация кадров отключена. Так что не отключайте автозапуск. Но если вам нужно по какой-то причине, включите CONTIKIMAC_CONF_SEND_SW_ACK. - person kfx; 23.07.2018
comment
При входе в неразборчивый режим коэффициент доставки пакетов значительно падает, и пакеты udp-sender вообще не доставляются в приемник. В окне временной шкалы в моей симуляции Cooja мешало наблюдать всё больше. Есть ли решение этого или другого способа прослушивания других соседей? - person Hamed; 23.07.2018
comment
Это странно. Вы уверены, что не меняете настройки автозапуска? Просто фильтрация кадров, верно? - person kfx; 27.07.2018
comment
Да @kfx, я думаю, мне нужно только отключить Address Filter (фильтрация кадров RF) и включить Automatic Acknowledgments. Как сделать это идеально? - person Hamed; 10.08.2018