Skip to content
psolikov edited this page Jun 20, 2017 · 1 revision

NetAnim with online mode

Задача

Проект NetAnim позволяет использовать XML файл трассировки событий, созданный во время работы симулятора Ns3, для визуализации этих событий. Однако такой подход имеет существенный недостаток: чтобы поменять какой-то параметр модели, приходится останавливать симуляцию, менять параметр в .cpp файле, запускать симуляцию заново. Для решения этой проблемы предлагается перевести NetAnim в режим онлайн, в котором информация поступает не из XML файла, а сразу во время симуляции. В таком режиме появляется возможность приостановить симуляцию, изменить параметр, возобновить симуляцию.

Идея

С помощью сигналов и флагов можно наладить общение между симулятором и NetAnim. В Ns3 есть класс, ответственный за создание XML файла, который "слушает" симулятор и генерирует небольшие события, записывая их в файл. Идея заключается в том, чтобы не записывать эти события, а сразу перенаправлять их в NetAnim, который запускается в начале симуляции.

Реализация

В модуле ns3 Animation Interface появились функции, которые вместо записи в файл создают объект класса ParsedElement, для которого уже написаны функции в AnimXmlParser из NetAnim. Перегружена функция doParse в AnimXmlParser, которая работает с новыми функциями. Симуляция теперь проходит поочередно с визуализацией. Таймер m_updateRateTimer посылает сигналы в qt слот updateRateTimeoutSlot из AnimatorMode за равные промежутки времени, в слоте появился вызов ns3::Simulator::Run (), уведомленный о том, что находится в online режиме. Далее, после того, как симулятор совершит один проход, он передаст события в Animation Interface. В слоте также вызывается метод dispatchEvents (), который обрабатывает события дальше.

Описание примера и порядок сборки

Для сборки проекта необходимо зайти в папку проекта и прописать команды cd netanim, qmake NetAnimOnline.pro, cd .., cd ns-3-dev, ./waf. Для того, чтобы работал online режим в сценариях нужно подключать заголовочный файл #include "ns3/netanim-module.h" и создавать в самом конце, до Simulator::Run () экземпляр класса AnimationInterface конструктором по умолчанию. Тестовые примеры находятся в папке ../ns-3-dev/scratch/. К примеру, grid-animation.cc. Чтобы его запустить можно написать ./waf --run grid-animation из папки ns-3-dev. Откроется окно NetAnim, в котором после нажатия кнопки play начнется анимация.