#c #udp #contiki #sniffing #contiki-ng
#c #udp #contiki #анализ #contiki-ng
Вопрос:
Я использую 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:
- Из кода CSMA вы можете попробовать явно вызвать функцию, определенную в коде вашего приложения, или отправить событие процессу приложения. Если это кажется слишком уродливым, возможно, самый чистый (но не такой эффективный) способ — вызвать
process_post()
withPROCESS_BROADCAST
в качестве первого аргумента. Это передаст событие всем активным процессам, включая процесс приложения. - CSMA выполняет до 7 повторных передач по умолчанию. Чтобы отключить это или изменить количество повторных
#define CSMA_CONF_MAX_FRAME_RETRIES
передач на какое-либо значение, отличное от значения по умолчанию вproject-conf.h
файле. ОбратитеCONF
внимание на то, что указано в названии этой директивы препроцессора.
Комментарии:
1. Спасибо за вашу помощь, я реализовал это, и это сработало, но через некоторое время симуляция завершается сбоем и показывает мне ошибку на картинке. Я редактирую это сообщение выше, чтобы добавить изображение, которое находится в ссылке выше.
2. Также кажется, что сообщения приложения не отправляются, я использовал метод PROCESS_BROADCAST и создал другой поток процесса в приложении с помощью PROCESS_WAIT_EVENT();, кажется, что это единственный процесс, который активирован.
3. @SaraSosh Пожалуйста, оставьте один пост на один вопрос. Если этот ответ был полезен, примите его. В любом случае я не могу помочь вам отладить весь код на предмет переполнения памяти или других проблем. Однако я предлагаю использовать Cooja motes вместо Z1 для упрощения отладки.