对net-snmp中netsnmp_variable_list的理解

原文地址:点击打开链接

文档参见:http://www.net-snmp.org/dev/agent/structvariable__list.html

snmp_variable_list是variable_list的typedef
其实 snmp_variable_list相当于是snmp_variable_list类型链表的某一个元素,而不是整个链表 它里面放了一个snmp变量的相关信息。
snmp_variable_list里的next_variable 是指向这个链表的下一个snmp_variable_list元素的指针
name 是这个元素对应的oid的指针。name指向的是一个int类型的数组,这个数组里面放的就是这个元素的oid
name_length 是name指的那个装有oid的int型数组的长度。说白了就是这个元素的oid的长度
type 是这个元素的类型。常用的有:ASN_OBJECT_ID,ASN_INTEGER,ASN_OCTET_STR,ASN_FLOAT,ASN_INTEGER64,ASN_TIMETICKS,ASN_IPADDRESS,ASN_COUNTER,ASN_GAUGE等等。
val 是一个netsnmp_vardata类型的变量。netsnmp_vardata的文档在:http://www.net-snmp.org/dev/agent/unionnetsnmp__vardata.html。netsnmp_vardata里面integer是指向ASN_INTEGER型结果的指针,string是指向ASN_OCTET_STR类型结果的指针,objid是指向ASN_OBJECT_ID类型的指针等等。
val_len 是存放这个元素的值的内存的大小。如果这个值是一个ASN_OCTET_STR的元素,那么这个元素的长度就是val_len/sizeof(char),同样的,如果这个值是一个oid,那么存放这个oid的int类型数组的长度就是val_len/sizeof(int)
name_loc 是一个oid类型的数组,这个数组存放的其实就是这个元素的oid。
name_loc和name前者是一个指向这个元素oid的指针,后者是存放这个元素oid的数组。这两者都可以取到这个元素的oid
buf 是个u_char类型的数组。如果这个元素的值的在内存中的长度小于40(有百分之九十的可能性是这样),那么buf里面就放的这个元素的值。如果这个元素的值在内存中的长度大于40,buf里面就不知道放的什么乱七八糟的了。 对于ASN_TIMETICKS类型的值来说 ,buf里面放的是一个int类型的指针,指针的值是这个元素的值的地址,*(vars->buf)这样可以取出这个值。 对于ASN_OCTET_STR类型的值来说 ,如果长度小于40,那么buf里买面就放的这个字符串。 对于ASN_OBJECT_ID类型的值来说 ,buf里面装的是oid的值,只不过是这也样子的: .1.3.6.1.6.3.16.2.2.1 在buf里面的值是 .1.0.0.0.3.0.0.0.6.0.0.0.1.0.0.0.6.0.0.0.3.0.0.0.16.0.0.0.2.0.0.0.2.0.0.0.1.0.0.0

你可能感兴趣的:(#,[NetWork],SNMP)