⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmp.xs

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 XS
📖 第 1 页 / 共 5 页
字号:
	case SNMP_NOSUCHOBJECT:	case SNMP_NOSUCHINSTANCE:	    return(type);	    break;	case ASN_UINTEGER:            return(TYPE_UINTEGER);	    break;	case ASN_COUNTER64:            return(TYPE_COUNTER64);	    break;	default:            warn("translate_asn_type: unhandled asn type (%d)\n",type);            return(TYPE_OTHER);            break;        }}#define USE_BASIC 0#define USE_ENUMS 1#define USE_SPRINT_VALUE 2static int__snprint_value (buf, buf_len, var, tp, type, flag)char * buf;size_t buf_len;netsnmp_variable_list * var;struct tree * tp;int type;int flag;{   int len = 0;   u_char* ip;   struct enum_list *ep;   buf[0] = '\0';   if (flag == USE_SPRINT_VALUE) {	snprint_value(buf, buf_len, var->name, var->name_length, var);	len = strlen(buf);   } else {     switch (var->type) {        case ASN_INTEGER:           if (flag == USE_ENUMS) {              for(ep = tp->enums; ep; ep = ep->next) {                 if (ep->value == *var->val.integer) {                    strcpy(buf, ep->label);                    len = strlen(buf);                    break;                 }              }           }           if (!len) {              sprintf(buf,"%ld", *var->val.integer);              len = strlen(buf);           }           break;        case ASN_GAUGE:        case ASN_COUNTER:        case ASN_TIMETICKS:        case ASN_UINTEGER:           sprintf(buf,"%lu", (unsigned long) *var->val.integer);           len = strlen(buf);           break;        case ASN_OCTET_STR:        case ASN_OPAQUE:           memcpy(buf, (char*)var->val.string, var->val_len);           len = var->val_len;           break;        case ASN_IPADDRESS:          ip = (u_char*)var->val.string;          sprintf(buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);          len = strlen(buf);          break;        case ASN_NULL:           break;        case ASN_OBJECT_ID:          __sprint_num_objid(buf, (oid *)(var->val.objid),                             var->val_len/sizeof(oid));          len = strlen(buf);          break;	case SNMP_ENDOFMIBVIEW:          sprintf(buf,"%s", "ENDOFMIBVIEW");	  break;	case SNMP_NOSUCHOBJECT:	  sprintf(buf,"%s", "NOSUCHOBJECT");	  break;	case SNMP_NOSUCHINSTANCE:	  sprintf(buf,"%s", "NOSUCHINSTANCE");	  break;        case ASN_COUNTER64:#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES        case ASN_OPAQUE_COUNTER64:        case ASN_OPAQUE_U64:#endif          printU64(buf,(struct counter64 *)var->val.counter64);          len = strlen(buf);          break;#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES        case ASN_OPAQUE_I64:          printI64(buf,(struct counter64 *)var->val.counter64);          len = strlen(buf);          break;#endif        case ASN_BIT_STR:            snprint_bitstring(buf, sizeof(buf), var, NULL, NULL, NULL);            len = strlen(buf);            break;#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES        case ASN_OPAQUE_FLOAT:	  if (var->val.floatVal)	    sprintf(buf,"%f", *var->val.floatVal);         break;                 case ASN_OPAQUE_DOUBLE:	  if (var->val.doubleVal)	    sprintf(buf,"%f", *var->val.doubleVal);         break;#endif                 case ASN_NSAP:        default:           warn("snprint_value: asn type not handled %d\n",var->type);     }   }   return(len);}static int__sprint_num_objid (buf, objid, len)char *buf;oid *objid;int len;{   int i;   buf[0] = '\0';   for (i=0; i < len; i++) {	sprintf(buf,".%lu",*objid++);	buf += strlen(buf);   }   return SUCCESS;}static int__tp_sprint_num_objid (buf, tp)char *buf;SnmpMibNode *tp;{   oid newname[MAX_OID_LEN], *op;   /* code taken from get_node in snmp_client.c */   for (op = newname + MAX_OID_LEN - 1; op >= newname; op--) {      *op = tp->subid;      tp = tp->parent;      if (tp == NULL) break;   }   return __sprint_num_objid(buf, op, newname + MAX_OID_LEN - op);}static int__scan_num_objid (buf, objid, len)char *buf;oid *objid;size_t *len;{   char *cp;   *len = 0;   if (*buf == '.') buf++;   cp = buf;   while (*buf) {      if (*buf++ == '.') {         sscanf(cp, "%lu", objid++);         /* *objid++ = atoi(cp); */         (*len)++;         cp = buf;      } else {         if (isalpha((int)*buf)) {	    return FAILURE;         }      }   }   sscanf(cp, "%lu", objid++);   /* *objid++ = atoi(cp); */   (*len)++;   return SUCCESS;}static int__get_type_str (type, str)int type;char * str;{   switch (type) {	case TYPE_OBJID:       		strcpy(str, "OBJECTID");	        break;	case TYPE_OCTETSTR:       		strcpy(str, "OCTETSTR");	        break;	case TYPE_INTEGER:       		strcpy(str, "INTEGER");	        break;	case TYPE_INTEGER32:       		strcpy(str, "INTEGER32");	        break;	case TYPE_UNSIGNED32:       		strcpy(str, "UNSIGNED32");	        break;	case TYPE_NETADDR:       		strcpy(str, "NETADDR");	        break;	case TYPE_IPADDR:       		strcpy(str, "IPADDR");	        break;	case TYPE_COUNTER:       		strcpy(str, "COUNTER");	        break;	case TYPE_GAUGE:       		strcpy(str, "GAUGE");	        break;	case TYPE_TIMETICKS:       		strcpy(str, "TICKS");	        break;	case TYPE_OPAQUE:       		strcpy(str, "OPAQUE");	        break;	case TYPE_COUNTER64:       		strcpy(str, "COUNTER64");	        break;	case TYPE_NULL:                strcpy(str, "NULL");                break;	case SNMP_ENDOFMIBVIEW:                strcpy(str, "ENDOFMIBVIEW");                break;	case SNMP_NOSUCHOBJECT:                strcpy(str, "NOSUCHOBJECT");                break;	case SNMP_NOSUCHINSTANCE:                strcpy(str, "NOSUCHINSTANCE");                break;	case TYPE_UINTEGER:                strcpy(str, "UINTEGER"); /* historic - should not show up */                                          /* but it does?                  */                break;	case TYPE_NOTIFTYPE:		strcpy(str, "NOTIF");		break;	case TYPE_BITSTRING:		strcpy(str, "BITS");		break;	case TYPE_TRAPTYPE:		strcpy(str, "TRAP");		break;	case TYPE_OTHER: /* not sure if this is a valid leaf type?? */	case TYPE_NSAPADDRESS:        default: /* unsupported types for now */           strcpy(str, "");           return(FAILURE);   }   return SUCCESS;}/* does a destructive disection of <label1>...<labeln>.<iid> returning   <labeln> and <iid> in seperate strings (note: will destructively   alter input string, 'name') */static int__get_label_iid (name, last_label, iid, flag)char * name;char ** last_label;char ** iid;int flag;{   char *lcp;   char *icp;   int len = strlen(name);   int found_label = 0;   *last_label = *iid = NULL;   if (len == 0) return(FAILURE);   /* Handle case where numeric oid's have been requested.  The input 'name'   ** in this case should be a numeric OID -- return failure if not.   */   if ((flag & USE_NUMERIC_OIDS)) {      if (!__is_numeric_oid(name))       return(FAILURE);      /* Walk backward through the string, looking for first two '.' chars */      lcp = &(name[len]);      icp = NULL;      while (lcp > name) {       if (*lcp == '.') {          /* If this is the first occurence of '.', note it in icp.          ** Otherwise, this must be the second occurrence, so break          ** out of the loop.          */          if (icp == NULL)             icp = lcp;          else             break;       }       lcp --;      }      /* Make sure we found at least a label and index. */      if (!icp)         return(FAILURE);      /* Push forward past leading '.' chars and separate the strings. */      lcp ++;      *icp ++ = '\0';      *last_label = (flag & USE_LONG_NAMES) ? name : lcp;      *iid        = icp;      return(SUCCESS);   }   lcp = icp = &(name[len]);   while (lcp > name) {      if (*lcp == '.') {	if (found_label) {	   lcp++;           break;        } else {           icp = lcp;        }      }      if (!found_label && isalpha((int)*lcp)) found_label = 1;      lcp--;   }   if (!found_label || (!isdigit((int)*(icp+1)) && (flag & FAIL_ON_NULL_IID)))      return(FAILURE);   if (flag & NON_LEAF_NAME) { /* dont know where to start instance id */     /* put the whole thing in label */     icp = &(name[len]);     flag |= USE_LONG_NAMES;     /* special hack in case no mib loaded - object identifiers will      * start with .iso.<num>.<num>...., in which case it is preferable      * to make the label entirely numeric (i.e., convert "iso" => "1")      */      if (*lcp == '.' && lcp == name) {         if (!strncmp(".ccitt.",lcp,7)) {            name += 2;            *name = '.';            *(name+1) = '0';         } else if (!strncmp(".iso.",lcp,5)) {            name += 2;            *name = '.';            *(name+1) = '1';         } else if (!strncmp(".joint-iso-ccitt.",lcp,17)) {            name += 2;            *name = '.';            *(name+1) = '2';         }      }   } else if (*icp) {      *(icp++) = '\0';   }   *last_label = (flag & USE_LONG_NAMES ? name : lcp);   *iid = icp;   return(SUCCESS);}static int__oid_cmp(oida_arr, oida_arr_len, oidb_arr, oidb_arr_len)oid *oida_arr;size_t oida_arr_len;oid *oidb_arr;size_t oidb_arr_len;{   for (;oida_arr_len && oidb_arr_len;	oida_arr++, oida_arr_len--, oidb_arr++, oidb_arr_len--) {	if (*oida_arr == *oidb_arr) continue;	return(*oida_arr > *oidb_arr ? 1 : -1);   }   if (oida_arr_len == oidb_arr_len) return(0);   return(oida_arr_len > oidb_arr_len ? 1 : -1);}/* Convert a tag (string) to an OID array              *//* Tag can be either a symbolic name, or an OID string */static struct tree *__tag2oid(tag, iid, oid_arr, oid_arr_len, type, best_guess)char * tag;char * iid;oid  * oid_arr;size_t * oid_arr_len;int  * type;int    best_guess;{   struct tree *tp = NULL;   struct tree *rtp = NULL;   oid newname[MAX_OID_LEN], *op;   size_t newname_len = 0;   char str_buf[STR_BUF_SIZE];   str_buf[0] = '\0';   if (type) *type = TYPE_UNKNOWN;   if (oid_arr_len) *oid_arr_len = 0;   if (!tag) goto done;   /*********************************************************/   /* best_guess = 0 - same as no switches (read_objid)     */   /*                  if multiple parts, or uses find_node */   /*                  if a single leaf                     */   /* best_guess = 1 - same as -Ib (get_wild_node)          */   /* best_guess = 2 - same as -IR (get_node)               */   /*********************************************************/   /* numeric scalar                (1,2) */   /* single symbolic               (1,2) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -