Моделирование Traffi c на симуляторе сети ns-3 - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь смоделировать трафик c голоса, видео и данных для проверки различий между EDCF и традиционным CSMA / CA.

Я использую вспомогательный помощник на основе примера http://www.scielo.org.co/pdf/dyna/v84n202/0012-7353-dyna-84-202-00055.pdf

для видео, но на setAttribute («OffTime», StringValue («ns3 :: LogNormalRandomVariable [Mu = 0,4026, Sigma = 0,0352]»));

Я получаю сообщение об ошибке "Значение атрибута" 0,4026, Sigma = 0,0352 "неправильно отформатировано"

Любые идеи по поводу ошибки или предложения о том, как смоделировать три типа трафика c?

Спасибо за ваше время

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Ответ a4arshad компилируется и запускается, но они не верны. Причина, по которой решение a4arshad не работает, заключается в том, что второй вызов SetAttribute устанавливает атрибут OffTime как LogNormalRandomVariable с Sigma=0.0352. Второй вызов не добавляет к существующему LogNormalRandomVariable с Mu=0.4026. Второй вызов перезаписывает первого.

a4arshad также предлагает поставить пробел между LogNormalRandomVariable и [, но это тоже не работает; это просто приведет к тому, что ns-3 проигнорирует все параметры.

Правильный способ задания атрибута в качестве связанной бумаги - разделить параметры с помощью трубы, |. Вы должны сделать что-то вроде

onoff.SetAttribute("OffTime", StringValue("ns3::LogNormalRandomVariable[Mu=0.4026|Sigma=0.0352]"));

Я не знаю, когда ns-3 переключился на использование канала вместо запятой, но я использую самую последнюю версию выпуска, ns-3.30.1.

Вы можете использовать следующую программу, чтобы проверить, работает ли установка атрибута. Последние строки являются соответствующими; остальное - шаблон для настройки симуляции. В последних строках мы извлекаем Attribute из Application и выводим значения Mu и Sigma. Попробуйте комментировать / раскомментировать правильные / неправильные методы и посмотреть на различные результаты. Согласно документации LogNormalRandomVariable, значения по умолчанию Mu и Sigma равны 0 и 1 соответственно.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */

// setting a LogNormalRandomVariable with multiple parameters as the OffTime
// of an OnOffApplication
// https://stackoverflow.com/questions/60791009
// Author: Sagar

#include "ns3/core-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/applications-module.h"

using namespace ns3;

NS_LOG_COMPONENT_DEFINE("RandomVariableAttirbuteTest");

int
main(int argc, char *argv[]) {
    NodeContainer nodes;
    nodes.Create(2);

    PointToPointHelper p2pLink;
    NetDeviceContainer devices = p2pLink.Install(nodes);

    InternetStackHelper stack;
    stack.InstallAll();

    // assign IP addresses to NetDevices
    Ipv4AddressHelper address ("10.1.1.0", "255.255.255.0");
    Ipv4InterfaceContainer ipInterfaces = address.Assign(devices);
    Ipv4GlobalRoutingHelper::PopulateRoutingTables();

    // configure and install server app
    int serverPort = 8080;
    UdpServerHelper serverApp (serverPort);
    serverApp.Install(nodes.Get(0));
    Address serverAddress = InetSocketAddress(ipInterfaces.GetAddress(0), serverPort);

    // configure and install client apps
    OnOffHelper onoff ("ns3::UdpSocketFactory", serverAddress);

    // incorrect (two separate SetAttribute calls)
    // onoff.SetAttribute("OffTime", StringValue("ns3::LogNormalRandomVariable[Mu=0.4026]"));
    // onoff.SetAttribute("OffTime", StringValue("ns3::LogNormalRandomVariable[Sigma=0.0352]"));

    // also incorrect (adding a space)
    // onoff.SetAttribute("OffTime", StringValue("ns3::LogNormalRandomVariable [Mu=0.4026,Sigma=0.0352]"));

    // correct
    onoff.SetAttribute("OffTime", StringValue("ns3::LogNormalRandomVariable[Mu=0.4026|Sigma=0.0352]"));

    onoff.Install(nodes.Get(1));

    // print Attirbutes to check if they were correctly set
    Ptr<Application> app = nodes.Get(1)->GetApplication(0);
    PointerValue pv;
    app->GetAttribute("OffTime", pv);
    Ptr<LogNormalRandomVariable> rv = pv.Get<LogNormalRandomVariable>();
    NS_LOG_UNCOND("Mu = " << rv->GetMu());
    NS_LOG_UNCOND("Sigma = " << rv->GetSigma());

    return 0;
}
1 голос
/ 23 марта 2020

Я не смог найти версию ns3 в предоставленной вами ссылке. Кроме того, справочный документ был опубликован в сентябре 2017 года. Я думаю, что они использовали ns3.26, вероятно. Итак, я попытался с ns3.29 и не смог воспроизвести вышеуказанную ошибку. У меня есть несколько другая ошибка. Но я мог бы исправить это, поставив пробел перед '['. Второе решение я нашел, используя Mu и Sigma отдельно.

onoff.SetAttribute ("OffTime", StringValue("ns3::LogNormalRandomVariable[Mu=0.4026]"));
onoff.SetAttribute ("OffTime", StringValue("ns3::LogNormalRandomVariable[Sigma=0.0352]"));

For more details see the attached picture

...