O mnet INI-файл конфигурации - установить случайное назначение для каждого узла - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу установить случайные пункты назначения для массива из 100 узлов в базе Udp c app

*.host[*].udpApp[0].destAddresses = "host[${intuniform(0,99)}]"

Мне нужно, чтобы все исходные узлы выбрали случайный пункт назначения и начали отправку трафика c. Но omnet ++ выдает ошибку в приведенном выше заявлении. Уже пробовал *.host[*].udpApp[0].destAddresses = "host[${0..99}]", но он выбирает только первый узел для всех узлов для 1 прогона моделирования.

1 Ответ

0 голосов
/ 06 февраля 2020

Вы не можете достичь своей цели таким образом, потому что согласно OMNeT ++ Руководство по симуляции в INI-файле:

Переменные подставляются в текстовом виде, и результат обычно не оценивается как арифметическое c выражение.

На самом деле манипулирование со значением destAddresses не является необходимым, поскольку приложение UDP Basi c выбирает адрес назначения случайным образом из набора, указанного в destAddresses. Взгляните на этот метод в UdpBasicApp.cc:

L3Address UdpBasicApp::chooseDestAddr()
{
    int k = intrand(destAddresses.size());
    if (destAddresses[k].isUnspecified() || destAddresses[k].isLinkLocal()) {
        L3AddressResolver().tryResolve(destAddressStr[k].c_str(), destAddresses[k]);
    }
    return destAddresses[k];
}

Что вам нужно сделать, это добавить все хосты в destAddresses. Например, предположим, что в сети пять хостов:

*.host[*].udpApp[0].destAddresses = "host[0] host[1] host[2] host[3] host[4]"
...