📄 mib.c
字号:
const char *units)
{
if (var->type != ASN_OPAQUE_DOUBLE) {
sprintf(buf, "Wrong Type (should be Double): ");
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, "Opaque: Double:");
buf += strlen(buf);
}
sprintf(buf, " %f", *var->val.doubleVal);
buf += strlen (buf);
if (units) sprintf (buf, " %s", units);
}
#endif /* OPAQUE_SPECIAL_TYPES */
static void
sprint_opaque(char *buf,
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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
sprint_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 void
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -