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

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

1 Ответ

0 голосов
/ 11 марта 2020

в поле name = "index", доступ "CommandFieldDefinition :: mayBeReadDuringCreate_ c" должен быть удален.
При создании узла CLi должен вызывать только поле "next-free".

...