Вот некоторая функция, которую я готовлю для выяснения элементов таблицы:
Если 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;
}