文档参见: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

09-21 05:05