mib.c
来自「eCos操作系统源码」· C语言 代码 · 共 2,472 行 · 第 1/5 页
C
2,472 行
struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ if (var->type != ASN_OPAQUE#ifdef OPAQUE_SPECIAL_TYPES && var->type != ASN_OPAQUE_COUNTER64 && var->type != ASN_OPAQUE_U64 && var->type != ASN_OPAQUE_I64 && var->type != ASN_OPAQUE_FLOAT && var->type != ASN_OPAQUE_DOUBLE#endif /* OPAQUE_SPECIAL_TYPES */ ){ sprintf(buf, "Wrong Type (should be Opaque): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; }#ifdef OPAQUE_SPECIAL_TYPES switch(var->type) { case ASN_OPAQUE_COUNTER64: case ASN_OPAQUE_U64: case ASN_OPAQUE_I64: sprint_counter64(buf, var, enums, hint, units); break; case ASN_OPAQUE_FLOAT: sprint_float(buf, var, enums, hint, units); break; case ASN_OPAQUE_DOUBLE: sprint_double(buf, var, enums, hint, units); break; case ASN_OPAQUE:#endif if (!ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)){ sprintf(buf, "OPAQUE: "); buf += strlen(buf); } sprint_hexstring(buf, var->val.string, var->val_len); buf += strlen (buf);#ifdef OPAQUE_SPECIAL_TYPES }#endif if (units) sprintf (buf, " %s", units);}static voidsprint_object_identifier(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ if (var->type != ASN_OBJECT_ID){ sprintf(buf, "Wrong Type (should be OBJECT IDENTIFIER): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } if (!ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)){ sprintf(buf, "OID: "); buf += strlen(buf); } _sprint_objid(buf, (oid *)(var->val.objid), var->val_len / sizeof(oid)); buf += strlen (buf); if (units) sprintf (buf, " %s", units);}static voidsprint_timeticks(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ char timebuf[32]; if (var->type != ASN_TIMETICKS){ sprintf(buf, "Wrong Type (should be Timeticks): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } if (!ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)){ sprintf(buf, "Timeticks: (%lu) ", *(u_long *)(var->val.integer)); buf += strlen(buf); } sprintf(buf, "%s", uptimeString(*(u_long *)(var->val.integer), timebuf)); buf += strlen (buf); if (units) sprintf (buf, " %s", units);}static voidsprint_hinted_integer (char *buf, long val, const char *hint, const char *units){ char code; int shift, len; char tmp[256]; char fmt[10]; code = hint[0]; if (hint [1] == '-') { shift = atoi (hint+2); } else shift = 0; fmt[0] = '%'; fmt[1] = 'l'; fmt[2] = code; fmt[3] = 0; sprintf (tmp, fmt, val); if (shift != 0) { len = strlen (tmp); if (shift <= len) { tmp[len+1] = 0; while (shift--) { tmp[len] = tmp[len-1]; len--; } tmp[len] = '.'; } else { tmp[shift+1] = 0; while (shift) { if (len-- > 0) tmp [shift] = tmp [len]; else tmp[shift] = '0'; shift--; } tmp[0] = '.'; } } strcpy (buf, tmp);}static voidsprint_integer(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ char *enum_string = NULL; if (var->type != ASN_INTEGER){ sprintf(buf, "Wrong Type (should be INTEGER): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } for (; enums; enums = enums->next) if (enums->value == *var->val.integer){ enum_string = enums->label; break; } if (enum_string == NULL || ds_get_boolean(DS_LIBRARY_ID,DS_LIB_PRINT_NUMERIC_ENUM)) { if (hint) sprint_hinted_integer(buf, *var->val.integer, hint, units); else sprintf(buf, "%ld", *var->val.integer); } else if (ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)) sprintf(buf, "%s", enum_string); else sprintf(buf, "%s(%ld)", enum_string, *var->val.integer); buf += strlen (buf); if (units) sprintf (buf, " %s", units);}static voidsprint_uinteger(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ char *enum_string = NULL; if (var->type != ASN_UINTEGER){ sprintf(buf, "Wrong Type (should be UInteger32): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } for (; enums; enums = enums->next) if (enums->value == *var->val.integer){ enum_string = enums->label; break; } if (enum_string == NULL || ds_get_boolean(DS_LIBRARY_ID,DS_LIB_PRINT_NUMERIC_ENUM)) sprintf(buf, "%lu", *var->val.integer); else if (ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)) sprintf(buf, "%s", enum_string); else sprintf(buf, "%s(%lu)", enum_string, *var->val.integer); buf += strlen (buf); if (units) sprintf (buf, " %s", units);}static voidsprint_gauge(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ if (var->type != ASN_GAUGE){ sprintf(buf, "Wrong Type (should be Gauge): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } if (ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)) sprintf(buf, "%lu", *var->val.integer); else sprintf(buf, "Gauge: %lu", *var->val.integer); buf += strlen (buf); if (units) sprintf (buf, " %s", units);}static voidsprint_counter(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ if (var->type != ASN_COUNTER){ sprintf(buf, "Wrong Type (should be Counter): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } sprintf(buf, "%lu", *var->val.integer); buf += strlen (buf); if (units) sprintf (buf, " %s", units);}static voidsprint_networkaddress(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ int x, len; u_char *cp; if (!ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)){ sprintf(buf, "Network Address: "); buf += strlen(buf); } cp = var->val.string; len = var->val_len; for(x = 0; x < len; x++){ sprintf(buf, "%02X", *cp++); buf += strlen(buf); if (x < (len - 1)) *buf++ = ':'; }}static voidsprint_ipaddress(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ u_char *ip; if (var->type != ASN_IPADDRESS){ sprintf(buf, "Wrong Type (should be Ipaddress): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } ip = var->val.string; if (ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)) sprintf(buf, "%d.%d.%d.%d",ip[0], ip[1], ip[2], ip[3]); else sprintf(buf, "IpAddress: %d.%d.%d.%d",ip[0], ip[1], ip[2], ip[3]);}static voidsprint_null(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ if (var->type != ASN_NULL){ sprintf(buf, "Wrong Type (should be NULL): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } sprintf(buf, "NULL");}static voidsprint_bitstring(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ int len, bit; u_char *cp; char *enum_string; if (var->type != ASN_BIT_STR && var->type != ASN_OCTET_STR){ sprintf(buf, "Wrong Type (should be BIT STRING): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } if (ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)){ *buf++ = '"'; *buf = '\0'; } else { sprintf(buf, "BITS: "); buf += strlen(buf); } sprint_hexstring(buf, var->val.bitstring, var->val_len); buf += strlen(buf); if (ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)){ buf += strlen(buf); *buf++ = '"'; *buf = '\0'; } else { cp = var->val.bitstring; for(len = 0; len < (int)var->val_len; len++){ for(bit = 0; bit < 8; bit++){ if (*cp & (0x80 >> bit)){ enum_string = NULL; for (; enums; enums = enums->next) if (enums->value == (len * 8) + bit){ enum_string = enums->label; break; } if (enum_string == NULL || ds_get_boolean(DS_LIBRARY_ID,DS_LIB_PRINT_NUMERIC_ENUM)) sprintf(buf, "%d ", (len * 8) + bit); else sprintf(buf, "%s(%d) ", enum_string, (len * 8) + bit); buf += strlen(buf); } } cp ++; } }}static voidsprint_nsapaddress(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ if (var->type != ASN_NSAP){ sprintf(buf, "Wrong Type (should be NsapAddress): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } if (!ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)){ sprintf(buf, "NsapAddress: "); buf += strlen(buf); } sprint_hexstring(buf, var->val.string, var->val_len);}static voidsprint_counter64(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ char a64buf[I64CHARSZ+1]; if (var->type != ASN_COUNTER64#ifdef OPAQUE_SPECIAL_TYPES && var->type != ASN_OPAQUE_COUNTER64 && var->type != ASN_OPAQUE_I64 && var->type != ASN_OPAQUE_U64#endif ){ sprintf(buf, "Wrong Type (should be Counter64): "); buf += strlen(buf); sprint_by_type(buf, var, NULL, NULL, NULL); return; } if (!ds_get_boolean(DS_LIBRARY_ID, DS_LIB_QUICK_PRINT)){#ifdef OPAQUE_SPECIAL_TYPES if (var->type != ASN_COUNTER64) { sprintf(buf, "Opaque: "); buf += strlen(buf); }#endif#ifdef OPAQUE_SPECIAL_TYPES switch(var->type) { case ASN_OPAQUE_U64: sprintf(buf, "UInt64: "); break; case ASN_OPAQUE_I64: sprintf(buf, "Int64: "); break; case ASN_COUNTER64: case ASN_OPAQUE_COUNTER64:#endif sprintf(buf, "Counter64: ");#ifdef OPAQUE_SPECIAL_TYPES }#endif buf += strlen(buf); }#ifdef OPAQUE_SPECIAL_TYPES if (var->type == ASN_OPAQUE_I64) { printI64(a64buf, var->val.counter64); sprintf(buf, a64buf); } else#endif { printU64(a64buf, var->val.counter64); sprintf(buf, a64buf); } buf += strlen (buf); if (units) sprintf (buf, " %s", units);}static voidsprint_unknowntype(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){/* sprintf(buf, "Variable has bad type"); */ sprint_by_type(buf, var, NULL, NULL, NULL);}static voidsprint_badtype(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ sprintf(buf, "Variable has bad type");}static voidsprint_by_type(char *buf, struct variable_list *var, struct enum_list *enums, const char *hint, const char *units){ switch (var->type){ case ASN_INTEGER: sprint_integer(buf, var, enums, hint, units); break; case ASN_OCTET_STR: sprint_octet_string(buf, var, enums, hint, units); break; case ASN_BIT_STR: sprint_bitstring(buf, var, enums, hint, units); break; case ASN_OPAQUE: sprint_opaque(buf, var, enums, hint, units); break; case ASN_OBJECT_ID: sprint_object_identifier(buf, var, enums, hint, units); break; case ASN_TIMETICKS: sprint_timeticks(buf, var, enums, hint, units); break; case ASN_GAUGE: sprint_gauge(buf, var, enums, hint, units); break; case ASN_COUNTER: sprint_counter(buf, var, enums, hint, units); break; case ASN_IPADDRESS:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?