|
|
@@ -42,6 +42,7 @@ init_pduMIB(void)
|
|
|
const oid pduPactivePower_oid[] = { 1,3,6,1,4,1,2024,1,3,5 };
|
|
|
const oid pduReactivePower_oid[] = { 1,3,6,1,4,1,2024,1,3,6 };
|
|
|
const oid pduApparentPower_oid[] = { 1,3,6,1,4,1,2024,1,3,7 };
|
|
|
+ const oid pduPowerStatus_oid[] = { 1,3,6,1,4,1,2024,1,3,8 };
|
|
|
const oid pduTelnetEnable_oid[] = { 1,3,6,1,4,1,2024,1,5,2,1 };
|
|
|
const oid pduTelnetUserName_oid[] = { 1,3,6,1,4,1,2024,1,5,2,2 };
|
|
|
const oid pduTelnetUserPW_oid[] = { 1,3,6,1,4,1,2024,1,5,2,3 };
|
|
|
@@ -220,6 +221,11 @@ init_pduMIB(void)
|
|
|
pduApparentPower_oid, OID_LENGTH(pduApparentPower_oid),
|
|
|
HANDLER_CAN_RONLY
|
|
|
));
|
|
|
+ netsnmp_register_scalar(
|
|
|
+ netsnmp_create_handler_registration("pduPowerStatus", handle_pduPowerStatus,
|
|
|
+ pduPowerStatus_oid, OID_LENGTH(pduPowerStatus_oid),
|
|
|
+ HANDLER_CAN_RWRITE
|
|
|
+ ));
|
|
|
netsnmp_register_scalar(
|
|
|
netsnmp_create_handler_registration("pduTelnetEnable", handle_pduTelnetEnable,
|
|
|
pduTelnetEnable_oid, OID_LENGTH(pduTelnetEnable_oid),
|
|
|
@@ -1968,6 +1974,85 @@ handle_pduApparentPower(netsnmp_mib_handler *handler,
|
|
|
return SNMP_ERR_NOERROR;
|
|
|
}
|
|
|
int
|
|
|
+handle_pduPowerStatus(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:
|
|
|
+ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
|
|
|
+ /* XXX: a pointer to the scalar's data */,
|
|
|
+ /* XXX: the length of the data in bytes */);
|
|
|
+ break;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * SET REQUEST
|
|
|
+ *
|
|
|
+ * 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_INTEGER);
|
|
|
+ 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_pduPowerStatus\n", reqinfo->mode );
|
|
|
+ return SNMP_ERR_GENERR;
|
|
|
+ }
|
|
|
+
|
|
|
+ return SNMP_ERR_NOERROR;
|
|
|
+}
|
|
|
+int
|
|
|
handle_pduTelnetEnable(netsnmp_mib_handler *handler,
|
|
|
netsnmp_handler_registration *reginfo,
|
|
|
netsnmp_agent_request_info *reqinfo,
|