Omnetpp.ini - Как создать цикл для параметров хоста - PullRequest
0 голосов
/ 07 апреля 2019

У меня 1000 хостов. Мне нужно смоделировать ситуацию, когда хост [0] соединяется с другими 999 хостами через PingApp в соответствии с расписанием.

Например

**.host[0]*.numPingApps = 999 #number of hosts

**.host[0]*.pingApp[*].typename = "PingApp"

**.host[0]*.pingApp[*].packetSize = 42 B

**.host[0]*.pingApp[*].sendInterval = 1 s

**.host[0]*.pingApp[*].srcAddr = "host[0]"

**.host[0]*.pingApp[0].destAddr = "host[1]" 

**.host[0]*.pingApp[0].startTime = 0 s

**.host[0]*.pingApp[0].stopTime = 5s

**.host[0]*.pingApp[1].destAddr = "host[2]" 

**.host[0]*.pingApp[1].startTime = 0.1 s

**.host[0]*.pingApp[1].stopTime = 5.1 s

**.host[0]*.pingApp[2].destAddr = "host[3]" 

**.host[0]*.pingApp[2].startTime = 0.2 s

**.host[0]*.pingApp[2].stopTime = 5.2 s

**.host[0]*.pingApp[3].destAddr = "host[4]" 

**.host[0]*.pingApp[3].startTime = 0.3 s

**.host[0]*.pingApp[3].stopTime = 5.3 s

и так далее ...

Как создать цикл для автоматического изменения параметров: startTime, stopTime, destAddr, номер pingApp? Мне нужно увеличивать startTime и stopTime на 0,1 с при каждом увеличении на один пункт числа pingApp и destAddr.

Помогите мне, пожалуйста! Спасибо!

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

Вот еще одно квази-решение: из документации PingApp:

string destAddr = default ("");// адрес (а) назначения, разделенные пробелами, «*» означает, что все интерфейсы IPv4 / IPv6 во всей симуляции

Указание «*» позволяет пропинговать ВСЕ настроенные сетевые интерфейсы во всей симуляции.Это полезно для проверки того, может ли хост достигать ВСЕХ других хостов в сети (т. Е. Таблицы маршрутизации были настроены правильно).

Чтобы указать количество пинг-запросов, отправленных на один адрес назначения, используйте 'countпараметр.После того, как указанное количество пинг-запросов было отправлено на адрес назначения, приложение переходит в спящий режим для «sleepDuration».По истечении таймера сна приложение переключается на следующий пункт назначения и снова начинает пинговать.Приложение перестает пинговать, как только все адреса назначения были проверены или время симуляции достигает «stopTime».

Так что если у вас есть только эти хосты в сети, и вы не возражаете, что в начале хостпингует себя тоже, destAddr="*" и count=1

0 голосов
/ 08 апреля 2019

Я объединил ответы @Rudi и @JerzyD.и получил работоспособное решение:

**.host[0]*.numPingApps = 999
**.host[0]*.pingApp[*].typename = "PingApp"
**.host[0]*.pingApp[*].sendInterval = 1 s
**.host[0]*.pingApp[*].packetSize = 42 B
**.host[0]*.pingApp[0..998].destAddr = "host[" + string(index()+1) + "]"
**.host[0]*.pingApp[0..998].startTime = replaceUnit (0.1 * (index()), "s")
**.host[0]*.pingApp[0..998].stopTime = replaceUnit (5 + 0.1 * (index()), "s")
0 голосов
/ 08 апреля 2019

На самом деле, на каждом хосте должно быть только одно приложение Ping. Для достижения вашей цели вы можете использовать следующие настройки:

**.host[*].numApps = 1
**.host[*].app[0].typename = "PingApp"

**.host[999].app[0].destAddr = "host[0]"
**.host[*].app[0].destAddr = "host[" + string(parentIndex()+1) + "]"

**.host[*].app[0].startTime = replaceUnit (0.1*(parentIndex()), "s")
**.host[*].app[0].stopTime = replaceUnit (5 + 0.1*(parentIndex()), "s")

paretnIndex() возвращает индекс хоста в векторе хостов, ссылка OMNeT ++ Manual . Для последнего узла (т.е. host[999]) destAddr устанавливается вручную, поскольку parentIndex()+1 вернет 1000, а host[1000].
нет Вторая функция NED - replaceUnit() - используется для добавления единицы к результату расчета.

...