[ описание проблемы ]
Я определил таблицу MIB с двумя индексами, таблица выглядит так:
TerminationEntry OBJECT-TYPE
SYNTAX TerminationEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"An entry in the terminationTable ."
INDEX {ifIndex, TkId}
::= {terminationTable 1}
А таблица сопоставления Tkname и TkId:
TkMappingEntry::=
SEQUENCE
{
tkMappingName OCTET STRING,
tkMappingId INTEGER
}
В CLI я определил два сопоставления res-id с этими двумя индексами. А для TkId пользователь должен ввести TkName, и TkName может быть сопоставлено с TkId. CLI XML выглядит следующим образом:
<parameters>
<res-id uname="if-index" parameter-type="Itf::Line">
<help>The unique internal identifier of the termination port</help>
<fields>
<field name="">
<mib-index name="ifIndex"/>
</field>
</fields>
</res-id>
<res-id name="tkgname" parameter-type="Sip::TkName">
<help>The name of Tk.</help>
<fields>
<field name="" access="CommandFieldDefinition::mayBeReadDuringDisplay_c |
CommandFieldDefinition::mayBeWrittenDuringCreate_c">
<mib-var tree-node="NODEterminationTkName" table-name="terminationTable "/>
<mib-index name="tkMappingName"/>
</field>
</fields>
</res-id>
<parameters>
...
<fields>
<field name="index" basic-type="Sip::TkId"
access="CommandFieldDefinition::mayBeReadDuringPrepare_c |
CommandFieldDefinition::mayBeReadDuringModify_c |
CommandFieldDefinition::mayBeReadDuringCommit_c |
CommandFieldDefinition::mayBeReadDuringDelete_c |
CommandFieldDefinition::mayBeReadDuringIn_c |
CommandFieldDefinition::mayBeReadDuringDisplay_c |
CommandFieldDefinition::mayBeReadDuringCreate_c">
<mib-var tree-node="NODEtkMappingId" table-name="tkMappingTable"/>
<mib-index name="terminationTkId"/>
</field>
<field name="next-free" basic-type="Sip::TrunkGroupId" access="CommandFieldDefinition::mayBeReadDuringCreate_c">
<mib-var tree-node="NODE_tkIdNext" table-name="SnmpAgent::localScalarTable_m"/>
<mib-index name="terminationTkId"/>
</field>
</fields>
Но во время тестирования я обнаружил, что при вводе несуществующего TkName вызывается следующее свободное поле и свободный индекс сохраняется в узле tkIdNext. Но это не переводится в окончание TkId. Так что моя команда CLI не выполнена, и я получаю сообщение об ошибке на CLI: указанный экземпляр не существует.
[ note ]
Помогите, пожалуйста, проверить код и помочь мне выяснить, почему Отображение имени / идентификатора не удалось. Кстати, я пробовал сопоставление имени и идентификатора в таблице MIB индекса signle, проблем нет. Я не знаю, почему один и тот же код может быть с ошибкой в таблице MIB с двумя индексами.