Вы не должны видеть строки в файле INI как назначения, где вы можете создавать процедурные конструкции, такие как циклы и т. Д. Вместо этого думайте о них как о правилах сопоставления с образцом. Когда модуль нуждается в параметре, он сканирует INI-файл от начала, строка за строкой и пытается сопоставить первую часть (то есть часть перед =) с текущим путем модуля. Если он совпадает, он назначает вторую часть параметру. Если нет, то продолжается со следующей строки в файле INI.
Итак, сначала напишите шаблонное правило, затем значение, которое можно оценить в этом контексте. Когда вы указываете значение, вы можете ссылаться на другие параметры (которые доступны в контексте модуля) или можете ссылаться на другую дополнительную контекстную информацию, такую как индекс соответствующего подмодуля (если он является частью вектора). Существуют и другие функции для доступа к индексу родителя и т. Д.
В этом случае у нас есть субмодуль-вектор хостов, где каждый содержит субмодуль-вектор приложений. Оператор index
будет возвращать индекс текущего контекстного модуля (который является позицией в векторе приложения), но нам фактически нужен индекс родителя вектора приложения (который является вектором хоста). Для этого тоже есть функция NED, которая называется parentIndex()
. Таким образом, решение будет выглядеть так:
*.wirelessHostA[*].app[*].destAddresses = "wirelessHostB[" + string(parentIndex()) + "]"
Подробнее см. https://doc.omnetpp.org/omnetpp/manual/#sec:ned-functions:category-ned.