Это команда ibdmsh, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
ибдмш МОДЕЛЬ ДАННЫХ IB - Расширенная оболочка TCL
ОПИСАНИЕ
ибдмш - это оболочка TCL, дополненная интерфейсом для модели данных IB. Чтобы использовать эту оболочку
вы напишете код TCL, который напрямую обращается к объектам и функциям модели данных IB.
В следующих подразделах приводится подробное определение этих объектов и API.
ИБДМ Константы
Узел Тип
Следующие константы используются в поле типа объекта узла
[Константа: число] $ IB_UNKNOWN_NODE_TYPE = IB_UNKNOWN_NODE_TYPE
[Константа: int] $ IB_SW_NODE = IB_SW_NODE
[Константа: число] $ IB_CA_NODE = IB_CA_NODE
Журнал многословие Флаги
Следующие константы используются в качестве битов аргументов для глобальной переменной.
$ FabricUtilsVerboseLevel
[Константа: int] $ FABU_LOG_NONE = 0x0
[Константа: int] $ FABU_LOG_ERROR = 0x1
[Константа: int] $ FABU_LOG_INFO = 0x2
[Константа: int] $ FABU_LOG_VERBOSE = 0x4
ИБДМ Глобалы
Уровень журнала: установите значение FABU_LOG *
[Global: int] $ FabricUtilsVerboseLevel
ИБДМ Объекты
В этом разделе описываются различные типы объектов, предоставляемые IBDM.
IBDM предоставляет некоторые из своих внутренних объектов. Идентификаторы объектов, возвращаемые различными
вызовы функций форматируются по следующим правилам:
Ткань: ткань:
Система: система: :
SysPort: sysport: : :
Узел: узел: :
Порт: порт: : /
Объекты IBDM - это стандартные объекты Swig-Tcl. Таким образом, у них есть два варианта использования:
Переменные, объекты.
Переменные / указатели:
Для каждого атрибута объекта предусмотрены методы «получить» и «установить».
Формат методов: _ _ .
Метод «set» доступен только для атрибутов чтения / записи.
Пример:
установить узлы [ibdm_get_nodes]
установить узел [lindex $ nodes 0]
IBNode_numPorts_get $ node
Объекты:
Имея указатель на объект, его можно преобразовать в Tcl "Object"
используя следующую команду:
-это
После того, как объявили может использоваться вместе с
с помощью стандартных команд "configure" и "cget".
Пример (следующий за предыдущим):
IBFabric VaTech - это ткань $
VaTech cget -NodeByName
Чтобы удалить символ объекта (и разрешить его сопоставление с другим
указатель) используйте:
переименовать ""
например:
переименовать VaTech ""
класс ИБПорт
Ниже приведены различные поля и методы класса IB Port, который описывает
Физический порт устройства (микросхемы) IB.
[Данные участника: возвращает IBPort *] -p_remotePort
Порт подключен на другой стороне ссылки
[Данные участника: возвращает IBSysPort *] -p_sysPort
Системный порт (если есть), подключенный к
[Данные участника: возвращает IBNode *] -p_node
Узел, частью которого является порт.
[Данные участника: возвращает целое число] -число
Физические порты обозначаются номерами.
[Данные участника: возвращает целое число без знака] -base_lid
Базовая крышка закреплена за портом.
[Данные участника: возвращает IBLinkWidth *] -width
Ширина линка порта
[Данные участника: возвращает IBLinkSpeed *] -speed
Скорость соединения порта
[Данные члена: возвращает целое число без знака] -counter1
Общее значение, которое будет использоваться различными алгоритмами.
[Конструктор: возвращает IBPort *] Имя IBPort p_nodePtr номер
Конструктор IBPort
[Участник: возвращает new_uint64_t] guid_get
Получить гид порта
[Участник: возвращает void] guid_set guid
Измените гид порта
[Участник: возвращает новую_строку] getName
Получите имя порта: порт устройства, подключенный к системному порту (передняя панель), возвращается
имя порта передней панели.
[Член: возвращает void] connect p_otherPort? Width? ?скорость?
Подключите порт к другому порту узла с дополнительными параметрами ширины и скорости
[Член: возвращает int] отключение
Отключите порт. Вернуть 0 в случае успеха
класс ИБНоде
Класс IB Node представляет собой одно устройство IB (микросхему).
[Данные участника: возвращает строку *] -name
Имя узла (имя экземпляра чипа)
[Данные участника: возвращает IBNodeType] -тип
Либо $ IB_SW_NODE, либо $ IB_CA_NODE
[Данные участника: возвращает uint16_t *] -devId
ID устройства узла
[Данные участника: возвращает uint16_t *] -revId
Идентификатор версии устройства.
[Данные участника: возвращает uint16_t *] -vendId
Идентификатор производителя устройства.
[Данные участника: возвращает строку *] -атрибуты
Строка с разделителями-запятыми произвольных атрибутов k = v
[Данные участника: возвращает uint8_t] -rank
Ранг узла (0 - корень)
[Данные участника: возвращает IBSystem *] -p_system
К какой системе мы принадлежим
[Данные участника: возвращает IBFabric *] -p_fabric
Из какой ткани мы принадлежим.
[Данные члена: возвращает целое число без знака] -numPorts
Количество физических портов
[Данные участника: возвращает vec_pport *] -Порты
Вектор всех портов
[Данные участника: возвращает vec_vec_byte *] -MinHopsTable
Таблица количества переходов, необходимых для перехода от каждого порта к каждому целевому LID.
[Данные участника: возвращает vec_byte *] -LFT
LFT этого узла (только для коммутаторов), который представляет собой длинный вектор целевых портов -
index - это LID
[Участник: возвращает new_uint64_t] guid_get
Получить GUID узла
[Участник: возвращает void] guid_set guid
Установите GUID узла
[Конструктор: возвращает IBNode *] Имя IBNode n p_fab p_sys t np
Конструктор
[Участник: возвращает IBPort *] makePort num
Создать новый порт по его номеру (если требуется) вернуть указатель порта
[Участник: возвращает IBPort *] getPort num
Получить порт по номеру num = 1..N:
[Участник: возвращает void] setHops p_port lid hops
Установите минимальный интервал для данной пары крышек порта (* - все)
[Участник: возвращает int] getHops p_port lid
Получить минимальное количество переходов, определенных для данного порта или всех
[Участник: возвращает IBPort *] крышку getFirstMinHopPort
Сканируйте порты узла и найдите первый порт с минимальным переходом к крышке.
[Member: возвращает void] setLFTPortForLid lid portNum
Установите таблицу линейной пересылки для данного LID
[Member: возвращает int] крышка getLFTPortForLid
Получите LFT для данного LID
[Участник: возвращает недействительность] repHopTable
Выгрузить таблицу минимальных переходов узла
класс ИБСисПорт
Класс IBSysPort представляет собой разъем IB на передней или задней панели системы.
[Данные участника: возвращает строку *] -name
Название передней панели (шелк) порта
[Данные участника: возвращает IBSysPort *] -p_remoteSysPort
Если подключен другой боковой системный порт
[Данные участника: возвращает IBSystem *] -p_system
Система, к которой это относится
[Данные участника: возвращает IBPort *] -p_nodePort
Порт узла, к которому он подключается.
[Конструктор: возвращает IBSysPort *] Имя IBSysPort n p_sys
Конструктор
[Член: возвращает void] connect p_otherSysPort? Width? ?скорость?
Подключите два SysPort
[Член: возвращает int] отключение
Отключите SysPort (и порты). Вернуть 0 в случае успеха
класс ИБСистема
Класс IBSystem представляет собой все шасси
[Данные участника: возвращает строку *] -name
Имя "хоста" системы
[Данные участника: возвращает строку *] -тип
Что это за тип, например Cougar, Buffalo, MTS2400 и т. Д. Соответствующий файл IBNL
должен существовать - определение этого типа системы
[Данные участника: возвращает IBFabric *] -p_fabric
Ткань, к которой принадлежит система
[Данные участника: возвращает map_str_pnode *] -NodeByName
Укажите указатель узла по его имени
[Данные участника: возвращает map_str_psysport *] -PortByName
Карта, обеспечивающая указатель на SysPort по имени
[Конструктор: возвращает IBSystem *] Имя IBSystem n p_fab t
Конструктор
[Участник: возвращает new_uint64_t] guid_get
Получите GUID образа системы
[Участник: возвращает void] guid_set guid
Установите GUID образа системы
[Участник: возвращает IBSysPort *] makeSysPort pName
Убедитесь, что мы определили порт (так что определите его, если нет)
[Член: возвращает IBPort *] getSysPortNodePortByName sysPortName
Получить порт узла для данного порта sys по имени
[Участник: возвращает IBSysPort *] имя getSysPort
Получите Sys-порт по имени
класс IBFabric
Представляет всю подсеть IB, состоящую из систем
[Данные участника: возвращает map_str_pnode *] -NodeByName
Предоставьте список пар имен узлов и указателей
[Данные участника: возвращает map_str_psys *] -SystemByName
Предоставьте список пар имени системы и указателя
[Данные участника: возвращает vec_pport *] -PortByLid
Предоставляет список пар имени и указателя системного порта
[Данные участника: возвращает map_guid_pnode *] -NodeByGuid
Предоставляет список пар узловых идентификаторов и указателей узлов.
[Данные участника: возвращает map_guid_psys *] -SystemByGuid
Предоставляет список пар направляющих системного образа и системного указателя.
[Данные участника: возвращает map_guid_pport *] -PortByGuid
Предоставляет список пар портов и указателей портов.
[Данные члена: возвращает целое число без знака] -minLid
Используется минимальная крышка трека.
[Данные члена: возвращает целое число без знака] -maxLid
Следите за максимальной используемой крышкой.
[Данные члена: возвращает целое число без знака] -lmc
Используемое значение LMC
[Член: возвращает IBNode *] makeNode n p_sys type numPorts
Получить узел по его имени (создать узел не существует)
[Участник: возвращает IBNode *] имя getNode
Получите узел по его имени
[Член: возвращает list_pnode *] тип getNodesByType
Вернуть список указателей узлов, соответствующих требуемому типу
[Член: возвращает IBSystem *] имя makeGenericSystem
Создайте новую общую систему - в основном пустой контейнер для узлов ...
[Член: возвращает IBSystem *] makeSystem name type
Создайте новую систему - тип должен иметь зарегистрированную фабрику.
[Член: возвращает IBSystem *] имя getSystem
Получить систему по имени
[Член: возвращает IBSystem *] getSystemByGuid guid
получить систему по ее руководству
[Участник: возвращает IBNode *] getNodeByGuid guid
получить узел по его guid
[Участник: возвращает IBPort *] getPortByGuid guid
получить порт по его гиду
[Member: возвращает void] addCable t1 n1 p1 t2 n2 p2? Ширина? ?скорость?
Добавляет кабель с двумя наборами типа узла, имени узла и номера порта. Необязательно
используйте заданную ширину и скорость для соединения
[Член: возвращает int] parseCables fn
Разберите файл кабелей и создайте ткань
[Member: возвращает int] parseTopology fn
Разобрать файл топологии и построить структуру
[Member: возвращает int] addLink type1 numPorts1 sysGuid1 nodeGuid1 portGuid1 vend1
devId1 rev1 desc1 крышку1 portNum1 type2 numPorts2 sysGuid2 nodeGuid2 portGuid2 vend2 devId2
rev2 desc2 lid2 portNum2? width? ?скорость?
Добавьте ссылку в структуру - это создаст систему и узлы по мере необходимости.
[Член: возвращает целое число] parseSubnetLinks fn
Разберите файл OpenSM subnet.lst и создайте из него структуру.
[Член: возвращает целое число] parseFdbFile fn
Разобрать файл дампа OpenSM FDB и заполнить LFT-таблицы переключателей
[Член: возвращает целое число] parseMCFdbFile fn
Разберите файл MCFDBs OpenSM и соответствующим образом установите таблицу MFT
[Член: возвращает целое число] parsePSLFile fn
Разобрать путь к файлу сопоставления SL. Каждая строка с: src_node_guid DLID SL
Используется при проверке кредитного цикла
[Член: возвращает целое число] parseSLVLFile fn
Разобрать файл таблиц SLVL. Каждая строка содержит: sw_node_guid in_port out_port 0x (sl0) (sl1)
0x (sl2) (sl3) ...
[Member: возвращает void] setLidPort lid p_port
Установите порт на крышке
[Участник: возвращает IBPort *] крышку getPortByLid
Достать портвейн за крышку
[возвращает IBFabric *] new_IBFabric
Постройте новую ткань
[возвращает void] delete_IBFabric p_fabric
Разрушить ткань
ИБДМ функции
В этом разделе представлены подробные сведения о функциях, предоставляемых IBDM. Порядок следует за
ожидаемый порядок в обычном потоке IBDM. Все они возвращают 0 при успехе.
Subnet Утилиты
Файл содержит набор утилит для запуска в подсети, имитирующих инициализацию OpenSM.
и проанализируем результаты:
[возвращает int] ibdmAssignLids p_smNodePort? lmc?
Назначьте LID с помощью дополнительной LMC (несколько LID на порт)
[возвращает int] ibdmCalcMinHopTables p_fabric
Вычислите и заполните MinHopTables, необходимые для запуска маршрутизации в стиле OpenSM.
[возвращает int] ibdmCalcUpDnMinHopTbls p_fabric rootNodesNameRex
Вычислите и заполните таблицы MinHopTables в соответствии с правилом Up / Down.
[возвращает int] ibdmOsmRoute p_fabric
Разложите ткань с помощью трассировки в стиле OpenSM
[возвращает int] ibdmEnhancedRoute p_fabric
Маршрутизируйте структуру с помощью маршрутизации в стиле OpenSM, улучшенной с улучшенной поддержкой LMC> 0
[возвращает int] ibdmFatTreeRoute p_fabric rootNodes
Разложите ткань, используя алгоритм, который подходит только для толстых деревьев
[возвращает int] ibdmFatTreeAnalysis p_fabric
Проанализируйте ткань, чтобы увидеть, не толстое ли это дерево, и проложите ее, если она
[возвращает int] ibdmVerifyCAtoCARoutes p_fabric
Убедитесь, что все (H) CA подключены друг к другу в соответствии с настройками LFT.
[возвращает int] ibdmVerifyAllPaths p_fabric
Убедитесь, что все коммутаторы и (H) CA подключены друг к другу на основе LFT.
настройки
[возвращает int] ibdmAnalyzeLoops p_fabric
Тщательная проверка кредитных петель. Этот алгоритм выполняет полную и точную проверку
но его отчеты о путях кредитных петель трудно интерпретировать. Если ты знаешь корни
дерева (или дерево симметрично) предпочтительно использовать
ibdmReportNonUpDownCa2CaPaths
[возвращает list_pnode] ibdmFindSymmetricalTreeRoots p_fabric
Проанализируйте топологию дерева и найдите корни дерева на основе его симметрии
[возвращает list_pnode] ibdmFindRootNodesByMinHop p_fabric
На основе MinHopTable найдите корни дерева. Допускается 5% -ная асимметрия.
[возвращает int] ibdmRankFabricByRoots p_fabric rootNodes
Учитывая список корневых узлов (имен) ранжируйте узлы (root = 0)
[возвращает int] ibdmReportNonUpDownCa2CaPaths p_fabric rootNodes
Проанализируйте маршруты, чтобы убедиться, что правило Up / Down соблюдается
[возвращает int] ibdmCheckMulticastGroups p_fabric
Проверить возможность подключения многоадресной маршрутизации
[возвращает int] ibdmCheckFabricMCGrpsForCreditLoopPotential p_fabric rootNodes
Анализируйте многоадресную маршрутизацию, чтобы убедиться, что она подчиняется правилу Up / Down
[возвращает int] ibdmLinkCoverageAnalysis p_fabric rootNodes
Подготовьте расписание для передачи из набора источников в пункты назначения, чтобы
на каждом этапе нет ссылок с избыточной подпиской и после всех этапов все
звенья ткани были усилены
трассировка Утилиты
Эти функции позволяют отслеживать пути, сообщая о посещенных узлах.
[возвращает int] ibdmTraceDRPathRoute p_smNodePort drPathPortNums
Проследить направленный путь маршрута от заданного порта
[возвращает int] ibdmTraceRouteByMinHops p_fabric slid dlid
Проследите путь вдоль MinHop от LID источника к месту назначения
[возвращает int] ibdmTraceRouteByLFT p_fabric slid dlid hops p_nodesList
Проследите путь после LFT, обновляя переменные списка переходов и узлов
Топология Согласование Утилиты
Следующие утилиты сопоставляют две фабрики, предоставляя как сообщения о несоответствии, так и сообщение о несоответствии.
унифицированная ткань
[возвращает int] ibdmMatchFabrics p_spec_fabric p_discovered_fabric anchorNodeName
anchorPortNum
Сопоставьте структуру на основе топологии с обнаруженной, начиная с порта привязки
[возвращает int] ibdmBuildMergedFabric p_spec_fabric p_discovered_fabric p_merged_fabric
После сопоставления с использованием ibdmMatchFabrics заполните «объединенную структуру» информацией
объединены для согласованных узлов
Перегруженность Анализ Утилиты
Предоставлять возможность отслеживать и сообщать о переподписке по ссылкам
[возвращает int] ibdmCongInit p_fabric
Инициализировать систему слежения
[возвращает int] ibdmCongCleanup p_fabric
Очистите счетчики и освободите
[возвращает int] ibdmCongClear p_fabric
Счетчики уборки
[возвращает int] ibdmCongTrace p_fabric srcLid dstLid
Проследите путь между LID, обновляя информацию об использовании ссылки
[возвращает int] ibdmCongReport p_fabric
Сообщите полученную информацию о перегрузке
[возвращает int] ibdmCongDump p_fabric
Выгрузить всю информацию об отслеживании перегрузки
Используйте ibdmsh онлайн с помощью сервисов onworks.net