Как выяснить, находится ли запрошенный OID в таблице с net-snmp API?

Я работаю над решением для расширения агента Windows SNMP. Одновременно я использую Net-SNMP для чтения и загрузки OID из файлов MIB. Сопоставление старых объектов SNMP с объектами Net-SNMP — тяжелая работа в C ++, и я сделал это строго. Теперь возникает множество проблем с запросами Set, Get-Next для объектов Table.

Важно то, как установить OID, который теперь ссылается на записи таблицы или поля.

Как я могу проверить, является ли запрошенный OID для запроса Get или Set полем или записями таблицы в MIB с Net-SNMP API?

0

Решение

Вот некоторая функция, которую я готовлю для выяснения элементов таблицы:

Если Oid является полем таблицы:

BOOL IsInTable(AsnObjectIdentifier pAsnOid) {
char *          szOidTemp;
char *          pch;
oid             root[MAX_OID_LEN];
size_t          rootlen;

SnmpMgrOidToStr(&pAsnOid, &szOidTemp);

memset(root, 0, sizeof(root));
rootlen = MAX_OID_LEN;
if (snmp_parse_oid(szOidTemp, root, &rootlen) == NULL) {
snmp_perror(szOidTemp);
//exit(1);
return false;
}

struct tree    *tbl = NULL;
tbl = get_tree(root, rootlen, get_tree_head());

if (tbl) {
if (tbl->parent && strstr(strlwr(tbl->parent->label), "entry") > 0) {
return true;
}
}
return false;
}

Если Oid является корнем таблицы:

BOOL IsTableRoot(AsnObjectIdentifier pAsnOid) {
char *          szOidTemp;
char *          pch;
oid             root[MAX_OID_LEN];
size_t          rootlen;

SnmpMgrOidToStr(&pAsnOid, &szOidTemp);

memset(root, 0, sizeof(root));
rootlen = MAX_OID_LEN;
if (snmp_parse_oid(szOidTemp, root, &rootlen) == NULL) {
snmp_perror(szOidTemp);
//exit(1);
return false;
}

struct tree    *tbl = NULL;
tbl = get_tree(root, rootlen, get_tree_head());

if (tbl) {
if (strstr(strlwr(tbl->label), "table") > 0) {
return true;
}
}
return false;
}

Если Oid является записью или первым дочерним элементом таблицы:

BOOL IsTableEntry(AsnObjectIdentifier pAsnOid) {
char *          szOidTemp;
char *          pch;
oid             root[MAX_OID_LEN];
size_t          rootlen;

SnmpMgrOidToStr(&pAsnOid, &szOidTemp);

memset(root, 0, sizeof(root));
rootlen = MAX_OID_LEN;
if (snmp_parse_oid(szOidTemp, root, &rootlen) == NULL) {
snmp_perror(szOidTemp);
//exit(1);
return false;
}

struct tree    *tbl = NULL;
tbl = get_tree(root, rootlen, get_tree_head());

if (tbl) {
if (strstr(strlwr(tbl->label), "entry") > 0) {
return true;
}
}
return false;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]