Я изучаю net-snmp код базы. Разбор MIB.net-snmp parse code, Как разобрать MIB?
Код parse.c and parse.h
хранит хэш-ведро. (indexed bucket (tree list))
.
Существует также структура дерева, который содержит следующий указатель, указывающий на Next node in hashed list of names.
struct tree{
.
.
struct tree *next; // Next node in hashed list of names
int modid; // The module containing this node
}
Я напечатал MIB,
SNMP-ОСНОВА-MIB: snmpFrameworkMIB (10) тип = 24 Далее -> 'ifOutErrors ipSystemStatsHCOctetGroup ipSystemStatsOutFragReqds ifStackGroup2'
Я не мог понять, что такое соотношение между т имя объекта появляется после Next->?
Каковы критерии, на основе которых имена объектов совпадают? Код не ясен для меня на этом этапе.
Что такое modid? Его значение не равно модулю OID!
ПРИМЕЧАНИЕ: Для целей чистоты перемещения в MIB-дереве есть * ребенок, * родительский & * равный! Также modid
не является частью OID.
структура данных под названием «модуль совместимости» в parse.h:
struct module_compatability {
const char *old_module;
const char *new_module;
const char *tag; /* NULL implies unconditional replacement,
* otherwise node identifier or prefix */
size_t tag_len; /* 0 implies exact match (or unconditional) */
struct module_compatability *next; /* linked list */
};
Что такое использование этой структуры? Совместимо в каком смысле?
Нет, modid 'не является частью модуля OID (он слышал, как это). Также «next» - это указатель на узел, а «следующий» - не для перемещения. Для цели чисто пересечения есть * child, * parent & * peer даны! ... next имеет некоторое отношение к ведро хэша (некоторая внутренняя цель algo), и я не могу это понять. –
Это просто внутренний указатель, используемый для разрешения конфликтов, когда mibs хранятся в хеш-таблице. см., например, http://en.wikipedia.org/wiki/Hash_table#Separate_chaining. Таким образом, mibs в '-> next' - это просто другие mib, чья хэш-функция разрешается в том же ведре в хеш-таблице. – nos