- 论坛徽章:
- 0
|
以下函数是实现一分钟负载,由于负载是浮点数,所以我用的char来转换。下面的代码是使用mib2c自动生成的,但是对其中的几个CASE不明白。- int
- handle_loadOne(netsnmp_mib_handler *handler,
- netsnmp_handler_registration *reginfo,
- netsnmp_agent_request_info *reqinfo,
- netsnmp_request_info *requests)
- {
- int ret;
- /*
- * We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
- */
- /*
- * a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
- */
- switch (reqinfo->mode) {
- case MODE_GET:
- (requests->requestvb, ASN_OCTET_STR,
- (u_char *)
- /* XXX: a pointer to the scalar's data */
- ,
- /*
- * XXX: the length of the data in bytes
- */ );
- break;
- /*
- * SET REQUEST
- *snmp_set_var_typed_value
- * multiple states in the transaction. See:
- * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
- */
- case MODE_SET_RESERVE1:
- /*
- * or you could use netsnmp_check_vb_type_and_size instead
- */
- ret = netsnmp_check_vb_type(requests->requestvb, ASN_OCTET_STR);
- if (ret != SNMP_ERR_NOERROR) {
- netsnmp_set_request_error(reqinfo, requests, ret);
- }
- break;
- case MODE_SET_RESERVE2:
- /*
- * XXX malloc "undo" storage buffer
- */
- if ( /* XXX if malloc, or whatever, failed: */ ) {
- netsnmp_set_request_error(reqinfo, requests,
- SNMP_ERR_RESOURCEUNAVAILABLE);
- }
- break;
- case MODE_SET_FREE:
- /*
- * XXX: free resources allocated in RESERVE1 and/or
- * RESERVE2. Something failed somewhere, and the states
- * below won't be called.
- */
- break;
- case MODE_SET_ACTION:
- /*
- * XXX: perform the value change here
- */
- if ( /* XXX: error? */ ) {
- netsnmp_set_request_error(reqinfo, requests, /* some error */
- );
- }
- break;
- case MODE_SET_COMMIT:
- /*
- * XXX: delete temporary storage
- */
- if ( /* XXX: error? */ ) {
- /*
- * try _really_really_ hard to never get to this point
- */
- netsnmp_set_request_error(reqinfo, requests,
- SNMP_ERR_COMMITFAILED);
- }
- break;
- case MODE_SET_UNDO:
- /*
- * XXX: UNDO and return to previous value for the object
- */
- if ( /* XXX: error? */ ) {
- /*
- * try _really_really_ hard to never get to this point
- */
- netsnmp_set_request_error(reqinfo, requests,
- SNMP_ERR_UNDOFAILED);
- }
- break;
- default:
- /*
- * we should never get here, so this is a really bad error
- */
- snmp_log(LOG_ERR, "unknown mode (%d) in handle_loadOne\n",
- reqinfo->mode);
- return SNMP_ERR_GENERR;
- }
- return SNMP_ERR_NOERROR;
- }
复制代码 若是实现snmpget值,是否是该在函数中定义 float loadOneMin;来实现? |
|