Как я могу использовать имя как res-id вместо индекса в таблице MIB с двумя ключевыми индексами

[описание проблемы]
Я определил таблицу 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: указанный экземпляр не существует.

[примечание]
Пожалуйста, помогите проверить код и найти причину сбоя сопоставления имени и идентификатора. Кстати, я попробовал сопоставление имени и идентификатора в таблице MIB индекса signle, проблем нет. Я не знаю, почему один и тот же код может дать сбой в таблице MIB с двумя индексами.


person Barret Ren    schedule 11.03.2020    source источник


Ответы (1)


в поле name="index" следует удалить доступ "CommandFieldDefinition::mayBeReadDuringCreate_c".
Во время создания узла CLi должен вызывать только поле "следующее свободное".

person Barret Ren    schedule 11.03.2020