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

📄 mib.c

📁 -
💻 C
📖 第 1 页 / 共 2 页
字号:
    default:	sprint_badtype(buf, enums, quiet);	break;    }}#endifstatic struct snmp_mib_tree *get_symbol();oid RFC1066_MIB[] ={1, 3, 6, 1, 2, 1};unsigned char RFC1066_MIB_text[] = ".iso.org.dod.internet.mgmt.mib";struct snmp_mib_tree *Mib;#if 0static voidset_functions(subtree)     struct snmp_mib_tree *subtree;{    for (; subtree; subtree = subtree->next_peer) {	switch (subtree->type) {	case TYPE_OBJID:	    subtree->printer = sprint_object_identifier;	    break;	case TYPE_OCTETSTR:	    subtree->printer = sprint_octet_string;	    break;	case TYPE_INTEGER:	    subtree->printer = sprint_integer;	    break;	case TYPE_NETADDR:	    subtree->printer = sprint_networkaddress;	    break;	case TYPE_IPADDR:	    subtree->printer = sprint_ipaddress;	    break;	case TYPE_COUNTER:	    subtree->printer = sprint_counter;	    break;	case TYPE_GAUGE:	    subtree->printer = sprint_gauge;	    break;	case TYPE_TIMETICKS:	    subtree->printer = sprint_timeticks;	    break;	case TYPE_OPAQUE:	    subtree->printer = sprint_opaque;	    break;	case TYPE_NULL:	    subtree->printer = sprint_null;	    break;	case TYPE_OTHER:	default:	    subtree->printer = sprint_unknowntype;	    break;	}	set_functions(subtree->child_list);    }}#endifvoid init_mib(char *file){    if (Mib != NULL)	return;    if (file != NULL)	Mib = read_mib(file);#if 0    set_functions(Mib);#endif}static struct snmp_mib_tree *find_rfc1066_mib(root)     struct snmp_mib_tree *root;{    oid *op = RFC1066_MIB;    struct snmp_mib_tree *tp;    int len;    for (len = sizeof(RFC1066_MIB) / sizeof(oid); len; len--, op++) {	for (tp = root; tp; tp = tp->next_peer) {	    if (tp->subid == *op) {		root = tp->child_list;		break;	    }	}	if (tp == NULL)	    return NULL;    }    return root;}static intlc_cmp(s1, s2)     char *s1, *s2;{    char c1, c2;    while (*s1 && *s2) {	if (isupper(*s1))	    c1 = tolower(*s1);	else	    c1 = *s1;	if (isupper(*s2))	    c2 = tolower(*s2);	else	    c2 = *s2;	if (c1 != c2)	    return ((c1 - c2) > 0 ? 1 : -1);	s1++;	s2++;    }    if (*s1)	return -1;    if (*s2)	return 1;    return 0;}static intparse_subtree(subtree, input, output, out_len)     struct snmp_mib_tree *subtree;     char *input;     oid *output;     int *out_len;		/* number of subid's */{    char buf[128], *to = buf;    u_int subid = 0;    struct snmp_mib_tree *tp;    /*     * No empty strings.  Can happen if there is a trailing '.' or two '.'s     * in a row, i.e. "..".     */    if ((*input == '\0') ||	(*input == '.'))	return (0);    if (isdigit(*input)) {	/*	 * Read the number, then try to find it in the subtree.	 */	while (isdigit(*input)) {	    subid *= 10;	    subid += *input++ - '0';	}	for (tp = subtree; tp; tp = tp->next_peer) {	    if (tp->subid == subid)		goto found;	}	tp = NULL;    } else {	/*	 * Read the name into a buffer.	 */	while ((*input != '\0') &&	    (*input != '.')) {	    *to++ = *input++;	}	*to = '\0';	/*	 * Find the name in the subtree;	 */	for (tp = subtree; tp; tp = tp->next_peer) {	    if (lc_cmp(tp->label, buf) == 0) {		subid = tp->subid;		goto found;	    }	}	/*	 * If we didn't find the entry, punt...	 */	if (tp == NULL) {	    snmplib_debug(0, "sub-identifier not found: %s\n", buf);	    return (0);	}    }  found:    if (subid > (u_int) MAX_SUBID) {	snmplib_debug(0, "sub-identifier too large: %s\n", buf);	return (0);    }    if ((*out_len)-- <= 0) {	snmplib_debug(0, "object identifier too long\n");	return (0);    }    *output++ = subid;    if (*input != '.')	return (1);    if ((*out_len =	    parse_subtree(tp ? tp->child_list : NULL, ++input, output, out_len)) == 0)	return (0);    return (++*out_len);}int read_objid(input, output, out_len)     char *input;     oid *output;     int *out_len;		/* number of subid's in "output" */{    struct snmp_mib_tree *root = Mib;    oid *op = output;    int i;    if (*input == '.')	input++;    else {	root = find_rfc1066_mib(root);	for (i = 0; i < sizeof(RFC1066_MIB) / sizeof(oid); i++) {	    if ((*out_len)-- > 0)		*output++ = RFC1066_MIB[i];	    else {		snmplib_debug(0, "object identifier too long\n");		return (0);	    }	}    }    if (root == NULL) {	snmplib_debug(0, "Mib not initialized.\n");	return 0;    }    if ((*out_len = parse_subtree(root, input, output, out_len)) == 0)	return (0);    *out_len += output - op;    return (1);}void print_objid(objid, objidlen)     oid *objid;     int objidlen;		/* number of subidentifiers */{    char buf[256];    struct snmp_mib_tree *subtree = Mib;    *buf = '.';			/* this is a fully qualified name */    get_symbol(objid, objidlen, subtree, buf + 1);    snmplib_debug(7, "%s\n", buf);}void sprint_objid(buf, objid, objidlen)     char *buf;     oid *objid;     int objidlen;		/* number of subidentifiers */{    struct snmp_mib_tree *subtree = Mib;    *buf = '.';			/* this is a fully qualified name */    get_symbol(objid, objidlen, subtree, buf + 1);}#if 0void print_variable(objid, objidlen, pvariable)     oid *objid;     int objidlen;     struct variable_list *pvariable;{    char buf[1024], *cp;    struct snmp_mib_tree *subtree = Mib;    *buf = '.';			/* this is a fully qualified name */    subtree = get_symbol(objid, objidlen, subtree, buf + 1);    cp = buf;    if ((strlen(buf) >= strlen((char *) RFC1066_MIB_text)) && !memcmp(buf, (char *) RFC1066_MIB_text,	    strlen((char *) RFC1066_MIB_text))) {	cp += sizeof(RFC1066_MIB_text);    }    printf("Name: %s -> ", cp);    *buf = '\0';    if (subtree->printer)	(*subtree->printer) (buf, pvariable, subtree->enums, 0);    else {	sprint_by_type(buf, pvariable, subtree->enums, 0);    }    printf("%s\n", buf);}void sprint_variable(buf, objid, objidlen, pvariable)     char *buf;     oid *objid;     int objidlen;     struct variable_list *pvariable;{    char tempbuf[512], *cp;    struct snmp_mib_tree *subtree = Mib;    *tempbuf = '.';		/* this is a fully qualified name */    subtree = get_symbol(objid, objidlen, subtree, tempbuf + 1);    cp = tempbuf;    if ((strlen(buf) >= strlen((char *) RFC1066_MIB_text)) && !memcmp(buf, (char *) RFC1066_MIB_text,	    strlen((char *) RFC1066_MIB_text))) {	cp += sizeof(RFC1066_MIB_text);    }    sprintf(buf, "Name: %s -> ", cp);    buf += strlen(buf);    if (subtree->printer)	(*subtree->printer) (buf, pvariable, subtree->enums, 0);    else {	sprint_by_type(buf, pvariable, subtree->enums, 0);    }    strcat(buf, "\n");}void sprint_value(buf, objid, objidlen, pvariable)     char *buf;     oid *objid;     int objidlen;     struct variable_list *pvariable;{    char tempbuf[512];    struct snmp_mib_tree *subtree = Mib;    subtree = get_symbol(objid, objidlen, subtree, tempbuf);    if (subtree->printer)	(*subtree->printer) (buf, pvariable, subtree->enums, 0);    else {	sprint_by_type(buf, pvariable, subtree->enums, 0);    }}void print_value(objid, objidlen, pvariable)     oid *objid;     int objidlen;     struct variable_list *pvariable;{    char tempbuf[512];    struct snmp_mib_tree *subtree = Mib;    subtree = get_symbol(objid, objidlen, subtree, tempbuf);    if (subtree->printer)	(*subtree->printer) (tempbuf, pvariable, subtree->enums, 0);    else {	sprint_by_type(tempbuf, pvariable, subtree->enums, 0);    }    printf("%s\n", tempbuf);}#endifstatic struct snmp_mib_tree *get_symbol(objid, objidlen, subtree, buf)     oid *objid;     int objidlen;     struct snmp_mib_tree *subtree;     char *buf;{    struct snmp_mib_tree *return_tree = NULL;    for (; subtree; subtree = subtree->next_peer) {	if (*objid == subtree->subid) {	    strcpy(buf, subtree->label);	    goto found;	}    }    /* subtree not found */    while (objidlen--) {	/* output rest of name, uninterpreted */	sprintf(buf, "%u.", *objid++);	while (*buf)	    buf++;    }    *(buf - 1) = '\0';		/* remove trailing dot */    return NULL;  found:    if (objidlen > 1) {	while (*buf)	    buf++;	*buf++ = '.';	*buf = '\0';	return_tree = get_symbol(objid + 1, objidlen - 1, subtree->child_list, buf);    }    if (return_tree != NULL)	return return_tree;    else	return subtree;}#if 0void print_variable_list(variable_list * V){    print_variable(V->name, V->name_length, V);}void print_variable_list_value(variable_list * pvariable){    char buf[512];    struct snmp_mib_tree *subtree = Mib;    *buf = '.';			/* this is a fully qualified name */    subtree = get_symbol(pvariable->name, pvariable->name_length, subtree, buf + 1);    *buf = '\0';    if (subtree->printer)	(*subtree->printer) (buf, pvariable, subtree->enums, 1);    else {	sprint_by_type(buf, pvariable, subtree->enums, 1);    }    printf("%s", buf);}#endifvoid print_type(variable_list * var){    switch (var->type) {    case SMI_INTEGER:	printf("Integer");	break;    case SMI_STRING:	printf("Octet String");	break;    case SMI_OPAQUE:	printf("Opaque");	break;    case SMI_OBJID:	printf("Object Identifier");	break;    case SMI_TIMETICKS:	printf("Timeticks");	break;    case SMI_GAUGE32:	printf("Gauge");	break;    case SMI_COUNTER32:	printf("Counter");	break;    case SMI_IPADDRESS:	printf("IP Address");	break;    case SMI_NULLOBJ:	printf("NULL");	break;    default:	printf("Unknown type %d\n", var->type);	break;    }}void print_oid_nums(oid * O, int len){    int x;    for (x = 0; x < len; x++)	printf(".%u", O[x]);}

⌨️ 快捷键说明

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