我正在尝试使用net-snmp
C
api为OID设置值,我正在使用的代码片段为:
char *ltmp = "description";
char *buff = malloc(sizeof(char)*50);
strcpy(buff,ltmp);
if (!snmp_parse_oid(".1.3.6.1.4.1.2162.1.2.2.1.0", anOID, &anOID_len)) {
snmp_perror(".1.3.6.1.4.1.2162.1.2.2.1.0");
SOCK_CLEANUP;
exit(1);
} else if (snmp_pdu_add_variable(pdu, anOID, anOID_len,'s',buff, (int)strlen(buff))) {
snmp_perror(".1.3.6.1.4.1.2162.1.2.2.1.0");
}
当我运行此代码时,它会抛出以下错误
类型切换中的内部错误
数据包错误
原因:(badValue)给定的值具有错误的类型或长度。
我在这里做错了什么?
答案 0 :(得分:2)
您应该使用其中一个预定义常量作为变量类型;在这种情况下,ASN_OCTET_STR
代替s
。
来自asn1.h
:
#define ASN_BOOLEAN ((u_char)0x01)
#define ASN_INTEGER ((u_char)0x02)
#define ASN_BIT_STR ((u_char)0x03)
#define ASN_OCTET_STR ((u_char)0x04)
#define ASN_NULL ((u_char)0x05)
#define ASN_OBJECT_ID ((u_char)0x06)
#define ASN_SEQUENCE ((u_char)0x10)
#define ASN_SET ((u_char)0x11)