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

📄 client_intf.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
      getlabel_flag |= USE_LONG_NAMES;    if (py_netsnmp_attr_long(session, "UseNumeric"))      getlabel_flag |= USE_NUMERIC_OIDS;    if (py_netsnmp_attr_long(session, "UseEnums"))      sprintval_flag = USE_ENUMS;    if (py_netsnmp_attr_long(session, "UseSprintValue"))      sprintval_flag = USE_SPRINT_VALUE;	    best_guess = py_netsnmp_attr_long(session, "BestGuess");    retry_nosuch = py_netsnmp_attr_long(session, "RetryNoSuch");          pdu = snmp_pdu_create(SNMP_MSG_GET);    if (varlist) {      PyObject *varlist_iter = PyObject_GetIter(varlist);      while (varlist_iter && (varbind = PyIter_Next(varlist_iter))) {	tag = py_netsnmp_attr_string(varbind, "tag");	iid = py_netsnmp_attr_string(varbind, "iid");	tp = __tag2oid(tag, iid, oid_arr, &oid_arr_len, 		       NULL, best_guess);	if (oid_arr_len) {	  snmp_add_null_var(pdu, oid_arr, oid_arr_len);	  varlist_len++;	} else {	  if (verbose)	    printf("error: get: unknown object ID (%s)",		   (tag ? tag : "<null>"));	  snmp_free_pdu(pdu);	  goto done;	}	/* release reference when done */	Py_DECREF(varbind);      }      Py_DECREF(varlist_iter);      if (PyErr_Occurred()) {	/* propagate error */	if (verbose)	  printf("error: get: unknown python error");	snmp_free_pdu(pdu);	goto done;      }    }    status = __send_sync_pdu(ss, pdu, &response, retry_nosuch, 			     err_str, &err_num, &err_ind);    /*    ** Set up for numeric or full OID's, if necessary.  Save the old    ** output format so that it can be restored when we finish -- this    ** is a library-wide global, and has to be set/restored for each    ** session.    */    old_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID,				    NETSNMP_DS_LIB_OID_OUTPUT_FORMAT);    if (py_netsnmp_attr_long(session, "UseLongNames")) {      getlabel_flag |= USE_LONG_NAMES;      netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,			 NETSNMP_DS_LIB_OID_OUTPUT_FORMAT,			 NETSNMP_OID_OUTPUT_FULL);    }    /* Setting UseNumeric forces UseLongNames on so check for UseNumeric       after UseLongNames (above) to make sure the final outcome of        NETSNMP_DS_LIB_OID_OUTPUT_FORMAT is NETSNMP_OID_OUTPUT_NUMERIC */    if (py_netsnmp_attr_long(session, "UseNumeric")) {      getlabel_flag |= USE_LONG_NAMES;      getlabel_flag |= USE_NUMERIC_OIDS;      netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,			 NETSNMP_DS_LIB_OID_OUTPUT_FORMAT,			 NETSNMP_OID_OUTPUT_NUMERIC);    }    val_tuple = PyTuple_New(varlist_len);    /* initialize return tuple */    for (varlist_ind = 0; varlist_ind < varlist_len; varlist_ind++) {      PyTuple_SetItem(val_tuple, varlist_ind, Py_BuildValue(""));    }    for(vars = (response ? response->variables : NULL), varlist_ind = 0;	vars && (varlist_ind < varlist_len);	vars = vars->next_variable, varlist_ind++) {      varbind = PySequence_GetItem(varlist, varlist_ind);      if (PyObject_HasAttrString(varbind, "tag")) {	*str_buf = '.';	*(str_buf+1) = '\0';	out_len = 0;	tp = netsnmp_sprint_realloc_objid_tree(&str_bufp, &str_buf_len,					       &out_len, 0, &buf_over,					       vars->name,vars->name_length);	if (_debug_level) 	  printf("netsnmp_get:str_bufp:%s:%d:%d\n",		 str_bufp,str_buf_len,out_len);	str_buf[sizeof(str_buf)-1] = '\0';	if (__is_leaf(tp)) {	  type = (tp->type ? tp->type : tp->parent->type);	  getlabel_flag &= ~NON_LEAF_NAME;	  if (_debug_level) printf("netsnmp_get:is_leaf:%d\n",type);	} else {	  getlabel_flag |= NON_LEAF_NAME;	  type = __translate_asn_type(vars->type);	  if (_debug_level) printf("netsnmp_get:!is_leaf:%d\n",tp->type);	}		if (_debug_level) printf("netsnmp_get:str_buf:%s\n",str_buf);	__get_label_iid(str_buf, &tag, &iid, getlabel_flag);	py_netsnmp_attr_set_string(varbind, "tag", tag, STRLEN(tag));	py_netsnmp_attr_set_string(varbind, "iid", iid, STRLEN(iid));	__get_type_str(type, type_str);	py_netsnmp_attr_set_string(varbind, "type", type_str, 				   STRLEN(type_str));	len = __snprint_value(str_buf,sizeof(str_buf),			    vars,tp,type,sprintval_flag);	str_buf[len] = '\0';	py_netsnmp_attr_set_string(varbind, "val", str_buf, len);	/* save in return tuple as well */	PyTuple_SetItem(val_tuple, varlist_ind, 			(len ? Py_BuildValue("s#", str_buf, len) :			 Py_BuildValue("")));	Py_DECREF(varbind);      } else {	printf("netsnmp_get: bad varbind (%d)\n", varlist_ind);      }	    }    /* Reset the library's behavior for numeric/symbolic OID's. */    netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,		       NETSNMP_DS_LIB_OID_OUTPUT_FORMAT,		       old_format);    if (response) snmp_free_pdu(response);  } done:  SAFE_FREE(oid_arr);  return (val_tuple ? val_tuple : Py_BuildValue(""));}static PyObject *netsnmp_getnext(PyObject *self, PyObject *args){  PyObject *session;  PyObject *varlist;  PyObject *varbind;  PyObject *val_tuple = NULL;  int varlist_len = 0;  int varlist_ind;  netsnmp_session *ss;  netsnmp_pdu *pdu, *response;  netsnmp_variable_list *vars;  struct tree *tp;  int len;  oid *oid_arr;  int oid_arr_len = MAX_OID_LEN;  int type;  char type_str[MAX_TYPE_NAME_LEN];  int status;  u_char str_buf[STR_BUF_SIZE], *str_bufp = str_buf;  size_t str_buf_len = sizeof(str_buf);  size_t out_len = 0;  int buf_over = 0;  char *tag;  char *iid;  int getlabel_flag = NO_FLAGS;  int sprintval_flag = USE_BASIC;  int verbose = py_netsnmp_verbose();  int old_format;  int best_guess;  int retry_nosuch;  int err_ind;  int err_num;  char err_str[STR_BUF_SIZE];	     oid_arr = calloc(MAX_OID_LEN, sizeof(oid));  if (oid_arr && args) {    if (!PyArg_ParseTuple(args, "OO", &session, &varlist)) {      goto done;    }    ss = (SnmpSession *)py_netsnmp_attr_long(session, "sess_ptr");    strcpy(err_str, py_netsnmp_attr_string(session, "ErrorStr"));    err_num = py_netsnmp_attr_long(session, "ErrorNum");    err_ind = py_netsnmp_attr_long(session, "ErrorInd");    if (py_netsnmp_attr_long(session, "UseLongNames"))      getlabel_flag |= USE_LONG_NAMES;    if (py_netsnmp_attr_long(session, "UseNumeric"))      getlabel_flag |= USE_NUMERIC_OIDS;    if (py_netsnmp_attr_long(session, "UseEnums"))      sprintval_flag = USE_ENUMS;    if (py_netsnmp_attr_long(session, "UseSprintValue"))      sprintval_flag = USE_SPRINT_VALUE;	    best_guess = py_netsnmp_attr_long(session, "BestGuess");    retry_nosuch = py_netsnmp_attr_long(session, "RetryNoSuch");          pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);    if (varlist) {      PyObject *varlist_iter = PyObject_GetIter(varlist);      while (varlist_iter && (varbind = PyIter_Next(varlist_iter))) {	tag = py_netsnmp_attr_string(varbind, "tag");	iid = py_netsnmp_attr_string(varbind, "iid");	tp = __tag2oid(tag, iid, oid_arr, &oid_arr_len, 		       NULL, best_guess);	if (_debug_level) 	  printf("netsnmp_getnext: filling request: %s:%s:%d:%d\n", 		 tag, iid, oid_arr_len,best_guess);	if (oid_arr_len) {	  snmp_add_null_var(pdu, oid_arr, oid_arr_len);	  varlist_len++;	} else {	  if (verbose)	    printf("error: get: unknown object ID (%s)",		   (tag ? tag : "<null>"));	  snmp_free_pdu(pdu);	  goto done;	}	/* release reference when done */	Py_DECREF(varbind);      }      Py_DECREF(varlist_iter);      if (PyErr_Occurred()) {	/* propagate error */	if (verbose)	  printf("error: get: unknown python error");	snmp_free_pdu(pdu);	goto done;      }    }    status = __send_sync_pdu(ss, pdu, &response, retry_nosuch, 			     err_str, &err_num, &err_ind);    /*    ** Set up for numeric or full OID's, if necessary.  Save the old    ** output format so that it can be restored when we finish -- this    ** is a library-wide global, and has to be set/restored for each    ** session.    */    old_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID,				    NETSNMP_DS_LIB_OID_OUTPUT_FORMAT);    if (py_netsnmp_attr_long(session, "UseLongNames")) {      getlabel_flag |= USE_LONG_NAMES;      netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,			 NETSNMP_DS_LIB_OID_OUTPUT_FORMAT,			 NETSNMP_OID_OUTPUT_FULL);    }    /* Setting UseNumeric forces UseLongNames on so check for UseNumeric       after UseLongNames (above) to make sure the final outcome of        NETSNMP_DS_LIB_OID_OUTPUT_FORMAT is NETSNMP_OID_OUTPUT_NUMERIC */    if (py_netsnmp_attr_long(session, "UseNumeric")) {      getlabel_flag |= USE_LONG_NAMES;      getlabel_flag |= USE_NUMERIC_OIDS;      netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,			 NETSNMP_DS_LIB_OID_OUTPUT_FORMAT,			 NETSNMP_OID_OUTPUT_NUMERIC);    }    val_tuple = PyTuple_New(varlist_len);    /* initialize return tuple */    val_tuple = PyTuple_New(varlist_len);    for (varlist_ind = 0; varlist_ind < varlist_len; varlist_ind++) {      PyTuple_SetItem(val_tuple, varlist_ind, Py_BuildValue(""));    }    for(vars = (response ? response->variables : NULL), varlist_ind = 0;	vars && (varlist_ind < varlist_len);	vars = vars->next_variable, varlist_ind++) {      varbind = PySequence_GetItem(varlist, varlist_ind);      if (PyObject_HasAttrString(varbind, "tag")) {	*str_buf = '.';	*(str_buf+1) = '\0';	out_len = 0;	tp = netsnmp_sprint_realloc_objid_tree(&str_bufp, &str_buf_len,					       &out_len, 0, &buf_over,					       vars->name,vars->name_length);	str_buf[sizeof(str_buf)-1] = '\0';	if (__is_leaf(tp)) {	  type = (tp->type ? tp->type : tp->parent->type);	  getlabel_flag &= ~NON_LEAF_NAME;	} else {	  getlabel_flag |= NON_LEAF_NAME;	  type = __translate_asn_type(vars->type);	}	__get_label_iid(str_buf, &tag, &iid, getlabel_flag);	if (_debug_level) 	  printf("netsnmp_getnext: filling response: %s:%s\n", tag, iid);	py_netsnmp_attr_set_string(varbind, "tag", tag, STRLEN(tag));	py_netsnmp_attr_set_string(varbind, "iid", iid, STRLEN(iid));	__get_type_str(type, type_str);	py_netsnmp_attr_set_string(varbind, "type", type_str, 				   STRLEN(type_str));	len = __snprint_value(str_buf,sizeof(str_buf),			    vars,tp,type,sprintval_flag);	str_buf[len] = '\0';	py_netsnmp_attr_set_string(varbind, "val", str_buf, len);	/* save in return tuple as well */	PyTuple_SetItem(val_tuple, varlist_ind, 			(len ? Py_BuildValue("s#", str_buf, len) :			 Py_BuildValue("")));	Py_DECREF(varbind);      } else {	printf("netsnmp_getnext: bad varbind (%d)\n", varlist_ind);      }    }    /* Reset the library's behavior for numeric/symbolic OID's. */    netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,		       NETSNMP_DS_LIB_OID_OUTPUT_FORMAT,		       old_format);    if (response) snmp_free_pdu(response);  } done:  SAFE_FREE(oid_arr);  return (val_tuple ? val_tuple : Py_BuildValue(""));}static PyObject *netsnmp_walk(PyObject *self, PyObject *args){  PyObject *session;  PyObject *varlist;  PyObject *varbind;  PyObject *val_tuple = NULL;  PyObject *varbinds;  int varlist_len = 0;  int varlist_ind;  netsnmp_session *ss;  netsnmp_pdu *pdu, *response;  netsnmp_variable_list *vars;  struct tree *tp;  int len;  oid *oid_arr;  int oid_arr_len = MAX_OID_LEN;  int type;  char type_str[MAX_TYPE_NAME_LEN];  int status;  u_char str_buf[STR_BUF_SIZE], *str_bufp = str_buf;  size_t str_buf_len = sizeof(str_buf);  size_t out_len = 0;  int buf_over = 0;  char *tag;  char *iid;  int getlabel_flag = NO_FLAGS;  int sprintval_flag = USE_BASIC;  int verbose = py_netsnmp_verbose();  int old_format;  int best_guess;  int retry_nosuch;  int err_ind;  int err_num;  char err_str[STR_BUF_SIZE];  int notdone = 1;  int result_count = 0;	     oid_arr = calloc(MAX_OID_LEN, sizeof(oid));  if (oid_arr && args) {    if (!PyArg_ParseTuple(args, "OO", &session, &varlist)) {      goto done;    }    if (!varlist) {      goto done;    }    if ((varbinds = PyObject_GetAttrString(varlist, "varbinds")) == NULL) {      goto done;    }    ss = (SnmpSession *)py_netsnmp_attr_long(session, "sess_ptr");    strcpy(err_str, py_netsnmp_attr_string(session, "ErrorStr"));    err_num = py_netsnmp_attr_long(session, "ErrorNum");    err_ind = py_netsnmp_attr_long(session, "ErrorInd");    if (py_netsnmp_attr_long(session, "UseLongNames"))      getlabel_flag |= USE_LONG_NAMES;    if (py_netsnmp_attr_long(session, "UseNumeric"))      getlabel_flag |= USE_NUMERIC_OIDS;    if (py_netsnmp_attr_long(session, "UseEnums"))      sprintval_flag = USE_ENUMS;    if (py_netsnmp_attr_long(session, "UseSprintValue"))      sprintval_flag = USE_SPRINT_VALUE;	    best_guess = py_netsnmp_attr_long(session, "BestGuess");    retry_nosuch = py_netsnmp_attr_long(session, "RetryNoSuch");            PyObject *varlist_iter = PyObject_GetIter(varlist);    pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);        /* get the initial starting oids*/    while (varlist_iter && (varbind = PyIter_Next(varlist_iter))) {      tag = py_netsnmp_attr_string(varbind, "tag");      iid = py_netsnmp_attr_string(varbind, "iid");      tp = __tag2oid(tag, iid, oid_arr, &oid_arr_len,       	       NULL, best_guess);      if (_debug_level) 	printf("netsnmp_walk: filling request: %s:%s:%d:%d\n", 	       tag, iid, oid_arr_len,best_guess);      if (oid_arr_len) {        snmp_add_null_var(pdu, oid_arr, oid_arr_len);        varlist_len++;      } else {        if (verbose)          printf("error: walk: unknown object ID (%s)",      	   (tag ? tag : "<null>"));        snmp_free_pdu(pdu);        goto done;      }      /* release reference when done */      Py_DECREF(varbind);    }    Py_DECREF(varlist_iter);    if (PyErr_Occurred()) {      /* propagate error */      if (verbose)        printf("error: walk: unknown python error (varlist)");      snmp_free_pdu(pdu);      goto done;    }

⌨️ 快捷键说明

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