Симулятор ns-3 Время завершения BulkSendApplication?

Я настроил симулятор, в котором N подчиненные узлы отправляют данные на главный узел, используя BulkSendApp. Проблема в том, что я не могу найти, как записать время завершения операции. Я знаю о регистрации с флагом prefix_time (например)

export 'NS_LOG=BulkSendApplication=level_all|prefix_func|prefix_time

Но это просто регистрирует все пакеты. Мне нужно только время завершения. Есть ли способ получить его без изменения самого класса приложения?


person AturSams    schedule 03.03.2014    source источник


Ответы (2)


В этом приложении нет источника трассировки, который бы уведомлял вас о событиях завершения tx. Однако его должно быть просто добавить либо в качестве источника трассировки, связанного с переменной m_totBytes, либо в качестве отслеживаемого обратного вызова. Например:

static TypeId BukSendApplication::GetTypeId (void)
{
  static TypeId tid = // ...
    // ...
    .AddTraceSource ("TotBytes",
                     "Total number of bytes sent",
                     MakeTraceSourceAccessor (&BukSendApplication::m_totBytes))
    ;
  return tid;
}

А также:

void TotBytes (uint32_t oldval, uint32_t newval) {}

Config::ConnectWithoutContext (
  "/NodeList/0/ApplicationList/0/$ns3::BulkSendApplication/TotBytes",
  MakeCallback (&TotBytesTracer));

В документации также есть обширная документация по этому вопросу: http://www.nsnam.org/docs/release/3.19/manual/html/tracing.html#overview

person mathieu    schedule 04.03.2014

Я нашел простой и достаточно надежный способ сделать это (приветствую комментарии).

1. Добавьте журнал pcap на отправляющие узлы:

для меня это было:

csma.EnablePcapAll ("tcp-bulk-send", false);.

csma — помощник, который я использовал для построения топологии коммутатора. Когда это включено, вы получаете файл .pcap при запуске моделирования.

2. используйте tcpdump -nn -tt -r tcp-bulk-send-N-D.pcap (N = индекс узла; D = индекс устройства)

Это распечатает журнал захвата пакетов соответствующего узла. Теперь проверьте, когда был получен последний ack. Вы также можете проверить, сколько пакетов было успешно отправлено (проверить, сколько было получено на другой стороне), убедившись, что приложение использует уникальный порт сокета. Время, когда пришло последнее подтверждение, в основном является необходимым временем завершения.

person AturSams    schedule 09.03.2014