Анализ уровня CSMA и анализ приложений в Contiki-ng

#c #udp #contiki #sniffing #contiki-ng

#c #udp #contiki #анализ #contiki-ng

Вопрос:

Ошибка в cooja

Я использую Contiki-ng и примеры udp-сервера и udp-клиента. Я хочу сделать пару вещей: 1- Я хочу, чтобы клиентский узел отслеживал пакеты, а затем отправлял пакет на сервер, как только это произойдет. Мне удалось это сделать, но есть кое-что, чего я не понимаю: a- Когда я запускаю анализ в udp-клиенте, добавляя этот бит в код:

 radio_value_t radio_rx_mode;
NETSTACK_RADIO.get_value(RADIO_PARAM_RX_MODE, amp;radio_rx_mode);
NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, radio_rx_mode amp; (~RADIO_RX_MODE_ADDRESS_FILTER));
 

Кажется, что это улавливает пакеты только на уровне udp-клиентского приложения, и когда я увеличиваю QUEUEBUF_CONF_NUM, чтобы разрешить серверу получать эти пакеты, он захватывает только собственные пакеты узла. Есть идеи, почему это происходит?

b- Когда я сделал то же самое в файле csma.c в функции input_packet, он работает и захватывает все пакеты, однако я не уверен, как настроить так, чтобы после захвата пакета на уровне csma узел мог отправлять пакет с уровня приложения?

2 — Просто быстрый вопрос, чтобы подтвердить, правильно ли то, что я делаю, я хотел включить ReTx в этом примере, поэтому я добавляю это в файл конфигурации проекта:

   #define CSMA_MAX_FRAME_RETRIES 7
 

Позволит ли это повторную передачу пакетов? или он делает что-то еще?

Любая помощь в этом отношении приветствуется. Спасибо.

Ответ №1:

  1. Из кода CSMA вы можете попробовать явно вызвать функцию, определенную в коде вашего приложения, или отправить событие процессу приложения. Если это кажется слишком уродливым, возможно, самый чистый (но не такой эффективный) способ — вызвать process_post() with PROCESS_BROADCAST в качестве первого аргумента. Это передаст событие всем активным процессам, включая процесс приложения.
  2. CSMA выполняет до 7 повторных передач по умолчанию. Чтобы отключить это или изменить количество повторных #define CSMA_CONF_MAX_FRAME_RETRIES передач на какое-либо значение, отличное от значения по умолчанию в project-conf.h файле. Обратите CONF внимание на то, что указано в названии этой директивы препроцессора.

Комментарии:

1. Спасибо за вашу помощь, я реализовал это, и это сработало, но через некоторое время симуляция завершается сбоем и показывает мне ошибку на картинке. Я редактирую это сообщение выше, чтобы добавить изображение, которое находится в ссылке выше.

2. Также кажется, что сообщения приложения не отправляются, я использовал метод PROCESS_BROADCAST и создал другой поток процесса в приложении с помощью PROCESS_WAIT_EVENT();, кажется, что это единственный процесс, который активирован.

3. @SaraSosh Пожалуйста, оставьте один пост на один вопрос. Если этот ответ был полезен, примите его. В любом случае я не могу помочь вам отладить весь код на предмет переполнения памяти или других проблем. Однако я предлагаю использовать Cooja motes вместо Z1 для упрощения отладки.